Aide sur listview

Membraxe - 6 févr. 2001 à 10:32
 VB_MAN - 17 févr. 2001 à 05:32
salut a tous,

J aimerais savoir s il est possible de
sauvegarder le contenus d une listview
(ce qu il est ecrit dans chaque collone,
) pour qu il reste ecrit a chaque relancement du prog.

Merci d avance

bye

3 réponses

Voila une solution (parmis tant d'autre)

' Fonction de sauvegarde
z$ = ""

For a = 1 To ListView1.ListItems.Count
' Colonne Principal
z$ = z$ + ListView1.ListItems.Item(a) + ","
' Colone 1
z$ = z$ + ListView1.ListItems.Item(a).ListSubItems(1) + ","
' Colone 2
z$ = z$ + ListView1.ListItems.Item(a).ListSubItems(2)
z$ = z$ + vbCrLf
Next

Close
Open "nom_fichier.ext" For Output As #1
Print #1, z$
Close

Voila, pour la sauvegarde. Ici je traite uniquement : l'entrée racine et 2 subItems, mais on peut en ajouter...

Pour le chargement ca donnera :
Close
Open "Nom_Fichier.ext" For Input As #1

Do Until EOF(1)

Line Input #1, z$
If z$ <> "" Then
Set s = ListView1.ListItems.Add(, , Mid$(z$, 1, InStr(z$, ",") - 1))
z$ = Mid$(z$, InStr(z$, ",") + 1)
s.SubItems(1) = Mid$(z$, 1, InStr(z$, ",") - 1)
z$ = Mid$(z$, InStr(z$, ",") + 1)
s.SubItems(2) = z$
End If
Loop
Close

Voila, c'est un exemple, mais y'a d'autre solution.

Note : J'utilise une virgule comme separateur de donnée, il ne faut pas l'utiliser dans les textes des items de la ListView. Si non, il faut choisire un autre caracter de separation (un # par exemple)

Question : Int19h@usa.net

a+
0
Si ca peut t'aider voici une autre facon de faire peut importe le nombre de Collone qui peut avoir

À mettre dans un module

'Sauvegarder le contenu d'un ListView

Public Function SaveListView(ListViewName As ListView, ByVal Source As String) As Long

Dim I As Long
Dim A As Long
Dim iFile As Long
Dim StrTemp As String
Dim SaveLine As String

On Error GoTo ErrSaveListView

Err.Clear
If Len(Source) <= 0 Then
SaveListView = False
Exit Function
End If

iFile = FreeFile
Open Source For Output As #iFile

For I = 1 To ListViewName.ListItems.Count
SaveLine = RTrim$(ListViewName.ListItems.Item(I).Text)
For A = 1 To ListViewName.ColumnHeaders.Count - 1
If RTrim$(ListViewName.ListItems.Item(I).SubItems(A)) = "" Then
StrTemp = "none"
Else
StrTemp = RTrim$(ListViewName.ListItems.Item(I).SubItems(A))
End If
SaveLine = SaveLine & ";" & StrTemp
Next A
Print #iFile, SaveLine
Next I
Close #iFile

SaveListView = IIf(Err, False, True)
Exit Function

ErrSaveView:
Close
SaveListView = False
Exit Function
End Function

'Ouvrir un fichier et le mettre dans un ListView

Public Function LoadListView(ListViewName As ListView, ByVal Source As String) As Long

Dim iFile As Long
Dim I As Long
Dim NBSI As Long
Dim NBTM As Long
Dim STIN As Long
Dim LineTemp As String
Dim StrTemp As String
Dim SousItem() As String

On Error Resume Next

Err.Clear
If Len(Source) <= 0 Then
LoadListView = False
Exit Function
End If

NBTM = 0
iFile = FreeFile
Open Source For Input Access Read As #iFile
Line Input #iFile, LineTemp
Close #iFile

For I = 1 To Len(LineTemp)
If Mid$(LineTemp, I, 1) = ";" Then
NBTM = NBTM + 1
LineTemp = Mid$(LineTemp, I)
If Left$(LineTemp, 1) = ";" Then
LineTemp = Right$(LineTemp, Len(LineTemp) - 1)
End If
I = 1
End If
Next I

ReDim SousItem(0 To NBTM)
LineTemp = vbNullString
STIN = ListViewName.ListItems.Count + 1

iFile = FreeFile
Open Source For Input Access Read As #iFile
Do While Not EOF(iFile)
Line Input #iFile, LineTemp
If Len(LineTemp) > 0 Then
NBSI = 0
For I = 1 To Len(LineTemp)
If Mid$(LineTemp, I, 1) = ";" Then
StrTemp = Mid$(LineTemp, 1, I)
StrTemp = RemovePointVirgule(StrTemp) If (StrTemp "none" Or StrTemp "") Then
StrTemp = ""
End If
SousItem(NBSI) = StrTemp
NBSI = NBSI + 1
LineTemp = Mid$(LineTemp, I)
If Left$(LineTemp, 1) = ";" Then
LineTemp = Mid$(LineTemp, 2)
End If
I = 1
End If
Next I
SousItem(NBSI) = RemovePointVirgule(LineTemp)
ListViewName.ListItems.Add , , SousItem(0)

For I = 1 To ListViewName.ColumnHeaders.Count
ListViewName.ListItems.Item(STIN).SubItems(I) = (SousItem(I))
Next I
STIN = STIN + 1
End If
Loop
Close #iFile

Erase SousItem()
LoadListView = IIf(Err, False, True)
ListViewName.Refresh

End Function
0
J'ai oublier un petit quelque chose :

Private Function RemovePointVirgule(ByVal S As String) As String

Dim TMP As String

On Error Resume Next

If Len(S) <= 0 Then
RemovePointVirgule = S
Exit Function
End If

TMP = S If Left$(TMP, 1) ";" Then TMP Mid$(TMP, 2)
If Right$(TMP, 1) ";" Then TMP Left$(TMP, Len(TMP) - 1)

RemovePointVirgule = TMP

End Function
0
Rejoignez-nous