Kann DataGridView.EndEdit das CellValidating-Ereignis auslösen?

8

Ich verwende ein DataGridView in meiner WinForms-Anwendung. Mein Hauptziel ist es, dass die Eingabetaste nicht in die nächste Zeile im Raster bewegt wird. Ich möchte immer noch, dass die Eingabetaste den Bearbeitungsmodus bestätigt und beendet.

Ich habe diesen FAQ-Eintrag und subclasssed DataGridView, um ProcessDialogKey () zu überschreiben. Wenn die Taste Enter gedrückt wird, rufe ich EndEdit () auf, andernfalls rufe ich base.ProcessDialogKey () auf.

Es funktioniert großartig, außer das CellValidating-Ereignis wird nicht ausgelöst.

Momentan rufe ich nur manuell meine Validierungslogik auf, bevor ich EndEdit anrufe, aber es scheint, als würde ich etwas verpassen.

Ich denke, ich könnte OnCellValidating anrufen, aber dann würde ich mir Sorgen machen, dass ich ein anderes Ereignis verpasse. Was ich wirklich will, ist eine Variante von EndEdit (), die sich genauso verhält wie das Drücken von Enter in der letzten Zeile eines Rasters mit dem Hinzufügen von deaktiviert.

    
Don Kirkby 18.12.2009, 18:02
quelle

5 Antworten

11

CellValidating wird erst aufgerufen, wenn Sie die CurrentCell ändern. Also klickte ich sozusagen die CurrentCell ab und wechselte dann auf die aktuelle.

%Vor%     
JJO 02.05.2009, 00:09
quelle
5

JJOs Code stürzt ab, wenn sich die Zelle im Bearbeitungsmodus befindet. Unterhalb wird die Validierungsausnahme vermieden:

%Vor%

Quelle: Antwort von Kennet Harris hier

    
jaminator 25.02.2013 20:11
quelle
2

Wenn Ihre DataGridView DataSource BindingSouce ist, tun Sie dies (setzen Sie dies in Ihre Schlüsselverarbeitungsereignisse ):

%Vor%

Wenn die DataSource Ihrer DataGridView DataTable ist:

%Vor%     
Michael Buen 05.04.2010 08:55
quelle
1

Danke für die Lösung. Meine Version ist ein wenig anders als Ihre, weil, wenn ich in die andere Zelle gehe, und mein Code e.cancel = false in der Zelle Validierungsereignis zurückgibt, wird ein Fehler generiert, sagt: "Operation war nicht erfolgreich, weil die Programm kann keine Zellenwertänderung festschreiben oder beenden ". Also versuche ich es zu versuchen, um dieses Problem zu überwinden.

das ist mein Code:

%Vor%     
user309091 30.04.2010 18:55
quelle
0

Nein, aber Sie können das CellValidating-Ereignis manuell auslösen. Erstellen Sie einfach die richtigen Parameter. Alle Events sind eine Klasse, die das Observer Pattern verwendet, sie unterscheiden sich nicht von anderen Methoden. Wenn das nicht funktioniert, können Sie ein KeyPress-Ereignis für die Zelle erstellen und emulieren, indem Sie in der Zelle die Eingabetaste drücken, aber das könnte die Benutzeroberfläche des Benutzers stören. Setzen Sie das Karat einfach dorthin zurück, wo es war.

    
Malfist 08.01.2009 17:25
quelle

Tags und Links