ListView: problême pour sauvegarder [Résolu]

cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 15:52 - Dernière réponse :  gregwillm
- 24 juil. 2007 à 21:38
Salut, j'ai un problême avec le code ci-dessous:

        Dim Dates As String
        Dim i As Integer
        For i = 0 To ListView1.Items.Count + 10
            Dates = Dates & ListView1.Items(i).SubItems(0).Text & "|" & ListView1.Items(i).SubItems(1).Text & "|" & ListView1.Items(i).SubItems(2).Text & "|" & ListView1.Items(i).SubItems(3).Text & "|" & ListView1.Items(i).SubItems(4).Text & "|" & ListView1.Items(i).SubItems(5).Text & "|" & ListView1.Items(i).SubItems(6).Text & "|" & ListView1.Items(i).SubItems(7).Text & "|" & ListView1.Items(i).SubItems(8).Text & "|" & ListView1.Items(i).SubItems(9).Text & vbCrLf
        Next i
        FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)
        FilePut(1, Dates)
        FileClose(1)

Ce que j'ai mis en rouge, c'est ou j'ai le bugs, j'explique:
Je veux sauvegarder le contenu d'un ListView qui a 10 colonnes. Arrivé à la ligne en rouge, il me dit "InvalidArgument=La valeur '1' n'est pas valide pour 'index'"
Je voix pas trop ou est le bug dans cette ligne.

Merci d'avance

Bye

ebaudoux@club.fr

Afficher la suite 

Votre réponse

28 réponses

Meilleure réponse
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 22:20
3
Merci
Par exemple :

-------------------------------------------------------------------------------------
| colonne 1        | colonne 2          | colonne 3            | colonne 4         | colonne 5     |
-------------------------------------------------------------------------------------
| xxxxxxxxx       |   xxxxxxxxx       |  xxxxxxxxxx        |                         |                     | colonne 4 et 5 vont générer une erreur car elles sont vides
-------------------------------------------------------------------------------------
| yyyyyyyyyyyy  |  yyyyyyyy         |  yyyyyyyyyyy       |   yyyyyyyyy      |  yyyyyyyyyy |
-------------------------------------------------------------------------------------

Est ce que tu as une listview de ce genre là ?

Merci cs_fauve 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_fauve
Meilleure réponse
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 22:26
3
Merci
En faite ca vient du fait que les colonnes vides provoquent des erreurs avec le code que je t'ai proposé l'astuce serait que tu mettes un espace dans chaque colonne vide. Comme ca, on croit toujours qu'elles sont vides mais en réalité, non et mon code ne t'embêteras plus car elles auront un caractère

Tiens moi au courant @+

Merci cs_fauve 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_fauve
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 28 mars 2007 à 16:13
0
Merci
Salut,



SubItems(0)
et ainsi dessuite




A+
Exploreur


 
Commenter la réponse de cs_Exploreur
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 16:23
0
Merci
Salut, merci, il ne dit plus qu'il y a des bugs mais aintenant, dans le fichier ou c'est enregistré, il ne me met que le contenu de la première colonne. C'est surment du fait qu'il ne fait qu'écrire le item 0, mais sinon, sa fait des bugs... pffffffff

Merci d'avance

Bye

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 28 mars 2007 à 16:29
0
Merci
Salut,


Il ne faut pas que faire une boucle sur tes items, mais aussi sur les subitems...

A+
Exploreur


 
Commenter la réponse de cs_Exploreur
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 16:33
0
Merci
Tu veux dire que dans le for_next, pour l'item, mettre un for_next pour prendre le texte de chaque colonne?
Dit moi si c'est sa ou pas, pendant ce temps, je vais essayer sa.

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 28 mars 2007 à 16:35
0
Merci
Salut,


Voici un petit exemple pour une listview à 12 colonnes:
' on parcoure toutes les lignes
 For I = 1 To ListView1.ListItems.Count
     ' On parcoure les colonnes (on sait qu'il y en a douze (moins la première)
      For J = 1 To 11
       ' Verife
        Msgbox ListView1.ListItems(I).SubItems(J)
    Next J
 Next I


A+
Exploreur


 
Commenter la réponse de cs_Exploreur
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 17:02
0
Merci
Euh, toujours le même bugs:

        Dim dates As String
        Dim i As Integer
        Dim J As Integer
        ' on parcoure toutes les lignes
        For i = 0 To ListView1.Items.Count
            ' On parcoure les colonnes (on sait qu'il y en a douze (moins la première)
            For J = 0 To 9
                ' Verife
                Dates = ListView1.Items(i).SubItems(J).Text & "|"
            Next J
        Next i
        FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)
        FilePut(1, Dates)
        FileClose(1)

Dans le premier FOR, le ListItems, sa existait pas et à par se, toujours le même bugs

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 28 mars 2007 à 17:03
0
Merci
Salut,


J'ai un doute concernant le saut de ligne, mais essaye cela :


Dim Dates As String
Dim i As Integer
Dim j As interger


' Chemin fichier et ouverture
 FileOpen(1, path & "" & nom & "" & "\Gestion\sto.gcc", OpenMode.Binary)


