Utilisation du contrôle "ListView"
Table des matières
1) Introduction
2) Préparation
3) Remplir sa ListView
4) Trier les colonnes en cliquant sur leurs intitulés
5) Colorier une cellule
6) Divers...
1) Introduction
Le contrôle ListView permet d'afficher des informations sous différentes présentations. Les données visualisées peuvent être issues de sources très diverses: La saisie d'un formulaire, le contenu de fichiers, le résultat de requêtes SQL...
Cinq modes d'affichage sont disponibles:
- LargeIcon
- SmallIcon
- List
- Détails
- Title
Une fois stockées dans la ListView, les données sont facilement manipulables. Il est possible de changer le mode d'affichage, trier les colonnes, supprimer ou ajouter des lignes, appliquer une mise en forme, réexporter le contenu de la ListView... Des images et icônes peuvent être associées aux items d'une ListView.
Les chapitres suivants présentent principalement des exemples en mode "Détails".
2) Préparation
Nous allons commencer par déclaré notre listview en mode "Détails" :
Me.ListView1.View = View.Details
Maintenant on peut y ajouter nos colonnes :
With Me.ListView1
.Columns.Add("Id", 200, HorizontalAlignment.Right)
.Columns.Add("Nom", 200, HorizontalAlignment.Right)
.Columns.Add("Niveau", 100, HorizontalAlignment.Right)
End With
On peut aussi les ajouter en une fois avec AddRange.
Dim Columns() As ColumnHeader = {MyColumn1, MyColumn2, MyColumn3}
ListView1.Columns.AddRange(Columns)
3) Remplir sa ListView
A présent on va remplir les 3 colonnes préalablement ajouter via le menu ou déclarer dans le code :
Dim MyLine As ListViewItem = New ListViewItem(New String() {"19854", "Jilakin", "199"})
ListView1.Items.Add(MyLine)
On pourrait même ajouter une image sur la ligne : (On donne en argument l'index dans l'ImageList associer au ListView.)
Dim MyLine As ListViewItem = New ListViewItem(New String() {"19854", "Jilakin", "199"}, 1)
ListView1.Items.Add(MyLine)
4) Trier les colonnes en cliquant sur leurs intitulés
L'objet ListView dispose d'une propriété ListViewItemSorter de type IComparer. Cela permet d'implémenter sa propre gestion du tri.
Pour ce faire, il faut créer une classe dérivant de IComparer implémentant la méthode Compare.
Class ListViewItemComparer
Implements IComparer
Private col As Integer
Private sortOrder As SortOrder
Public Sub New()
col = 0
sortOrder = Windows.Forms.SortOrder.Ascending
End Sub
Public Sub New(ByVal column As Integer)
col = column
sortOrder = Windows.Forms.SortOrder.Ascending
End Sub
Public Sub New(ByVal column As Integer, ByVal s As SortOrder)
col = column
sortOrder = s
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
If sortOrder = Windows.Forms.SortOrder.Ascending Then
Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
Else
Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
End If
End Function
End Class
Ensuite, il suffit d'intercepter le click sur les colonnes (événement ColumnClick) et d'instancier cette classe.
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
If Me.ListView1.Sorting = SortOrder.Ascending Then
Me.ListView1.Sorting = SortOrder.Descending
Else
Me.ListView1.Sorting = SortOrder.Ascending
End If
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView1.Sorting)
End Sub
5) Colorier une cellule
L'objet ListViewSubItem a une propriété BackColor mais pour que l'assignation soit effective il ne faut pas oublier de modifier la propriété UseItemStyleForSubItems du ou des ListViewItem concerné(s) en lui attribuant la valeur False.
Si vous souhaitez effectuer cette manoeuvre par programmation, voici un exemple: (Coloration en jaune de toute la première colonne d'un ListView1)
Imports System
Imports System.Drawing
Imports System.Windows.Forms
' ...
Dim lvi As ListViewItem
For Each lvi In Me.ListView1.Items
lvi.UseItemStyleForSubItems = False
lvi.SubItems(0).BackColor = Color.Yellow
Next
6) Divers...
Récupérer le texte de la ligne sélectionnée :
ListView1.SelectedItems(0)
Effacer la ligne sélectionnée de l'Indice :
ListView1.Items.RemoveAt (ListView1.SelectedIndices(0))
Effacer la ligne sélectionnée de l'Item :
ListView1.Items.Remove (ListView1.SelectedItems(0))
Voir des lignes matérialisant les cases :
Mettre la propriété GridLine à True.
Ce poste peut se voir être modifié à n'importe quel moment, veuillez revenir ici régulièrement.
Cordialement,
Jilakin