Und mein Ziel war es, darauf hinzuweisen, dass die Frage künftig von vornherein sauber gestellt wird.
Unter Windows reagiert man immer auf
Ereignisse. Beim DataGridView ist das Problem, den richtigen Bestandteil mit einem passenden Ereignis zu finden. Auch wenn du 7 Spalten mit CheckBoxen füllst und 389 Zeilen hast, gibt es
genau eine CheckBox für das ganze DataGridView, die in der jeweils aktiven DataGridViewCheckBoxCell eingeblendet wird.
Diese könntest du auswerten, indem du zunächst das Ereignis
EditingControlShowing benutzt, diese CheckBox als Variable zwischenspeicherst und nach dem Verlassen der Zelle ihren Wert abfragst.
Oder du benutzt direkt den Click auf die Zelle:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void myDataGridView_CellClick( object sender, DataGridViewCellEventArgs e ) { int i1 = e.RowIndex; int i2 = e.ColumnIndex; if (myDataGridView.Rows[i1].Cells[i2] is DataGridViewCheckBoxCell) { if( (bool)(myDataGridView.Rows[i1].Cells[i2] as DataGridViewCheckBoxCell).Value ) myTable.Rows[i2].Delete(); } } |
Das ist noch verkürzt formuliert; z.B. muss auch geregelt werden, dass ein Datensatz auf "Löschen" gesetzt worden war und dieser Check zurückgenommen wird. Aber so ähnlich könnte es gehen, aber:
So etwas Dummes, in der
SDK-Doku/MSDN/Hilfe steht folgender Hinweis:
Zitat: |
Beim Klicken in einer DataGridViewCheckBoxCell tritt dieses Ereignis auf, bevor sich der Wert des Kontrollkästchens ändert. Wenn Sie nicht den erwarteten Wert auf Grundlage des aktuellen Werts berechnen möchten, behandeln Sie stattdessen das DataGridView.CellValueChanged-Ereignis. |
Also muss
DataGridView.CellValueChanged oder auch
DataGridView.CellValueNeeded verwendet werden. Dazu hat die
SDK-Doku ein wohl passendes Beispiel.
Gruß Jürgen
PS. Ich stimme zu, wenn das DGV als seltsam kompliziertes Control bezeichnet wird. Das Problem besteht darin, dass es vorwiegend zur Anzeige (und Änderung) von Daten gedacht war und jeweils die Werte der Daten (z.B. DataTable) abgefragt werden sollten. Den Entwicklern ist während der Arbeit aber soviel zur Arbeitserleichterung für die Anwender eingefallen, dass sie sich verrannt haben und es dadurch intern um so komplizierter wurde.