.NET / WinForms - Claire d'un Tri sur un DataGridView
Quelle est la bonne méthode à dire d'un DataGridView pour arrêter le tri?
J'ai un "écran" où je raconte la grille par programme pour trier par colonne 4 et dans l'ordre croissant.
Lorsque je passe à un autre domaine je veux la même grille de venir en "par défaut" /pas de tri.
Je suis la suppression de toutes les colonnes, en ajouter de nouveaux. Le tri reste sur la 4ème colonne.
Je ne vois pas le moyen de le faire avec la méthode sort (). Des idées?
Est-ce lié aux données de la grille?
Oui. Mais je suis encore la commutation de Sources de données. Je vais appeler DataSource = null et les Colonnes.Claire avant de l'interrupteur.
J'aimerais être en mesure de permettre une actualisation mais de sauver l'ordre de tri. Mais si l'utilisateur passe en ce qu'ils veulent à regarder (par l'intermédiaire d'un TreeView) alors j'aimerais que l'ordre de tri de s'en aller. Est-ce un bug? J'ai essayé quelques choses, je ne peux pas trouver un moyen de la faire disparaître.
Frustrant que l'enum ListSortDirection n'a pas .Aucune valeur, mais l'ordre de tri. Vous utilisez l'ordre de tri pour obtenir la valeur de la DataGridView mais vous utilisez ListSortDirection.
La commutation des sources de données jette ma théorie. Nous espérons que les informations supplémentaires vous obtient quelques succès.
Oui. Mais je suis encore la commutation de Sources de données. Je vais appeler DataSource = null et les Colonnes.Claire avant de l'interrupteur.
J'aimerais être en mesure de permettre une actualisation mais de sauver l'ordre de tri. Mais si l'utilisateur passe en ce qu'ils veulent à regarder (par l'intermédiaire d'un TreeView) alors j'aimerais que l'ordre de tri de s'en aller. Est-ce un bug? J'ai essayé quelques choses, je ne peux pas trouver un moyen de la faire disparaître.
Frustrant que l'enum ListSortDirection n'a pas .Aucune valeur, mais l'ordre de tri. Vous utilisez l'ordre de tri pour obtenir la valeur de la DataGridView mais vous utilisez ListSortDirection.
La commutation des sources de données jette ma théorie. Nous espérons que les informations supplémentaires vous obtient quelques succès.
OriginalL'auteur BuddyJoe | 2009-09-09
Vous devez vous connecter pour publier un commentaire.
J'ai consulté le tri sur le BindingSource directement:
((BindingSource)_dgv.DataSource).Sort = string.Empty;
Merci! J'ai juste utilisé BindingSource.Tri = "" et il a très bien fonctionné.
OriginalL'auteur Ken
De MSN Forums:
Le DataGridView est lié à un DataView et pas sur la Table directement, de sorte que vous devez définir:
DataTable.DefaultView.Sort = String.Empty
Efficacement de compensation le tri sur la table et, partant, la grille qui est lié à elle. Cela semble exiger une Actualisation de la DataGridView, sauf si vous êtes à l'aide de 2005, puis vous pouvez utiliser un gestionnaire de liaison.
OriginalL'auteur Joshua Drake
Pas une réponse directe, mais il n'y a évidemment pas de bonne définition pour 'non triés'. Ne pouvez-vous pas de tri sur un (caché) de la colonne, comme une ID?
Il y a des restrictions sur le tri sur les "faux" colonnes en combinaison avec une source de données, voir MSDN.
OriginalL'auteur Henk Holterman
dans le même domaine que la réponse de user2268720.. pas la solution la plus propre, mais a fait le travail pour moi avec un indépendant DGV:
OriginalL'auteur Damian Vogel
Essayer de réglage de la grille de itemsource à Rien, puis le mettre de nouveau à la table DefaultView
OriginalL'auteur user2459914
J'ai eu ce problème aujourd'hui. J'ai un
DataGridView
que les swaps de sesDataSource
(unDataTable
) régulièrement. J'ai pu enfin supprimer le tri de ce que l'utilisateur a spécifié lorsque l'utilisateur clique sur un en-tête de colonne en utilisant le code suivant:Cette fonction parce que j'ai une colonne masquée dans mon
DataGridView
c'est toujours dans la colonne de l'index en position 0. Il est un entier de clé primaire pour les données sous-jacentes qui se trouve être triés sur le chargement de données.*Vous avez peut-être le nom de votre indice de colonne dans la
DataTable
si vous ne l'avez pas déjà (par exemple,dt_Sender.Columns(0).ColumnName = "colIndex"
).*Si vous utilisez un
BindingSource
objet comme un intermédiaire entre votreDataGridView
et votreDataTable
(comme beaucoup de gens semblent le faire), alors vous aurez à votre nidDirectCast
de façon appropriée, dans la deuxième ligne (c'est à dire,Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
allait changer pour quelque chose comme:Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)
).*En outre, si votre
DataTable
arrive à être peuplée par une requête SQL Server qui n'a pas un integer primary key (peut-être un GUID?), ensuite, vous pouvez modifier sa requête source d'inclure un nouveau numéro de ligne, puis masquer la nouvelle colonne dans votreDataGridView
. E. g.:Nous espérons que cette solution est utile à quelqu'un d'autre dans l'avenir.
OriginalL'auteur Sturgus
OriginalL'auteur user2268720