2009-07-22 13 views
2

Ich versuche, mein Datagridview-Steuerelement die ausgewählte Zeile nach Datenaktualisierung zu erinnern.
Der DGV ist Databound zu einer Liste von Geschäftsobjekten:Erinnern Sie sich an ausgewählte Zeile in DataGridView

Dim FXs As SortableBindingList(Of FX) = FX.LoadAllForBinding(FXStatus) 
Dim bs As New BindingSource 
bs.DataSource = FXs 

Der Gesamtablauf ist so etwas wie folgt aus:

  1. Benutzer klickt auf einer Reihe
  2. Zeilenindex in einer Variablen
  3. gespeichert
  4. Benutzer bearbeitet Daten im Popup-Formular und schließt nach Fertigstellung
  5. Datagridview wird aktualisiert (von Grund auf neu gebunden)
  6. Ausgewählte Reihe zum zuvor gespeicherten Index (in Databindingcomplete-Ereignis von DGV)

    Me.dgvMain.Rows (_CurrentSelectedRowNo) .Selected = True

Diese gut zu funktionieren scheint gesetzt, ausgewählte Zeile ist richtig eingestellt (mindestens zählt die Zahl von 0 bis 1). Was jedoch als nächstes passiert, ist, dass der Debugger in die Eigenschaften des gebundenen Geschäftsobjekts springt (vermutlich liest er sie für die Bindung), so dass das DataBindingComplete-Ereignis ausgelöst wird, BEVOR die Datenbindung erfolgt ist.

Der DGV kann bis zu 300 Zeilen haben, daher ist es für den Benutzer ziemlich ärgerlich, dass er jedes Mal, wenn er eine Zeile bearbeitet, in die Reihe Null springt!

Mache ich hier etwas offensichtlich falsch? Soll ich dafür ein anderes Event nutzen?

+0

Gibt es einen Grund, warum Sie nicht einfach die Werte in der Datenrasteransicht bearbeiten können? Welchen Vorteil hat die Bearbeitung der Daten in einem Popup-Formular? – SwDevMan81

+0

Grundlegende Design, die DGV zeigt nur eine Teilmenge von Feldern. – Simon

Antwort

1

Ich mache etwas ähnliches, aber nicht mit einem Raster-Ereignis zu bestimmen, wann zu aktualisieren. Ich rufe meine Aktualisierungsroutine auf, nachdem sie im Bearbeitungsformular bearbeitet wurden.

Das Problem bei der Verwendung der Rasterzeilennummer ist, dass sie sich nach oder während der Bearbeitung geändert haben könnte, insbesondere wenn Sie mehrere Benutzer unterstützen und Ihr Raster eine Ansicht einer Tabelle auf einem Server ist oder die Rasterzeilen.

Ich muss die PK-Werte der Zeile verwenden, um die geänderte Zeile zu identifizieren, und da sie einen der pk-Werte während der Bearbeitung ändern können, muss ich auch den aktualisierten PK-Wert verfolgen.

Ich hebe mein eigenes Ereignis, wenn sie einen Wert aktualisieren.

Verwandte Themen