Bonjour
J'utilise une seule listview qui change de contenu en cliquant sur des boutons radio
J'ai trouvé sur le net une procédure pour trier la liste en cliquant sur les entêtes de colonnes
ça fonctionne mais si je trie ma liste et qu'ensuite je clique sur mes boutons radio pour en afficher un autre contenu, j'ai l'erreur suivante

InvalidArgument=La valeur '1' n'est pas valide pour 'index'.
Nom du paramètre : index


Si je fais un tri seulement avec la première colonne je n'ai pas d'erreur
Je vous joint le code de ce form .... si vous pouviez m'aider, merci

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
 
Public Class FilmsIncomplets
    Inherits System.Windows.Forms.Form
    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
    Public Function Init_ListBA()
        ListView.Items.Clear()
        ListView.Columns.Clear()
        Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _
                     "C:\Access\DvdData.mdb")
        Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
 
        Mycommand.CommandText = "SELECT RéfCollectionVidéo,TitreFilm,AnnéeSortie,PrésenceVidéo FROM Vidéo" & _
        " WHERE PrésenceVidéo = False ORDER BY TitreFilm"
 
        MyConnexion.Open()
 
        Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
        ListView.View = View.Details
        With ListView.Columns
            .Add("N°", 45, HorizontalAlignment.Left)
            .Add("Titre du film", 305, HorizontalAlignment.Left)
            .Add("Année", 45, HorizontalAlignment.Left)
        End With
 
 
        Do While myReader.Read()
            Dim _MyListViewItem As ListViewItem = ListView.Items.Add(Format(myReader.GetValue(0), "000"))
            With _MyListViewItem
                .SubItems.Add(myReader.GetValue(1).ToString)
                .SubItems.Add(myReader.GetValue(2).ToString)
            End With
        Loop
        myReader.Close()
        MyConnexion.Close()
        Return Nothing
    End Function
    Public Function Init_ListeMusique()
        ListView.Items.Clear()
        ListView.Columns.Clear()
        Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _
                     "C:\Access\DvdData.mdb")
        Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
 
        Mycommand.CommandText = "SELECT RéfCollectionVidéo,TitreFilm,Musique,PrésenceMusiqueFilm FROM Vidéo" & _
        " WHERE PrésenceMusiqueFilm = False ORDER BY TitreFilm"
 
        MyConnexion.Open()
 
        Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
        ListView.View = View.Details
        With ListView.Columns
            .Add("N°", 45, HorizontalAlignment.Left)
            .Add("Titre du film", 250, HorizontalAlignment.Left)
            .Add("Compositeur", 100, HorizontalAlignment.Left)
        End With
 
 
        Do While myReader.Read()
            Dim _MyListViewItem As ListViewItem = ListView.Items.Add(Format(myReader.GetValue(0), "000"))
            With _MyListViewItem
                .SubItems.Add(myReader.GetValue(1).ToString)
                .SubItems.Add(myReader.GetValue(2).ToString)
            End With
        Loop
 
        myReader.Close()
 
        MyConnexion.Close()
        Return Nothing
    End Function
    Private Sub FilmsIncomplets_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Init_ListBA()
    End Sub
 
    Private Sub RadioButtonBA_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButtonBA.CheckedChanged
        Init_ListBA()
    End Sub
 
    Private Sub RadioButtonMusique_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButtonMusique.CheckedChanged
        Init_ListeMusique()
    End Sub
    Private Sub ListView_ColumnClick(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView.ColumnClick
        If Me.ListView.Sorting = SortOrder.Ascending Then
            Me.ListView.Sorting = SortOrder.Descending
        Else
            Me.ListView.Sorting = SortOrder.Ascending
        End If
        Me.ListView.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView.Sorting)
    End Sub
End Class