Entwickler-Ecke
WPF / Silverlight - WPF DataGrid - Datensatzauswahl
Megatrash - Mo 30.03.15 15:42
Titel: WPF DataGrid - Datensatzauswahl
Ich möchte in einem DataGrid die nicht zugewiesenen Datensätze und in einem weiteren DataGrid die bereits zugewiesenen Datensätze anzeigen. Dazu habe ich eine DataTable mit zwei unterschiedlichen DataViews verwendet. Diese Views habe ich an das jeweilige DataGrid gebunden.
Wenn ich nun einen Datensatz auswähle, soll dieser aus dem ersten DataGrid verschwinden und in dem zweiten angezeigt werden. Das soll auch mit mehreren Datensätzen gleichzeitig funktionieren.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| DataView v1 = new DataView(ds.Documents); DataView v2 = new DataView(ds.Documents);
v1.RowFilter = "Selected = False"; v2.RowFilter = "Selected = True";
da.Fill(ds.Documents); myGrid01.ItemsSource = v1; myGrid02.ItemsSource = v2;
private void Grand(object Sender, RoutedEventArgs e) { int Count = myGrid01.SelectedItems.Count; if (Count > 0) { foreach (DataRowView rc in myGrid01.SelectedItems) { rv.Row.SetField(4,true); } } } |
Leider funktioniert dies nicht. Es wird eine Ausnahme des Types "System.InvalidOperationException" ausgelöst. Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden.
Hat jemand eine Idee, wie ich diese Funktion umsetzen kann?
Ralf Jansen - Mo 30.03.15 17:19
Man darf während des Iterierens über eine Liste (z.B. dein myGrid01.SelectedItems) nicht die Liste ändern(Elemente in der Liste ja aber nicht die Liste selbst).
Ich vermute mal Column 4 entspricht selected. Durch ändern von selected fällt die betroffene Row aus dem Filter wodurch sie auch zwangsweise aus myGrid01.SelectedItems fällt und das mißfällt dem System da wie gesagt man während einem foreach nicht die Liste ändern darf über die man iteriert.
Entweder keinen foreach verwenden sondern einen anderen Schleifenkonstrukt (z.B. for) oder nicht direkt über diese Liste iterieren sondern einer Kopie davon (z.b. wenn man auf SelectedItems noch ein ToList() aufruft, wenn möglich).
Megatrash - Mo 30.03.15 20:13
Ja, das hört sich plausibel an. Wenn ich z. B. eine andere Spalte ändere, die nicht Bestandteil des Filters ist, funktioniert die Anpassung.
Danke.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!