Ich habe eine DevExpress.XtraGrid.GridControl
, die eine Spalte mit DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit
als Zell-Editoren hat.Trigger Grid Zeile Validierung bei der Auswahl von Cell Editor LookupEdit ändert
Wenn ich ein Objekt aus dem LookUpEdit auswähle, führt dies zu keiner Überprüfung, aber nichts, bis ich irgendwo klicke, damit das Gitter den Fokus verliert.
Mein gewünschtes Verhalten wäre, dass das Ändern der LookUpEdit-Auswahl sofort ein Zeilenüberprüfungsereignis des Rasters auslöst.
Wie konnte dies erreicht werden?
Die official DevExpress Documentation erzählt die Gridview die UpdateCurrentRow
Methode aufzurufen:
Es kann Fälle geben, wenn Sie Reihe Validierung implementieren müssen. [...] Um dies zu tun, behandeln Sie das Ereignis
ColumnView.ValidateRow
. Beachten Sie, dass Sie die Überprüfung der Zeilen auch manuell starten können, indem Sie die MethodeColumnView.UpdateCurrentRow
aufrufen.
Ich tat dies in der ValidatingEditor
Ereignishandler Gridview:
private void gridView1_ValidatingEditor(object sender,BaseContainerValidateEditorEventArgs e)
{
(sender as GridView).UpdateCurrentRow();
}
aber jetzt habe ich neue Zeilen in die Gitter nicht hinzufügen können, mehr als Endbenutzer.
Was wäre der richtige Ansatz?
Update:
ich jetzt auf die CellValueChanging
der Gridview-Veranstaltung am Zuhören und es so Handhabung:
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
{
GridView gv = (sender as GridView);
gv.CellValueChanging -= gridView_CellValueChanging; // detach this event handler
gv.ActiveEditor.EditValue = e.Value;
gv.CellValueChanging += gridView_CellValueChanging; // re-attach handler
gv.CloseEditor();
}
Ich bin sicher, dass dies nicht der Weg ist, wie man es tun soll , aber es funktioniert für vorhandene Zeilen. Es funktioniert jedoch nicht in der "neuen Zeile" - ich muss immer noch irgendwo anders klicken, um Änderungen anzuwenden, die einen neuen Eintrag erstellen. Ich möchte, dass eine neue Zeile erstellt wird, sobald eine Zelle der "neuen Zeile" bearbeitet wurde.
Nein, das funktioniert nicht. Und wenn ich den 'ValidatingEditor'-Event behandle, scheint der Editor bereits geschlossen zu sein - zumindest hat er keine Wirkung. Ich habe ein Code-Snippet gefunden, das auf vorhandenen Zeilen, aber nicht auf der neuen Zeile funktioniert und es zu meiner Frage hinzugefügt hat. Ich möchte jedoch, dass es die neue Zeile gleichermaßen behandelt. Es sieht auch sehr dreckig aus. Würden Sie bitte nachsehen? –
Diesen Code nicht zu ValidatingEditor setzen, ihn woanders setzen (cellvaluechanging, lookupeditors Closed ...) –
Wenn ich es in 'CallValueChanging' setze, bricht es die Bearbeitung ab, anstatt sie anzuwenden. Das bedeutet, egal was ich im LookUpEdit auswähle, es wird immer sofort auf den vorherigen Wert zurückgesetzt. Daher musste ich den 'EditValue' manuell in meinem Code einstellen. Das würde jedoch ein anderes 'CellValueChanging'-Ereignis verursachen, das zu einer endlosen Rekursion führt, die zu einer StackOverflowException führt. Deshalb habe ich dieses hässliche Un- und Unterschreiben in meinem Handler. Aber auf der "neuen Reihe" funktioniert es überhaupt nicht. –