Dieses Problem plagt mich schon seit mehreren Jahren, und vielleicht kennt jemand hier eine einfache Lösung, denn ich bin gerade wieder darauf gestoßen.
FRAGE: Gibt es eine Möglichkeit, das XtraGrid dazu zu bringen, den aktuellen fokussierten Zeilenindex zu "vergessen", bevor dem Gitter eine neue (andere) Datenquelle zugewiesen wird?
HINTERGRUND Wir verwenden das XtraGrid als eine Art Controller für das, was in einem anderen Panel einer mehrseitigen Winform angezeigt wird.
Stellen Sie sich nun ein hypothetisches Szenario vor, in dem sich die Datenquelle des XtraGrid je nach Menüauswahl ständig ändert. Menüpunkt 1 füllt das Gitter mit einer Liste der heutigen Hauptgerichte in der Cafeteria: Id, Name. Menüpunkt 2 füllt das Raster mit einer Liste der Kunden, die der Benutzer an diesem Tag anrufen muss: ID, Name. Wichtig ist, dass es sich dabei um getrennte Datenquellen handelt, und dass die Datenquelle des Rasters zugewiesen und neu zugewiesen wird.
KRITISCHE TATSACHE FÜR DIESE FRAGE: Wir wollen, dass das Ereignis FocusedRowChanged des Grids der einzige Ort wo wir die Auswahl des Benutzers im Controller-Gitter abfangen. Wir sind ein "No Spaghetti Code"-Laden. FocusedRowChanged ist besser als ein Klick-Ereignis, weil es auch die Tastaturnavigation behandelt. Die Zeile mit dem Fokus enthält die ID des Detaildatensatzes, den wir aus der Datenbank holen müssen, um ihn in Panel #2 anzuzeigen. Das funktioniert. die meiste Zeit .
So funktioniert es nicht: Angenommen, die Liste der Kunden, mit denen der Benutzer Kontakt aufnehmen muss, enthält an einem bestimmten Tag nur eine Zeile. Die erste (und einzige) Zeile im Raster ist also die fokussierte Zeile. Nehmen wir nun an, der Benutzer geht zum Menü und wählt den Menüpunkt aus, um die Tagesgerichte der Cafeteria anzuzeigen. Wenn der Benutzer auf das erste Element in der Liste Entrees klickt, wird das Ereignis FocusedRowChanged NICHT ausgelöst, da das Raster den Index der fokussierten Zeile aus der vorherigen Datenquelle gespeichert hat. Die fokussierte Zeile Index hat sich nicht geändert. Die Auswahl des Benutzers löst also nichts aus.
Ich habe versucht, DevExpress dazu zu bringen, einen zweiten, eher zeilenobjektorientierten Modus anzubieten (im Gegensatz zum zeilenindexorientierten Ansatz), bei dem jede Zeile im Raster eine GUID hat und das Ereignis FocusedRowChanged immer dann ausgelöst wird, wenn sich die GUID der aktuell fokussierten Zeile von der GUID der zuvor fokussierten Zeile unterscheidet, unabhängig davon, ob der Index der fokussierten Zeile derselbe ist. Dies würde dynamische Änderungen der Datenquelle erlauben und das gewünschte Verhalten ermöglichen. Aber sie lehnten ab.
Also werde ich meine Frage erneut stellen, gibt es eine Möglichkeit, die XtraGrid zu "vergessen" die aktuelle fokussierte Zeile Index, bevor eine neue Datenquelle dem Raster zugewiesen wird?