vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken · Sonstiges   |   VB-Versionen: VB607.04.03
ListView-Inhalt in der Datenbank speichern

Zwei Funktionen, mit denen sich der Inhalt eines ListView-Control in einer Datenbank speichern und wieder auslesen lässt.

Autor:   Dieter OtterBewertung:  Views:  17.160 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Unser heutiger Tipp zeigt einen Weg, wie sich der Inhalt eines ListView-Controls in einer Datenbank speichern und auch wieder auslesen lässt. Neben dem reinen Text sollen aber auch alle Zusatzinformationen, wie Farbattribute und Bildsymbol-Index gespeichert werden.

Da das ListView sehr viele Zeile und Spalten enthalten kann, lässt sich der gesamte Inhalt meist nicht in einem Standard Datenbank-Textfeld speichern. Wir benötigen also ein Datenbank-Feld, das sehr viele Informationen aufnehmen kann - ein Memofeld.

Der Inhalt des ListView-Controls muss hierzu zunächst in einen einzigen String zusammengefasst werden, der dann im Memofeld der Datenbank-Tabelle gespeichert werden kann:

Private Function db_lvwGetData(ListView As ListView) As String
  Dim oItem As ListItem
  Dim i As Integer
  Dim sData As String
 
  sData = ""
 
  With ListView
    For Each oItem In .ListItems
      ' 1. Spalte
      With oItem
        sData = sData & CStr(Abs(.Bold)) & _
          CStr(Abs(.Checked)) & "|" & _
          CStr(.Icon) & "|" & CStr(.SmallIcon) & "|" & _
          CStr(.ForeColor) & "|" & .Key & "|" & .Text
      End With
 
      ' weitere Spalten
      For i = 1 To oItem.ListSubItems.Count
        With oItem.ListSubItems.Item(i)
          sData = sData & vbTab & _
            CStr(Abs(.Bold)) & "|" & _
            CStr(.ReportIcon) & "|" & _
            CStr(.ForeColor) & "|" & .Text
        End With
      Next i
 
      ' nächste Zeile
      sData = sData & vbCrLf
    Next
  End With
 
  db_lvwGetData = sData
End Function

Das Speichern des ListView-Inhaltes erfolgt demnach wie folgt:

With oRecordset
  ...
  .Fields("memofeld").Value = db_lvwGetData(ListView1)
  ...
End With

Fehlt jetzt nur noch die Funktion, um den gespeicherten Inhalt wieder im ListView-Control anzuzeigen:

Private Sub db_lvwSetData(ListView As ListView, _
  ByVal dbData As String)
 
  Dim sLine() As String
  Dim sData() As String
  Dim sCol() As String
  Dim i As Integer
  Dim u As Integer
  Dim oItem As ListItem
  Dim oSubItem As ListSubItem
 
  With ListView
    ' ListView löschen
    .ListItems.Clear
 
    ' In die einzelnen Zeilen "zerlegen"
    sLine = Split(dbData, vbCrLf)
 
    ' alle Zeilen nacheinander hinzufügen
    For i = 0 To UBound(sLine) - 1
      ' Spalten-Infos
      If sLine(i) <> "" Then
        sData = Split(sLine(i), vbTab)
 
        ' 1. Spalte
        sCol = Split(sData(0), "|")
        Set oItem = .ListItems.Add(, , sCol(5))
        With oItem
          If sCol(4) <> "" Then .Key = sCol(4)
          .ForeColor = Val(sCol(3))
          .SmallIcon = Val(sCol(2))
          .Icon = Val(sCol(1))
          .Bold = (Val(Mid$(sCol(0), 1, 1)) <> 0)
          .Checked = (Val(Mid$(sCol(0), 2, 1)) <> 0)
        End With
 
        ' weitere Spalten
        For u = 1 To UBound(sData)
          sCol = Split(sData(u), "|")
          Set oSubItem = oItem.ListSubItems.Add(, , sCol(3))
          With oSubItem
            .Bold = (Val(sCol(0)) <> 0)
            .ReportIcon = Val(sCol(1))
            .ForeColor = Val(sCol(2))
          End With
        Next u
      End If
    Next i
  End With
End Sub

Für das Auslesen und Anzeigen, folgende Codezeile verwenden:

With oRecordset
  ...
  db_lvwSetData ListView1, .Fields("memofeld").Value
  ...
End With



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.