Autor Beitrag
Megatrash
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 30.03.15 15:42 
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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).

Für diesen Beitrag haben gedankt: Megatrash
Megatrash Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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.