Bonjour,
Voici ce que j'essaie de faire.
J'ai un datagridview dans un winform et je crée moi même les colonnes dans le code (entre autre parce que j'ai une colonne rempli par des datetimepicker lorsque la colonne est une date. Je rempli ensuite le datagridview avec un SQLDataReader qui parcours la table qui contient les informations que je veux afficher.
Jusque là tout fonctionne. Le problème c'est que je suis incapable de faire en sorte que l'utilisateur puisse trier le datagridview en cliquant sur le header d'une colonne.
Je configure le DataGridViewColumnSortMode de chaque colonne à programmaticly. J'ai implémenté la classe suivante trouver sur internet :
J'appelle le code suivant dans l'événement de clique sur l'entête d'une colonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 private class RowComparer : System.Collections.IComparer { private static int sortOrderModifier = 1; private static int colNumber=0; public RowComparer(SortOrder sortOrder,int col) { colNumber=col; if (sortOrder == SortOrder.Descending) { sortOrderModifier = -1; } else if (sortOrder == SortOrder.Ascending) { sortOrderModifier = 1; } } public int Compare(object x, object y) { DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x; DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y; // Try to sort based on the Last Name column. int CompareResult = System.String.Compare( DataGridViewRow1.Cells[colNumber].Value.ToString(), DataGridViewRow2.Cells[colNumber].Value.ToString()); return CompareResult * sortOrderModifier; } }
Le problème c'est que ça ne fonctionne pas... quand je clique sur l'entête de la colonne (en debuggant) je vois que le constructeur de RowComparer est appeller mais la methode Compare ne l'est jamais. Est-ce que quelqu'un pourrait me pointer mon erreur ou me suggérai une meilleur façon de procéder?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DataGridView1.Sort( new RowComparer( SortOrder.Ascending.e.ColumnIndex ) );
Merci
Partager