Problème avec une Listeview

Signaler
Messages postés
17
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
7 avril 2008
-
Messages postés
17
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
7 avril 2008
-
Bonjour à tous,

J'ai un message d'erreur que je ne comprend pas :

L'argument spécifié n'était pas dans les limites de la plage des valeurs valides. Nom du paramètre : index

Sur les tables ID et REALISATEUR, cela marche. Original = Oui/Non dans la base access.

 While Not (recordset.EOF)

                If strTable = "T_DVD" Then

                    Dim LV_item As New System.Windows.Forms.ListViewItem ' Pour affichage du résultat

                    strSQL = "SELECT * FROM " & strTable & " ORDER BY ID "

                    'Remplissage de la Liste View
                    LV_item = LV_resultat.Items.Add(CStr(recordset.Fields("ID").Value))

                    LV_item.SubItems.Insert(1, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, CStr(recordset.Fields("TITRE").Value)))

                    If Not IsDBNull(recordset.Fields("REALISATEUR").Value) Then
                        LV_item.SubItems.Insert(2, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, CStr(recordset.Fields("REALISATEUR").Value)))
                    End If

                    If Not IsDBNull(recordset.Fields("ORIGINAL").Value) Then
                        LV_item.SubItems.Insert(3, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, CStr(recordset.Fields("ORIGINAL").Value)))
                    End If

                    ' On passe à l'enregistrement suivant
                    recordset.MoveNext()

                Else : strTable = "T_DVD_JEUX"
                    'Remplissage de la Liste View
                   
                    ' On passe à l'enregistrement suivant
                    recordset.MoveNext()

                End If
            End While

Peut-on mettre des cases à cocher sur toute une colonne non-modifiable pour ces valeurs booléennes ?

merci pour vos réponses

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Salut
Il a peut-être du mal à convertir un Booleen en String.
Essaye de passer par un CStr(CBool(x))
ou d'utiliser un If pour insérer le texte Oui ou Non selon que .Valeur = True ou False

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
17
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
7 avril 2008

Bonjour,

J'ai tjrs le message:
L'argument spécifié n'était pas dans les limites de la plage des valeurs valides. Nom du paramètre : index

avec Cstr(CBool(x))

et même message avec

                    If recordset.Fields("ORIGINAL").Value = 0 Then
                        LV_item.SubItems.Insert(3, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, "Non"))

                    ElseIf recordset.Fields("ORIGINAL").Value = -1 Then
                        LV_item.SubItems.Insert(3, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, "Oui"))

                    End If
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Re
Dans ta ListView, as-tu bien défini 4 colonnes (en mode Report) : La colonne principale + 3 SubItems ?
Parce que là, tu essayes d'écrire dans la 4ème colonne (avec l'index SubItem 3)
S'il te parle de problème d'index, ça me fait penser à ça
Est-ce que c'est sur la première donnée qu'il écrit que tu as cette erreur ou bien en plein milieu du traitement ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
17
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
7 avril 2008

Bonjour,

C'est en plien milieu du traitement. J'ai mis une ligne simple et il me dit la même chose :

La ligne simple :
LV_item.SubItems.Insert(3, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, "Non"))

Dans les propriétés view de la liste , j'ai smallicon,largeicon,tile,list et details. pas de report.

Quelle la bonne propriété ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Mode Report en VB6
C'est List ou Detail en VB.Net
Ca t'apprendra à poster ta question dans la mauvaise catégorie (catégorie passée de VB6 à .Net)
Tu viens de perdre un jour au lieu de prendre 30 secondes pour bien choisir la catégorie de la question.

Pour ton problème :
-1- je vois que la ligne où tu fais la même action avec le SubItem 2 ne semble pas poser de problème.
J'en déduit donc que c'est dans l'utilisation du SubItem 3 qu'il y a problème.
Au moment où l'erreur se produit, essaye d'afficher le nombre (Count) de SubItems de ta ListView et vérifie.
-2- Es-tu sûr que la méthode LV_item.SubItems.Insert soit la bonne ?
Sans avoir regardé dans l'aide, je verrais plutôt cette instruction comme une méthode d'ajout d'une colonne, pas comme une instruction de remplissage d'un SubItem existant.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
17
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
7 avril 2008

Bonjour,

Excusez-moi pour la mauvaise catégorie du sujet.

Je viens de trouver le problème. En fait j'ai des enregistrements ne comportant pas de réalisateur et c'est cela que VB perturbe.
J'ai donc fait un test sur le réalisateur. Et cela marche en utilisant insert.

Peut-on améliorer le code ?