VB-Power.net

LINQ to ListView


Klassenmodule
Erstellt am 04 Oct 2009
VB.Net Code-Snippets, Klassen und mehr... >> Klassenmodule

Das ListView Steuerelement, wunderbar geeignet um tabellarische Daten anzuzeigen, fehlt leider die Möglichkeit die Daten zu speichern und zu wieder zu laden. Mit der nachfolgenden VB2008 Klasse ist das kein Problem mehr. Die Klasse erbt von ListView und wird dabei um die Load und Save Methode erweitert. Die neuen Methoden nutzen dabei die LINQ to XML Technik. Doch nicht nur die Daten werden als XML gespeichert, sondern zusätzlich noch die ColumnHeader Informationen, so dass ein ListView komplett wiederhergestellt werden kann.

Nachfolgend die Klasse ListViewEx

 

Imports System.Windows.Forms.ListViewItem

Public Class ListViewEx
   Inherits Windows.Forms.ListView

   Private Structure ItemElement
      Dim ItemText As String
      Dim ItemBackColor As Integer
      Dim ItemForeColor As Integer
      Dim ItemFont As String
      Dim ItemFontSize As Integer
   End Structure

   Public Sub Save(ByVal FileName As String)
      Try
         Dim xDoc As New XDocument()
         With xDoc
            .Declaration = New XDeclaration("1.0", "", "")
            .Add(New XElement("ListView"))

            ' ColumnHeader in das XML-Dokument einfügen
            .Root.Add(From col As ColumnHeader In Me.Columns _
                Select <ColumnHeader>
                          <Text><%= col.Text %></Text>
                          <Name><%= col.Name %></Name>
                          <DisplayIndex><%= col.DisplayIndex %></DisplayIndex>
                          <Width><%= col.Width %></Width>
                       </ColumnHeader>)

            ' Items in das XML-Dokument einfügen
            .Root.Add(From Item As ListViewItem In Me.Items _
                Select <Item>
                          <%= From SubItem As ListViewSubItem In Item.SubItems _
                             Select <Text BackColor=<%= SubItem.BackColor.ToArgb %>
                                       ForeColor=<%= SubItem.ForeColor.ToArgb %>
                                       Font=<%= SubItem.Font.Name %>
                                       FontSize=<%= CInt(SubItem.Font.Size) %>>
                                       <%= SubItem.Text %></Text> %>
                       </Item>)

            ' XML-Datei speichern
            .Save(FileName)
         End With
      Catch ex As Exception
         Throw ex
      End Try
   End Sub

   Public Sub Load(ByVal FileName As String)
      Try
         Me.Items.Clear()
         Me.Columns.Clear()
         Me.BeginUpdate()

         ' XML-Datei einlesen
         Dim xListView = XElement.Load(FileName)

         ' ColumnHeader aus XML erstellen
         Me.Columns.AddRange((From col In xListView.Descendants("ColumnHeader") _
            Select New ColumnHeader With { _
               .Text = col.Element("Text"), _
               .Name = col.Element("Name"), _
               .DisplayIndex = CInt(col.Element("DisplayIndex")), _
               .Width = CInt(col.Element("Width"))}).ToArray)

         ' Items aus XML einlesen und dem ListView hinzufügen
         For Each Item In xListView.Descendants("Item")
            ' Item Struktur erstellen
            Dim Items As IEnumerable(Of ItemElement) = _
               From SubItem In Item.Descendants("Text") _
               Select New ItemElement _
               With {.ItemText = SubItem.Value, _
                     .ItemBackColor = SubItem.Attribute("BackColor").Value, _
                     .ItemForeColor = SubItem.Attribute("ForeColor").Value, _
                     .ItemFont = SubItem.Attribute("Font").Value, _
                     .ItemFontSize = SubItem.Attribute("FontSize").Value}

            ' ListView-Item erzeugen
            Dim lItem As New ListViewItem()
            Dim isRootItem As Boolean = True

            ' ListView-Item und SubItems füllen
            For Each SItem As ItemElement In Items
               If isRootItem Then
                  lItem.UseItemStyleForSubItems = False
                  lItem.Text = SItem.ItemText
                  lItem.BackColor = Color.FromArgb(SItem.ItemBackColor)
                  lItem.ForeColor = Color.FromArgb(SItem.ItemForeColor)
                  lItem.Font = New Font(SItem.ItemFont, SItem.ItemFontSize, FontStyle.Regular)
                  isRootItem = False
               Else
                  lItem.SubItems.Add(New ListViewSubItem(lItem, SItem.ItemText, _
                     Color.FromArgb(SItem.ItemForeColor), _
                     Color.FromArgb(SItem.ItemBackColor), _
                     New Font(SItem.ItemFont, SItem.ItemFontSize, FontStyle.Regular)))
               End If
            Next

            ' ListView-Item dem ListView hinzufügen
            Me.Items.Add(lItem)
         Next

         Beep()
      Catch ex As Exception
         Throw ex
      Finally
         Me.EndUpdate()
      End Try
   End Sub

End Class

Letzte Änderung: 22 Oct 2009 at 16:13

Zurück
TOP Download !!!

DataGridView Control Extender

Erweitern Sie Ihr DataGridView mit 16 zusätzlichen Spaltentypen.


Weiterlesen...


TOP 5 Downloads
WpfOSMMap7084
Explorer TreeView mit VB.Net - Beispielprojekt5049
DataGridView Control Extender incl. VB2008 Demoprojekt4807
MCIFramework.dll3408
DataGridView Control Extender incl. VB2005 Demoprojekt3085
Powered by:

Powered By VB-Power.net