none
Listview abspeichern RRS feed

  • Frage

  • Ich möchte gerne mein Listview mit kompletten inhalt abspeichern und wieder aufrufen können, dafür besitze ich schon ein paar Funktionen, aber diese sind in VB 6 geschrieben..Leider konnte die Portierung von VB 6 zu VB 2005 Ex. nicht den gewünschten Effekt erziehlen. Daher wende ich mich nun an euch, da ich mit VB 2005 Ex. noch nicht ganz zurecht komme. Smile

    Hier ist der VB 6 Code:

     

    Option Explicit

    Private Const mc_DELIMITER As String = "~|~"

    Public Sub LoadListViewData(ByVal lvw As ListView, _
          ByVal vsFileName As String)

      Dim strFileText As String
      Dim astrData()  As String
      Dim astrItems() As String

      Dim intColsCnt  As Integer
      Dim sngColWidth As Single

      Dim FN As Integer
      Dim i  As Integer
      Dim j  As Integer

      Dim itmX As ListItem

      If Len(Dir(vsFileName, vbNormal)) = 0 Then
        MsgBox "Die Datei " & vsFileName & _
              " konnte nicht gefunden werden !", _
              vbOKOnly + vbInformation, Title:="Fehler"

      Else
        FN = FreeFile()
        Open vsFileName For Binary Access Read As #FN
          strFileText = Space(LOF(FN))
          Get #FN, , strFileText
        Close #FN

        If Len(Trim$(strFileText)) > 0 Then
          astrData() = Split(strFileText, vbCrLf)
          astrItems() = Split(astrData(0), mc_DELIMITER)

          intColsCnt = UBound(astrItems)

          Select Case intColsCnt
            Case 0
              sngColWidth = (lvw.Width * 0.99)
            Case Is > 0
              sngColWidth = (lvw.Width * 0.99) / intColsCnt
            Case Else
          End Select

          For j = 1 To UBound(astrItems)
            lvw.ColumnHeaders.Add , , astrItems(j), sngColWidth
          Next

          For i = 1 To UBound(astrData) - 1
            astrItems() = Split(astrData(i), mc_DELIMITER)

            If UBound(astrItems) > intColsCnt Then
              ReDim Preserve astrItems(intColsCnt)
            End If

            Set itmX = lvw.ListItems.Add(, astrItems(0), astrItems(1))
            For j = 2 To UBound(astrItems)
              itmX.SubItems(j - 1) = astrItems(j)
            Next
          Next
        End If
      End If
    End Sub

     

    Public Sub SaveListViewData(ByVal lvw As ListView, _
          ByVal vsFileName As String)

      Dim FN As Integer

      Dim intColsCnt  As Integer
      Dim strFileText As String

      Dim i As Integer
      Dim j As Integer

      On Error GoTo err_SaveData

      FN = FreeFile()
      Open vsFileName For Output As #FN
      With lvw
        intColsCnt = .ColumnHeaders.Count

        strFileText = "ColumnHeaders"
        For i = 1 To intColsCnt
          strFileText = strFileText & mc_DELIMITER & .ColumnHeaders(i)
        Next
        Print #FN, strFileText

        For i = 1 To .ListItems.Count
          With .ListItems(i)
            strFileText = .Key & mc_DELIMITER
            strFileText = strFileText & .Text
            For j = 1 To intColsCnt - 1
              strFileText = strFileText & mc_DELIMITER & .SubItems(j)
            Next
            Print #FN, strFileText
          End With
        Next
      End With

    exit_Sub:
      Close #FN
      Exit Sub

    err_SaveData:
      MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler"
      Resume exit_Sub
    End Sub

    Public Function GetInitFileName() As String
      Dim strPath As String

      strPath = App.Path
      If Right$(strPath, 1) <> "\" Then strPath = strPath & "\"
      GetInitFileName = strPath & "ListViewInit.lst"
    End Function

     

    Ich hoffe mir kann jemand helfen.

    Dienstag, 2. Oktober 2007 16:35