2017-05-21 6 views
0

Ich habe ein WinForm mit einem DataGridView Steuerelement. Es enthält eine CheckBox Spalte.C# DataGridViewCheckBoxColumn unterdrücken Standardverhalten beim Klicken

Ich verwende ein CellMouseClick Ereignis mit Auswertung des aktuellen Spaltenindex für die Auswertung. Ein anderes Formular wird geöffnet, nachdem Sie auf das Kontrollkästchen geklickt haben, unabhängig vom logischen Status des Kontrollkästchens.

Abhängig vom Ergebnis der Eingabe im neuen Formular, versuche ich State des Kontrollkästchens zu setzen.

Leider wird meine Einstellung durch das Standardverhalten des Kontrollkästchens überschrieben.

I.e. Wenn das Kontrollkästchen aktiviert war, wird es schließlich deaktiviert und umgekehrt.

Meine Frage ist, ob es eine Möglichkeit gibt, dieses Verhalten zu unterdrücken oder zu umgehen. Möglicherweise etwas wie e.Handled?

Ich habe auch das CellContentClick Ereignis verwendet, aber das Ergebnis ist das gleiche.

+0

Vielleicht helfen Ihnen 'CurrentCellDirtyStateChanged' und' NotifyCurrentCellDirty'. –

Antwort

0

Verwenden Sie das Ereignis DataGridView.CellValidating. In der Verknüpfung gibt es ein Beispiel, wie das Ereignis der aktuellen Zelle abgebrochen werden kann. Wenn ein Kontrollkästchen vorhanden ist, wird dieses Ereignis nur ausgelöst, wenn der Benutzer die Zelle verlässt. Um dieses Problem zu lösen, verwenden Sie das Ereignis DataGridView.CurrentCellDirtyStateChanged Event und erzwingen Sie das Commit zu ändern. Dies ist ein example.

0

Vielen Dank für Ihren Rat. Leider kann ich, wie beschrieben, nicht den gewünschten Effekt erzielen. Ich verwende die Events CurrentCellDirtyStateChanged und CellValidating wie vorgeschlagen. Das Verhalten ist etwas seltsam in meinen Augen. Innerhalb des CurrentCellDirtyStateChanged-Ereignisses habe ich den CellValue des Kontrollkästchens überprüft, bevor (es ist wahr) und nachdem (es ist falsch) CommitEdit aufrufen. Das CellValidating-Ereignis wird nicht ausgelöst. Das Abbrechen des Ereignisses ist nicht möglich.

Ok, beim Verlassen des Formulars - das wurde durch einen Klick auf die CheckBox geöffnet - Ich habe die CheckBox-Zelle nicht verlassen.

Also versuchte ich, das Problem zu lösen, indem ich die CheckBox-Zelle belasse, indem ich CurrentCell auf eine andere Zelle setze. Als Ergebnis wird das CellValidating Event ausgelöst. Das Setzen von e.Cancel = true führt jedoch zu einer Exception.

Nach einigen zusätzlichen Versuchen basierend auf Ihren Vorschlägen kann ich den gewünschten Effekt erzielen, ohne die CurrentCellDirtyStateChanged und CellValidating Events zu verwenden. Nachdem ich das zusätzliche Formular jetzt verlassen habe, bekomme ich den Rückgabewert vom Formular, setze die CheckBox-Zelle entsprechend diesem Wert, setze CurrentCell auf die nächste Zelle in CurrentRow und rufe RefreshEdit auf. Der CheckBox-Status wird immer auf den korrekten Wert gesetzt und nicht geändert, wenn ich das zusätzliche Formular ohne Änderungen belasse. Das ist was ich will. Vielleicht kann dies anderen helfen, die ähnliche Probleme haben.

Verwandte Themen