Nabend zusammen,
ich habe ein Verständnisproblem bei meinem Datagridview in Verbindung mit dem CellValueChanged Event.
Folgendes ist die Situation:Mein DataGridView dient der Anzeige einer Tabelle einer SQL Server Datenbank, die ersten beiden Spalten sind dabei Comboboxen (DatagridviewComboboxCell) und zeigen Inhalte einer "Stammdatentabelle" an. (SelectedValue Eigenschaft ist auf eine Guid gesetzt, Displaymember ist eine Bezeichnung, also String) Alle weiteren Spalten sind vom Typ TextboxCells.
In meinem CellValueChanged Event fange ich nun 3 mögliche Fälle ab:
a) Änderung in Spalte 0
Nun mein Problem welches ich nicht ganz verstehe. Ändere ich z. B. den Wert in Spalte 0, also einer der Comboboxen, sollte meiner Meinung nach das CellValue Changed Event ausgelöst werden und Fall a) abgearbeitet werden. Während der Abarbeitung würde der entsprechend Fall b) ausgelöst.
Real ist aber die folgende Abarbeitung:
Zunächst a), darin b), anschließend nochmal b), weiter mit a), nochmal a)
Jeder Durchlauf wird also doppelt ausgeführt. Habe ich dort irgendwo einen Denkfehler drin oder hängt die doppelte Ausführung damit zusammen, dass einmal die ID gesetzt wird (diese ist ja an SelectedValue gebunden) und das zweite Auslösen durch Anzeige der DisplayMember Eigenschaft ausgelöst wird? Oder bin ich völlig auf dem falschen Dampfer?
Gruß
Jens
Hallo KeR
Ich weiss nicht ganz ob ich richtig vermute, aber meiner Meinung nach ist deine Programmierung ein wenig riskant.
wenn a) gemacht wird, wird automatisch b) ausgelöst, da sich die Spalte 1 durch a) verändert wird. das gleiche gilt für b). wenn b) gemacht wird, wird dann automatisch a) ausgelöst.
So kann das ewig weitergehen.
vielleicht kannst du mit der Methode SelectionChanged einen Workaround machen, in dem du in der Methode kontrollierst, welche Spalte angewählt wurde und so a), b) oder c) durchführst.
Da habe ich noch eine Sache vergessen, so dass eben dies nicht geschieht:
Wird Fall a) ausgelöst, wird quasi der Wert von Spalte 0 (also die ID) in Spalte 1 kopiert, im daraufhin ausgelösten Fall b) wird zwar der Wert von Spalte 1 in Spalte 0 kopiert, jedoch löst dies keinen CellValue Change aus (die ID stand ja bereits darin). Fall b) läuft analog, so dass ich in keine Endlosschleife komme.
Selection Changed hatte ich bereits mal überlegt, jedoch wird da ja durch Klicken des Nutzers jedes Mal der Fall a), b) oder c) abgearbeitet bzw. zumindest abgefragt, auch wenn ich gleich wieder rausspringe, es soll aber lediglich bei einer Zellwertänderung geschehen.
Interessant wäre es für mich zu wissen, was genau im einzelnen geschieht, also ob das Ändern der SelectedValue Eigenschaft das Event auslöst und die folgende Änderung der DisplayMember Eigenschaft nochmal, oder ob es sich lediglich um einen Positionswechsel im Bindingsource handelt (und somit meine Vermutung falsch ist und die Ursache für die doppelte Ausführung woanders liegt).
Gruß
Jens
Mir scheint, du willst die spalten 0 und 1 synchronisieren.
Da häng die doch an dieselbe BindingSource.
Der frühe Apfel fängt den Wurm.