Laden...

DataRow zwischenspeichern, aber wie?

Erstellt von snoopy90 vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.143 Views
snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 15 Jahren
DataRow zwischenspeichern, aber wie?

verwendetes Datenbanksystem: SQL Server 2005

Ich habe folgenden Code, der einfach nicht so funktioniert, wie ich es gerne hätte. Dabei geht es darum, die Reihenfolge in einem DataSet zu verändern. Diese ist in der Spalte "sortOrder" festgehalten.


      //Wert speichern
      int aktuell = this.ctrlGridEX.SelectedItems[0].Position;

      //Alte row speichern
      DataRow row_old;
      row_old = dataSet_Script.Script.Rows[aktuell - 1];

      //Alte Row löschen
      dataSet_Script.Script.Rows[aktuell - 1].Delete();

      //gewählte Row ändern
      dataSet_Script.Script.Rows[aktuell]["sortOrder"] = aktuell - 1;

      //Alte Row wieder hinzufügen
      row_old["sortOrder"] = aktuell;
      dataSet_Script.Script.AddScriptRow((ScriptManager.DataSet_Script.ScriptRow)row_old);

      //Zurück auf die DB speichern
      scriptTableAdapter.Update(dataSet_Script);

Es heisst dann immer, dass nicht auf gelöschte Zeileninformationen zugegriffen werden kann. Wie kann ich also eine losgelöste DataRow zwischenspeichern und diese am Schluss wieder hinzufügen?

www.mkellenberger.ch Was ich täglich (neu) entdecke...

J
3.331 Beiträge seit 2006
vor 15 Jahren

Benutze nicht Delete, sondern **Remove **bzw. RemoveAt. Wenn Du in :rtfm: nachliest, solltest Du den gravierenden Unterschied erkennen.

Jürgen

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 15 Jahren

Beide Funktionen haben das gleiche Problem.
Ich will doch nur, dass mein ItemArray auf der DataRow nicht mitgelöscht wird. Kann ich die nicht irgendwie "abkapseln..."?

www.mkellenberger.ch Was ich täglich (neu) entdecke...

J
3.331 Beiträge seit 2006
vor 15 Jahren

Tut mir leid, ich verstehe Dein Anliegen überhaupt nicht. Eine Datenmenge ist grundsätzlich unsortiert; das gilt sowohl für eine Tabelle in einer Datenbank als auch für jede DataTable. Lediglich für die Anzeige oder durch eine besondere Maßnahme (z.B. DataView) kann eine Sortierung erreicht und genutzt werden. Was Deine "losgelöste" DataRow damit zu tun haben soll, bleibt mir schleierhaft.

Jürgen

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 15 Jahren

Mhh...oke...ich versuchs nochmal 😉
Ich möchte eigentlich ganz einfach die Row zwischenspeichern


//Alte row speichern
      DataRow row_old;
      row_old = dataSet_Script.Script.Rows[aktuell - 1];

Sie löschen und nachher wieder hinzufügen
edit: Natürlich will ich sie nur aus dem DataSet löschen!


      //Alte Row wieder hinzufügen
      row_old["sortOrder"] = aktuell;
      dataSet_Script.Script.AddScriptRow((ScriptManager.DataSet_Script.ScriptRow)row_old);

Jedoch scheinen die Daten beim löschen auch in der row_old entfernt worden zu sein. Ich brauche diese jedoch noch!

www.mkellenberger.ch Was ich täglich (neu) entdecke...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 15 Jahren

PUSH!!!

Konnte mein Problem noch nicht lösen. Weiss denn von euch keiner, wie das möglich wäre?

www.mkellenberger.ch Was ich täglich (neu) entdecke...

84 Beiträge seit 2007
vor 15 Jahren

In welchem Szenario soll es Sinn machen, die interne Reihhenfolge der Zeilen zu ändern?
Idr. legst du diese erst bei der Anzeige zur Laufzeit fest.

Dein Code kann nicht funktionieren, weil "OldRow" ledeglich eine Objektreferenz (Verweis) auf eine Zeile darstellt. Wenn du diese Zeile anschließen löschst, dann geht auch der Verweis ins Leere ("Auf die gelöschten Zeilen... kann nicht zugegriffen werden" etc.)
Wenn du bei deinem Vorgehen mit dem Sortierenbleiben willst, probier es über die Eigenschaft ItemArray der Zeile, und speicher deren Werte irgenmdwo temporär zwischen.

Gruß,
Razer

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 15 Jahren

Ach...war wohl zu dumm oder zu blöde. hab jetzt einfach den Wert der Spalte, welche die Reihenfolge bestimmt geändert 😉 Habs also gelöst. Vielen Dank aber für die kreative Anregung!

www.mkellenberger.ch Was ich täglich (neu) entdecke...