Bonjour
Je voudrais trier une Listview1 par ordre alphabétique de la 2eme colonne
comment m'y prendre.?
les tutos que j'ai trouvé expliquent à partir d'un click sur la colonne mais comment le faire par programmation sans click dessus?
Bonjour
Je voudrais trier une Listview1 par ordre alphabétique de la 2eme colonne
comment m'y prendre.?
les tutos que j'ai trouvé expliquent à partir d'un click sur la colonne mais comment le faire par programmation sans click dessus?
Quelle techno ? Windows Forms, WPF, Silverlight, ASP.NET ?
Je vais supposer qu'il s'agit de Windows Forms...
Il faut implémenter un comparateur (une classe qui implémente l'interface IComparer) pour comparer les ListViewItems. En voilà un réutilisable qui permet de spécifier la colonne selon laquelle trier :
Ca s'utilise comme ça :
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 Class ListViewItemComparer Implements IComparer Private ReadOnly _columnIndex As Integer Public Sub New(columnIndex As Integer) _columnIndex = columnIndex End Sub Public Function Compare(x As Object, y As Object) As Integer Dim itemX As ListViewItem = DirectCast(x, ListViewItem) Dim itemY As ListViewItem = DirectCast(y, ListViewItem) Dim subItemX As ListViewItem.ListViewSubItem = itemX.SubItems(_columnIndex) Dim subItemY As ListViewItem.ListViewSubItem = itemY.SubItems(_columnIndex) Dim textX As String = subItemX.Text Dim textY As String = subItemY.Text Return String.Compare(textX, textY, True) End Function End Class
Pour trier selon la colonne cliquée, tu peux gérer l'évènement ColumnClick :
Code : Sélectionner tout - Visualiser dans une fenêtre à part listView1.ListViewItemSorter = New ListViewItemComparer(1)
EDIT: après avoir écrit ça je réalise que c'est presque exactement l'exemple qui est dans la doc... j'aurais mieux fait de faire un copier/coller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub lv_ColumnClick(sender As Object, e As ColumnClickEventArgs) listView1.ListViewItemSorter = New ListViewItemComparer(e.Column) End Sub![]()
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
merci tomlev pour votre reponse ?
je suis sous vb.net express 2008
en fait j'avais plus ou moins trouvé un code equivalant
mais mon problème est pour l'adapter à une routine qui ne passe pas par un click sur la colonne
je veux trier à partir d'une sub qui tri la listview par la colonne 2
mon niveau débutant autodidacte ne me permet pas d'adapter le code
mais je progresse ( il est dur de reculer à ce stade)
un petit coup de pouce svp![]()
Bah c'est pas plus difficile, je t'ai déjà donné le code pour le faire :
(la 2e colonne est celle qui a l'index 1, puisque les index commencent à 0)
Code : Sélectionner tout - Visualiser dans une fenêtre à part listView1.ListViewItemSorter = New ListViewItemComparer(1)
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
re
il est vrai que j'avais zapé la bonne réponse
mais j'ai encore un petit problème
j'ai mis le code
en debut du code de ma Form1vb
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Class ListViewItemComparer Implements IComparer .... End Class
et j'ai une erreur sur:
Implements ICompareroù faut il donc placer le code de la class ListViewItemComparerClass'ListViewComparer'doit implémenter 'Function Compare(x As Object,y As Object)As Integer' pour l'interface'System.Collection.IComparer'.
( c'est la première fois que je dois rajouter une class à mon code !)
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Merci pour toutes ces infos
Je viens de trouver le problème
j'ai rajouté : Implements IComparer.Compare
et tout rentre dans l'ordre
Code : Sélectionner tout - Visualiser dans une fenêtre à part Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
encore merci pour ton aide![]()
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Partager