Laden...

Zeilen zwischen 2 DataTables hin und her verschieben via Buttons

Erstellt von mrennen vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.369 Views
M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 10 Jahren
Zeilen zwischen 2 DataTables hin und her verschieben via Buttons

Hallo zusammen,

ich habe eine Denkblockade und hoffe jemand kann mir helfen diese zu lösen ...

Folgendes Problem:

Ich habe 2 DataTable und würde gerne die Einträge von a nach b und umgekehrt verschieben (via Button).

Das kopieren der Einträge in die jeweilige Ziel-DataTable funktioniert, jedoch bekomme ich beim Löschen immer folgende Fehlermeldung:

Die angegebene DataRow befindet sich nicht in der aktuellen DataRowCollection.

Hier also einmal der Quellcode und ein Screenshot vom entsprechenden Programmbereich:


private void btnAddFiles_Click(Object sender, EventArgs e)
        {
            DataTable dt = GridHelper.GetTableOfSelectedRows(gridView);
            foreach (DataRow dr in dt.Rows)
            {
                var row = _rFiles.NewRow();
                row.ItemArray = dr.ItemArray;
                _rFiles.Rows.Add(row);

                _lFiles.Rows.Remove(row); // Hier kommt die Exception
            }
        }

Ich hoffe jemand hat einen Hinweis für mich

Danke

C
2.122 Beiträge seit 2010
vor 10 Jahren

Ich tippe der Add Mechanismus ist so intelligent dass er die Row aus der bisherigen Table raus nimmt. Demnach bräuchtest du kein Remove mehr.

Sieh dir an wie viele Zeile vor und nach dem Add in der Ausgangstabelle sind. Wenns eine weniger ist ohne dass du die gelöscht hast, ist es tatsächlich so. Dann lass das Remove einfach weg.

2.298 Beiträge seit 2010
vor 10 Jahren

Hallo chilic,
er nimmt ja nicht die Row aus der Tabelle sondern erstellt eine neue mit den Daten der gewählten Zeile. Deshalb bekommt er die Meldung, das die Zeile nicht enthalten ist.

Hallo mrennen,
für dein vorgehen brauchst du garkeine neue Zeile, sondern kannst direkt mit der aus der Tabelle arbeiten.

Hol dir die gewählte Zeile aus der DataTable, speichere diese in einer lokalen Variable und entferne sie anschließend aus der Quelltabelle. - Dannach fügst du sie der Zieltabelle hinzu.

Edit: Alternativ um deinen Code beizubehalten, entferne "dr" und nicht "row" aus der Quelltabelle.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

C
2.122 Beiträge seit 2010
vor 10 Jahren

Ups stimmt, tut mir leid. Da hab ich zu schnell gedacht 😃