. NET / WinForms - Löschen Sie eine Sortierung für eine DataGridView

8

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?

    
BuddyJoe 09.09.2009, 20:21
quelle

7 Antworten

6

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.

    
Joshua Drake 10.09.2009 19:01
quelle
6

Ich habe direkt auf die Sortierung der BindingSource zugegriffen:

((BindingSource)_dgv.DataSource).Sort = string.Empty;

    
Ken 24.09.2009 19:25
quelle
1

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?

    
Henk Holterman 09.09.2009 21:27
quelle
1

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%     
Damian Vogel 27.01.2014 15:08
quelle
0

Versuchen Sie, die Itemsource des Rasters auf Nothing zu setzen und setzen Sie sie dann wieder auf die DefaultView der Tabelle zurück

    
user2459914 15.08.2013 00:33
quelle
0

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:

%Vor%

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:

%Vor%

Hoffentlich ist diese Lösung für jemand anderen in der Zukunft hilfreich.

    
Sturgus 10.05.2016 14:45
quelle
-1
%Vor%     
user2268720 11.04.2013 03:55
quelle