10
votes

.NET / WINFORMS - Effacer une sorte sur un DataGridView

Quelle est la méthode appropriée pour indiquer à A DataGridView d'arrêter de tri?

J'ai un "écran" où je dis à la grille de trier par colonne 4 et ascendante. Lorsque je passe à une autre zone, je veux que la même grille soit à venir en «par défaut» / sans trier. Je retire toutes les colonnes et en ajoutant de nouveaux. Le tri reste sur la 4ème colonne.

Je ne vois pas un moyen de faire cela avec la méthode de tri (). Des idées?


4 commentaires

Oui. Mais je passe même des données de données. J'appelle DataSource = null et colonnes.Clear avant le commutateur.


J'aimerais pouvoir autoriser une actualisation mais enregistrer l'ordre de tri. Mais si l'utilisateur change ce qu'ils veulent regarder (via une TreeView), alors j'aimerais que l'ordre de tri disparaisse. Est-ce un bug? J'ai essayé quelques choses, je ne peux pas comprendre un moyen de le faire partir.


Frustrant que l'Enum ListSorteDirection n'a pas de valeur .none, mais le sort fait. Vous utilisez SortOrder pour obtenir la valeur à partir du DataGridView, mais vous utilisez ListSorteDirection pour la définir.


Les sources de données de commutation jette ma théorie. Espérons que les informations supplémentaires vous obtiennent des hits.


7 Réponses :


1
votes

Pas une réponse directe, mais il n'y a bien sûr aucune bonne définition pour 'Non acheminé ". Vous ne pouvez pas trier sur une colonne (cachée), comme un identifiant?


2 commentaires

bonne idée. J'ai une fausse colonne que j'ajouterai au jeu de données après la chargement de DataDapter, appelé "Row_Number" Tout ce qu'il est utilisé pour la pagination (si je choisis de le tourner sur). +1. Cela pourrait être ma réponse.


Il existe des restrictions sur le tri sur des colonnes «fausses» associées à une source de données, voir MSDN.




8
votes

J'ai accédé directement au tri sur la liaison de la liaison:

((borningSource) _dgv.datasource) .sort = string.empty;


1 commentaires

Merci! Je viens d'utiliser des liaisonsource.sort = "" et ça a fonctionné très bien.



-1
votes
/// C#
/// Author : Jeudi Prando

foreach (DataGridViewColumn column in this.DataGridView1.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
    column.SortMode = DataGridViewColumnSortMode.Automatic;
}

0 commentaires

0
votes

Essayez de définir les éléments de la grille à rien, puis de la remettre à nouveau sur la table de la table


0 commentaires

1
votes

Dans le même domaine que la réponse de User2268720 .. Ce n'est pas la solution la plus propre, mais a fait du travail pour moi avec un DGV non lié:

            if (dgv.SortedColumn != null) {
                DataGridViewColumn col = dgv.SortedColumn;
                col.SortMode = DataGridViewColumnSortMode.NotSortable;
                col.SortMode = DataGridViewColumnSortMode.Automatic;
            }


0 commentaires

0
votes

J'ai eu ce problème aujourd'hui aussi. J'ai un datagridview code> qui échange son datasource code> (A datatable code>) régulièrement. J'ai finalement pu supprimer enfin le tri que l'utilisateur spécifié lorsque l'utilisateur a cliqué sur un en-tête de colonne à l'aide du code suivant: XXX PRE>

Cette fonction car j'ai une colonne cachée dans mon DataGridView Code> C'est toujours en position d'index de colonne 0. Il s'agit d'une clé primaire entière pour les données sous-jacentes qui se produisent sur la charge de données. P>

* Vous devrez peut-être nommer votre colonne d'index dans le fichier code> si vous ne l'avez pas déjà (par exemple, dt_sender.columns (0) .columnname = "colindex". code>). p>

* Si vous utilisez un objet code> Objet code> comme intermédiaire entre votre DataGridView code> et votre datatable code> (Autant de personnes semblent faire), alors vous devrez nier votre DirectCast code> de manière appropriée dans la deuxième ligne (c.-à-d. Date DT_Sender comme DataTable = DirectCast (DGV.DataSource, DataTable) changerait quelque chose comme: dim dt_sender comme DataTable = DirectCast (DirectCast (DGVCast (DGVCast (DGV.DaTaSource, liaison), DataTable) Code>). P>

* Si votre DataTable code> devrait être peuplé par une requête SQL Server qui n'a pas de clé primaire entière (peut-être un GUID?), Vous pourriez alors modifier sa requête source pour inclure un nouveau numéro de ligne, puis masquer la nouvelle colonne Dans votre DataGridView code>. Er.g.:

SELECT Row_Number() OVER (ORDER BY (SELECT '')) AS RowNumber, Column1, Column2, Column3
FROM SourceTable


0 commentaires