DataGridView Sortierung / Zeilen verschieben

30/06/2009 - 15:23 von Alexander Mueller | Report spam
Hallo

ich habe einen DataGridView, dem ich zur Laufzeit
einen DataTable als DataSource zuweise.

Nun möchte ich dem Anwender die Möglichkeiten geben,
Zeilen zu verschieben, rauf oder runter.
Dazu gibt es zwei Buttons mit entsprechenden Marlett-Symbolen
(t und u btw).

Die Position der Zeile wird in einem Feld des
DataTables gespeichert ("SortFlag").
Nach diesem ist der Table ursprünglich auch sortiert -
auf SQL-Ebene, "... Order By SortFlag".

Das Feld SortFlag wird im Grid aber nicht
als Spalte angezeigt.

Meine Frage ist nun, wie kann ich die
Zeilen im Grid verschieben?

Remove und Insert geht bei Datenbindung NICHT!

Meine Idee war, die SortFlags zweier Zeilen zu tauschen
dann den DefaultView des DataTables zu nach dem SortFlag
zu sortieren udn die Datnequelel neu zu binden.
Das macht aber rein gar nix:


DataRow rowThis = dataTable.Rows[index];
DataRow rowNext = dataTable.Rows[index + 1];


int sfThis = rowThis["SortFlag"];
int sfNext = rowNext["SortFlag"];
//SWAP
rowNext["SortFlag"] = -1000;
rowThis["SortFlag"] = sfNext;
rowNext["SortFlag"] = sfThis;

dataTable.DefaultView.Sort = "SortFlag"; // bewirkt nichts
DataGridView.DataSource = dataTable; // bewirkt auch nichts


MfG,
Alex
 

Lesen sie die antworten

#1 Peter Fleischer
07/07/2009 - 19:33 | Warnen spam
"Alexander Mueller" schrieb im Newsbeitrag
news:4a4a11e0$0$31345$

ich habe einen DataGridView, dem ich zur Laufzeit
einen DataTable als DataSource zuweise.S



Hi Alexander,
besser ist es, ein Objekt als Datenquelle zu nutzen, welches eine Sicht
bereitstellt, am besten ein BindingSource-Objekt.

Nun möchte ich dem Anwender die Möglichkeiten geben,
Zeilen zu verschieben, rauf oder runter.
Dazu gibt es zwei Buttons mit entsprechenden Marlett-Symbolen
(t und u btw).

Die Position der Zeile wird in einem Feld des
DataTables gespeichert ("SortFlag").
Nach diesem ist der Table ursprünglich auch sortiert -
auf SQL-Ebene, "... Order By SortFlag".

Das Feld SortFlag wird im Grid aber nicht
als Spalte angezeigt.

Meine Frage ist nun, wie kann ich die
Zeilen im Grid verschieben?

Remove und Insert geht bei Datenbindung NICHT!

Meine Idee war, die SortFlags zweier Zeilen zu tauschen
dann den DefaultView des DataTables zu nach dem SortFlag
zu sortieren udn die Datnequelel neu zu binden.



Neu binden braucht man nicht, wenn die Datenquelle die Änderungen selbst
meldet, was ein DataView mit Quelle "DataTable" macht.

Das macht aber rein gar nix:

DataRow rowThis = dataTable.Rows[index];
DataRow rowNext = dataTable.Rows[index + 1];

int sfThis = rowThis["SortFlag"];
int sfNext = rowNext["SortFlag"];
//SWAP
rowNext["SortFlag"] = -1000;



Die letzte Anweisung kannst du dir sparen.

rowThis["SortFlag"] = sfNext;
rowNext["SortFlag"] = sfThis;

dataTable.DefaultView.Sort = "SortFlag"; // bewirkt nichts
DataGridView.DataSource = dataTable; // bewirkt auch nichts



Prüfe mal die SortFlag-Spalte. Vermutlich ist in deiner Logik ein Fehler.

Viele Grüsse
Peter

Ähnliche fragen