Problem de tri avec un dataGridView

Résolu
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008 - 18 sept. 2008 à 18:33
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008 - 18 sept. 2008 à 23:57
Bonjour

J'utilise un datagridview (dtgrd_drop) que je rempli a la main.
J'ai entre autre une colonne formatée en pourcentage (appelée dropRatePercent), et une autre invisible (appelée dropRate) avec les meme valeurs sans format.

Je voudrais, lorsque l'on clique sur la colonne dropRatePercent,  trier selon les valeurs de la colonne dropRate.

J'ai ecrit le code suivant:

01      Private

Sub dtgrd_drop_SortCompare(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DataGridViewSortCompareEventArgs)
Handles dtgrd_drop.SortCompare
02

03         If (e.Column.Name =
"dropRatePercent")
Then
04            e.Handled =
True
05            If (dtgrd_drop.SortOrder = SortOrder.Ascending)
Then
06               dtgrd_drop.Sort(dtgrd_drop.Columns(
"dropRate"), System.ComponentModel.ListSortDirection.Descending)

07            Else
08               dtgrd_drop.Sort(dtgrd_drop.Columns(
"dropRate"), System.ComponentModel.ListSortDirection.Ascending)

09            End
If
10         End
If
11      End
Sub

Mais rien ne se passe (dans le sens du texte), la colonne ne bouge pas.

Par contre si l'on met en commentaire la ligne 08, mon datagrid est alors trié comme prevu.

une idée ?

2 réponses

cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
18 sept. 2008 à 18:44
Bonsoir,

Ne faudrait-il pas utiliser l'événément ColumnClick au lieu de SortCompare?

thierry la fronde
3
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008
18 sept. 2008 à 23:57
Merci, tu m'a apporté une partie de la réponse, en effet, je n'utilisait pas le bon évennement.
Je pense que tu voulais parler de ColumnHeaderMouseClick, parce que ColumnClick, j'ai pas trouvé.


Je me suis appercu que dtgrd_drop.SortOrder retombais toujours a la valeur Sortorder.Ascending lors de l'appel de mon évennement, je pense que cela est du au fait que je trie une colonne invisible.
Qu'a cela ne tienne, passons par une variable global, initialisée a Sortorder.None.

Voici donc mon code revu et corrigé:

Dim dropSortDirection AsSortOrder = SortOrder.None




Private





Sub

dtgrd_drop_ColumnHeaderMouseClick(


ByVal

sender


As





Object

,


ByVal

e


As

System.Windows.Forms.DataGridViewCellMouseEventArgs)


Handles

dtgrd_drop.ColumnHeaderMouseClick



   Dim

sortColumn


As

DataGridViewColumn



   Dim

displayColumn


As

DataGridViewColumn



   If

(dtgrd_drop.Columns(e.ColumnIndex).Name =


"dropRatePercent"

)


Then


      sortColumn = dtgrd_drop.Columns(


"DropRate"

)
      displayColumn = dtgrd_drop.Columns(


"DropRatePercent"

)



   Else


      sortColumn =


Nothing


      displayColumn =


Nothing



   End





If



   If

sortColumn


IsNot





Nothing





Then



      Select





Case

dropSortDirection



         Case

SortOrder.Ascending
            dtgrd_drop.Sort(sortColumn, System.ComponentModel.ListSortDirection.Descending)
            displayColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
            dropSortDirection = SortOrder.Descending



         Case

SortOrder.Descending
            dtgrd_drop.Sort(sortColumn, System.ComponentModel.ListSortDirection.Ascending)
            displayColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
            dropSortDirection = SortOrder.Ascending



         Case

SortOrder.None
            dtgrd_drop.Sort(sortColumn, System.ComponentModel.ListSortDirection.Ascending)
            displayColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
            dropSortDirection = SortOrder.Ascending



      End





Select



   End





If



End





Sub
0
Rejoignez-nous