2009-08-16 14 views
1

Ich möchte den Index der aktuellen Zeile meines DataGridView abrufen. Das Problem ist, dass, wenn die aktuelle Zeile die neue Zeile ist, CurrentRow auf die letzte Zeile gesetzt wird, die nicht die neue Zeile ist. Ich kann nicht prüfen, ob die Zeilen ausgewählt sind, denn wenn eine Zeile ausgewählt ist, bedeutet das nicht, dass sie die aktuelle Zeile ist und die aktuelle Zeile nicht unbedingt ausgewählt ist.DataGridView CurrentRow schließt neue Zeile aus

Ich kann den Index der neuen Zeile abrufen, aber wie kann ich wissen, ob die neue Zeile die aktuelle Zeile ist?

+0

Hallo, in gewisser Weise verstehe ich, was Sie meinen, aber ich sehe nicht, warum Sie currentRow verwenden müssen, was whant Sie whith es zu tun? Beste Grüße, Iordan – IordanTanev

+0

Ich möchte eine Zelle der aktuellen Zeile mit einem Wert füllen, wenn der Benutzer auf eine Schaltfläche klickt. Wenn diese Zeile zufällig die neue Zeile ist, sollte diese Zeile erstellt werden und die Zelle sollte mit dem Wert gefüllt werden. – Ruud

Antwort

3

I in das Cellclick-Ereignis über den folgenden Code verhakt:

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex); 
} 

Wenn diese Bedingung erfüllt ist, kann der Benutzer 'ausgewählt' die neue Zeile. Basierend auf diesen Informationen müssen Sie möglicherweise einen neuen Datensatz einfügen (mit der Methode ..Rows.Add()), bevor Sie tatsächlich etwas damit tun können, da die neue Zeile in der Auflistung nicht vorhanden ist. Es ist nur als Platzhalter vorhanden, um eine neue Zeile darzustellen.

+0

Ich denke, das wird funktionieren. Ich werde es so schnell wie möglich versuchen. – Ruud

+0

Es gibt einen Fehler in Ihrer Lösung: Wenn der Benutzer die aktuelle Zelle nicht durch Klicken, sondern über die Tastatur ändert, funktioniert das nicht. Das CurrentCellChanged-Ereignis funktioniert, aber es sendet keine Zelle. – Ruud

+0

Dann müssen Sie wahrscheinlich auch Tastenanschläge erfassen und sehen, ob Sie auf die "Bewegung" reagieren sollten. Wenn zum Beispiel ein "Pfeil nach unten" neben der letzten Zeile steht, würde dies anzeigen (vielleicht?), Dass der Benutzer versucht, eine Zeile hinzuzufügen. Sie können dann die gleichen Schritte (Einfügen eines neuen Datensatzes usw.) wie oben ausführen. –

0

Kann dieser Eigenschaftswert Ihr Problem lösen?

dataGridView1.CurrentCell.RowIndex

+0

Nein, dasselbe Problem damit, ich habe es schon ausprobiert. – Ruud

0

Ich verwende das CellEnter-Ereignis, um CurrentCell.RowIndex in einer Formularvariablen zu speichern. Wenn Sie auf eine andere Schaltfläche klicken, wird dieses Ereignis mit dem letzten vorhandenen Zeilenindex statt mit dem neuen Zeilenindex ausgelöst, den wir benötigen. Testen Sie, ob der Fokus diesen Fall ignoriert.

Dadurch wird vermieden, dass Sie nach allen möglichen Tasten- und Mausaktionen suchen müssen, die den Cursor wie beim CellClick-Ereignis in die neue Zeile bewegen.

-Code automatisch umgerechnet von VB:

private int ActualCurrentRowIndex; 

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) 
{ 
    if (DataGridView1.Focused) { 
     ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex; 
    } 
} 
Verwandte Themen