Was ist die richtige Methode, um DataGridView anzuweisen, die Sortierung zu stoppen?
Ich habe einen "Bildschirm", auf dem ich das Gitter programmatisch nach Spalte 4 und aufsteigend sortiere. Wenn ich zu einem anderen Bereich wechsle, möchte ich, dass das gleiche Raster "Standard" / keine Sortierung erhält. Ich entferne alle Spalten und füge neue hinzu. Die Sortierung bleibt in der 4. Spalte.
Ich sehe keine Möglichkeit, dies mit der Sort () -Methode zu tun. Irgendwelche Ideen?
Von MSN-Foren :
Das DataGridView ist an eine DataView und nicht direkt an die Tabelle gebunden, daher müssen Sie Folgendes festlegen:
DataTable.DefaultView.Sort = String.Empty
Effektives Löschen der Sortierung auf dem Tisch und damit des Gitters, das daran gebunden ist. Dies erfordert eine Aktualisierung der DataGridView, es sei denn, Sie verwenden 2005, und dann können Sie einen separaten Bindungsmanager verwenden.
Keine direkte Antwort, aber es gibt natürlich keine gute Definition für "unsortiert". Können Sie nicht nach einer (versteckten) Spalte wie eine ID sortieren?
in der gleichen Domäne wie die Antwort von user2268720 .. nicht die sauberste Lösung, aber hat die Arbeit für mich mit einem ungebundenen DGV:
%Vor%Versuchen Sie, die Itemsource des Rasters auf Nothing zu setzen und setzen Sie sie dann wieder auf die DefaultView der Tabelle zurück
Ich hatte dieses Problem auch heute. Ich habe eine DataGridView
, die ihre DataSource
(a DataTable
) regelmäßig austauscht. Ich konnte schließlich die Sortierung entfernen, die der Benutzer angegeben hat, als der Benutzer mit dem folgenden Code auf eine Spaltenüberschrift geklickt hat:
Dies funktioniert, weil ich eine versteckte Spalte in meinem DataGridView
habe, die immer in der Spaltenindexposition 0 ist. Es ist ein Integer-Primärschlüssel für die zugrunde liegenden Daten, die zufällig nach Datenlast sortiert werden.
* Möglicherweise müssen Sie Ihre Indexspalte in DataTable
benennen, wenn Sie dies nicht bereits getan haben (z. B. dt_Sender.Columns(0).ColumnName = "colIndex"
).
* Wenn du ein BindingSource
-Objekt als Vermittler zwischen deinem DataGridView
und deinem DataTable
verwendest (so viele Leute scheinen es zu tun), dann musst du dein DirectCast
in der zweiten Zeile entsprechend verschachteln (Das heißt, Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
würde sich ändern in: Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)
).
* Wenn Ihre DataTable
zufällig von einer SQL Server-Abfrage gefüllt wird, die keinen Integer-Primärschlüssel (möglicherweise eine GUID?) enthält, können Sie die Quellabfrage ändern, um eine neue Zeilennummer zu enthalten Verberge dann die neue Spalte in deinem DataGridView
. Zum Beispiel:
Hoffentlich ist diese Lösung für jemand anderen in der Zukunft hilfreich.
Tags und Links .net winforms grid datagridview gridview-sorting