' on parcoure donc toutes les lignes
For i = 0 To ListView1.Items.Count 

  ' On met dans Dates l'item de la première colonne
   Dates = ListView1.ListItems(i).text & vbTab ' ici un espace

  ' on parcoure toutes les colonnes
   For j = 1 to 9
      ' On rempli ta variable
        Dates = Dates & ListView1.ListItems(i).SubItems(J) & vbTab 'ici un espace
   Next j
 
  ' on ecrit dans le fichier dés qu'une ligne est terminées
    FilePut(1, Dates) & VbNewLine ' Saut de ligne


Next i


  ' Une fois tout fini, ferme fichier
   FileClose(1)


A+
Exploreur


 
Commenter la réponse de cs_Exploreur
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 28 mars 2007 à 17:06
0
Merci
Salut,


Bien sûr à adapter en .net, excuse me...


A+
Exploreur


 
Commenter la réponse de cs_Exploreur
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 17:13
0
Merci
pfffffffffff, pareil. Et je répète que ListItmes n'est pas correcte. Euh, je ne l'ai pas encore dit, je suis en VB.net

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 17:14
0
Merci
Mrd, l'adapter en VB.net, y a pas de prob, mais bon, toujours le même bugs

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 20:59
0
Merci
Salut,

Essaies ceci pour enregistrer  (PS : Ajouter Imports System.IO avant Public Class Form1) :

Dim SaveFileDialog1 As SaveFileDialog
Dim reponse As DialogResult
Dim Save_Listview As String = ""

SaveFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\" ' Définit le répertoire de démarrage
SaveFileDialog1.FileName = ""   ' Permet de mettre une chaîne vide dans le nom du fichier (par défaut:SaveFileDialog)
SaveFileDialog1.Title = "Enregistrer une liste" ' Spéficie le titre de la boîte de dialogue SaveFileDialog1
SaveFileDialog1.Filter = "Fichiers dat|*.dat" ' Applique un filtre sur les fichiers présent dans le dossier
reponse = SaveFileDialog1.ShowDialog() ' Affiche SaveFileDialog1
If reponse = Windows.Forms.DialogResult.OK Then ' Test si l'utilisateur à cliqué sur Annuler
     Dim SW As New StreamWriter(SaveFileDialog1.FileName) ' Ouvre le fichier spécifié dans SaveFileDialog1
    
     For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
          For j = 0 ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
               Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
               ' Sauvegarde d'un item dans la ListView
          Next j
          SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
          Save_Listview = ""  ' Remplacement du contenu de Save_Listview par une chaîne vide
     Next i
     SW.Close()  ' Fermeture du fichier
End If
, ----

(Coloration syntaxique automatique par Kenji)

Pour charger ce qui a été enregistré :

Dim OpenFileDialog1 As OpenFileDialog
Dim reponse As DialogResult

OpenFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\"
' Définit le répertoire à afficher lors de l'affichage de OpenFileDialog1
OpenFileDialog1.FileName = ""   ' Effacement de la zone Nom du fichier (par défaut : il est écrit OpenFileDialog) 
OpenFileDialog1.Title = "Ouvrir une liste" ' Spécifie le nom de la boîte de dialogue OpenFileDialog1
OpenFileDialog1.Filter = "Fichiers dat|*.dat" ' Spécifie les fichiers qui seront autorisés à apparaître
reponse = OpenFileDialog1.ShowDialog()    ' Affiche OpenFileDialog
If reponse = Windows.Forms.DialogResult.OK Then   ' Détecte si l'utilisateur à cliqué sur Annuler 
     Dim str As New StreamReader(OpenFileDialog1.FileName) ' Ouverture du fichier spécifié par OpenFileDialog1
     str.ReadLine()
     Do Until str.Peek = -1 ' Permet la lecture du fichier jusqu'à la fin de celui-ci
          val = str.ReadLine.Split("|")   ' Permet de lire un champs délimité par | 
          lvItem = Browsers(TabControl1.SelectedIndex).Items.Add(val(0)) ' Ajout du premier SubItem d'un Item
          For i = 1 To val.Length - 1
               lvItem.SubItems.Add(val(i)) ' Ajout des autres SubItems du Item
          Next i
     Loop
     str.Close()     ' Fermeture du fichier
End If, ----
(Coloration syntaxique automatique par Kenji)
------------------------------------------------------------------------------------------------------
N'oublies pas d'accepter si ce message a réglé ton problème  
Commenter la réponse de cs_fauve
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 21:06
0
Merci
Salut,

Il y a une petite erreur dans le code pour charger la listview, voici la correction :

Dim OpenFileDialog1 As OpenFileDialog
Dim reponse As DialogResult

OpenFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\"
' Définit le répertoire à afficher lors de l'affichage de OpenFileDialog1
OpenFileDialog1.FileName = ""   ' Effacement de la zone Nom du fichier (par défaut : il est écrit OpenFileDialog) 
OpenFileDialog1.Title = "Ouvrir une liste" ' Spécifie le nom de la boîte de dialogue OpenFileDialog1
OpenFileDialog1.Filter = "Fichiers dat|*.dat" ' Spécifie les fichiers qui seront autorisés à apparaître
reponse = OpenFileDialog1.ShowDialog()    ' Affiche OpenFileDialog
If reponse = Windows.Forms.DialogResult.OK Then   ' Détecte si l'utilisateur à cliqué sur Annuler 
     Dim str As New StreamReader(OpenFileDialog1.FileName) ' Ouverture du fichier spécifié par OpenFileDialog1
     str.ReadLine()
     Do Until str.Peek = -1 ' Permet la lecture du fichier jusqu'à la fin de celui-ci
          val = str.ReadLine.Split("|")   ' Permet de lire un champs délimité par | 
          lvItem = ListView1.Items.Add(val(0)) ' Ajout du premier SubItem d'un Item
          For i = 1 To val.Length - 1
               lvItem.SubItems.Add(val(i)) ' Ajout des autres SubItems du Item
          Next i
     Loop
     str.Close()     ' Fermeture du fichier
End If, ----
(Coloration syntaxique automatique par Kenji)

L'erreur venait que je gérais un TabControl avec des ListView ancrés dans chaque TabPage et j'ai donc du créer une collection de ListView

@+
------------------------------------------------------------------------------------------------------
N'oublies pas d'accepter si ce message a réglé ton problème  
Commenter la réponse de cs_fauve
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 21:30
0
Merci
Ouinnnnnnnnn, ton code est bon, mais comme depuis le début, toujour le même bug!!! Je vous redécris l'erreur:à la ligne "Save_Listview Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"", il me dit le message suivant: InvelidArgument la valeur 1 n'est pas valide pour 'index'

Voila

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 22:14
0
Merci
Salut,

Est ce que dans ta listview tu as des lignes où les colonnes sont vides ?
Commenter la réponse de cs_fauve
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 22:20
0
Merci
oui, pourquoi?

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_veler 724 Messages postés dimanche 26 novembre 2006Date d'inscription 23 janvier 2013 Dernière intervention - 28 mars 2007 à 22:27
0
Merci
Parfait, sa fonctionne à présent. Euh, j'imagine que si la colonne est vide, lorsque je vais sauvegarder le listview, mettre un espace en guise de texte peut éviter les bugs? Sinon, s'il y a un autre moyen...

ebaudoux@club.fr

Commenter la réponse de cs_veler
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 28 mars 2007 à 22:37
0
Merci
oui, j'ai trouvé un autre moyen, plus besoin d'ajouter un espace dans les colonnes vides mon code le prends en charge. En effet, j'ai rajouté la fonction Try ... Catch (elle permet de traiter une erreur qui pourrait se produire lors de l'execution du programme).

Ici, quand mon code accédé à une colonne vide il te rends comme exception : ArgumentOutOfRangeException

J'ai attrapé cette erreur avec le Catch et au lieu de tenter de sauvegarder le contenu de la colonne je rajoute directement un espace dans Save_Listview

Entre Try et Catch, on met le code qu'on veut surveiller
Catch permet de traiter une erreur si elle se produit(ici ArgumentOutOfRangeException) et permet de traiter nous même cette erreur

Voici le code :

Dim SaveFileDialog1 As New SaveFileDialog
Dim reponse As DialogResult
Dim Save_Listview As String = ""

SaveFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath + "\" ' Définit le répertoire de démarrage
SaveFileDialog1.FileName = ""   ' Permet de mettre une chaîne vide dans le nom du fichier (par défaut:SaveFileDialog)
SaveFileDialog1.Title = "Enregistrer une liste" ' Spéficie le titre de la boîte de dialogue SaveFileDialog1
SaveFileDialog1.Filter = "Fichiers dat|*.dat" ' Applique un filtre sur les fichiers présent dans le dossier
reponse = SaveFileDialog1.ShowDialog() ' Affiche SaveFileDialog1
If reponse = Windows.Forms.DialogResult.OK Then ' Test si l'utilisateur à cliqué sur Annuler
     Dim SW As New IO.StreamWriter(SaveFileDialog1.FileName) ' Ouvre le fichier spécifié dans SaveFileDialog1

     For i = 0 To ListView1.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
          For j = 0 To ListView1.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
               Try
                    Save_Listview = Save_Listview & ListView1.Items(i).SubItems(j).Text & "|"
                    ' Sauvegarde d'un item dans la ListView
               Catch ex As ArgumentOutOfRangeException
                    Save_Listview = Save_Listview & " |"
               End Try
           Next j
                SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
                Save_Listview = ""  ' Remplacement du contenu de Save_Listview par une chaîne vide
     Next i
     SW.Close()  ' Fermeture du fichier
End If, ----

(Coloration syntaxique automatique par Kenji)
Commenter la réponse de cs_fauve
troxsa 553 Messages postés jeudi 28 novembre 2002Date d'inscription 2 octobre 2016 Dernière intervention - 29 mars 2007 à 00:32
0
Merci
Bonjour

Il suffit de faire
ListView1.Items.Count - 1 dans ta bouble !

http://www.troxsa.info/
Le site qui ne parle qu'un seul langage, visual basic 2005
Commenter la réponse de troxsa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.