Why should I migrate to .NET? Another reason is Serialization (saving objects to files) to XML is so simple in NET.
In this article, I will show you how easy it is to save the contents of a ListView to an XML file and then reload the ListView from XML.
Three VB.NET methods are used in this article. The first method is SaveObjectProperties. In this application, I have a ListView with twenty-two columns in it. I have a need to save the contents of the ListView and the next time I run the application, I want to populate the ListView with the data that was loaded in it the last time the application was run. SaveObjectProperties will do that for me. First, I create a new DataTable, named "PrintObject", in a DataSet. Next, I loop to add twenty-two columns to the DataTable. They are simply named "Col0" to "Col21". There names do not really matter as you will see in the reload method. Next, I loop thru the the ListView, creating an object for each row of the ListView and then calling AddRowToTable to add each object to the DataTable. Finally, I call the WriteXML method of the DataSet object. It does the creation of the XML automatically.
| Public Sub SaveObjectProperties() Dim ds As New DataSet Dim oCG As New CGrid Dim i As Integer Try ' create a datatable in a dataset. the dataset will ' automatically create the xml Dim dt As DataTable = ds.Tables.Add("PrintObject") For i = 0 To MelistviewObjects.Columns.Count - 1 dt.Columns.Add("Col" & i.ToString, Type.GetType("System.String")) Next For i = 0 To MelistviewObjects.Items.Count - 1 With Me.listviewObjects.Items(i) Dim o() As Object = {.SubItems(0).Text, _ .SubItems(1).Text, _ .SubItems(2).Text, _ .SubItems(3).Text, _ .SubItems(4).Text, _ .SubItems(5).Text, _ .SubItems(6).Text, _ .SubItems(7).Text, _ .SubItems(8).Text, _ .SubItems(9).Text, _ .SubItems(10).Text, _ .SubItems(11).Text, _ .SubItems(12).Text, _ .SubItems(13).Text, _ .SubItems(14).Text, _ .SubItems(15).Text, _ .SubItems(16).Text, _ .SubItems(17).Text, _ .SubItems(18).Text, _ .SubItems(19).Text, _ .SubItems(20).Text, _ .SubItems(21).Text} AddRowToTable(dt, o) End With Next i ds.WriteXml(Me.textSavePath.Text) Catch ex As System.Exception MsgBox(ex.ToString) End Try End Sub |
| Public Function AddRowToTable(ByRef dt As DataTable, _ ByVal ParamArray DRows() As Object) As Boolean Dim i As Short Try Dim newRow As DataRow = dt.NewRow For i = 0 To UBound(DRows) ' add a row to the passed dtList newRow(i) = DRows(i) Next dt.Rows.Add(newRow) Return True Catch ex As System.Exception MsgBox(ex.ToString) Return False End Try End Function |
| Public Sub ReloadListviewFromXML() Dim ds As New DataSet Try ds.ReadXml(Me.textOpenPath.Text) Dim dt As DataTable = ds.Tables("PrintObject") Dim i As Integer Dim j As Integer Me.listviewObjects.Items.Clear() For i = 0 To dt.Rows.Count - 1 Dim dr As DataRow = dt.Rows(i) With Me.listviewObjects .Items.Add(dr(0)) For j = 1 To dt.Columns.Count - 1 .Items(i).SubItems.Add(dr(j)) Next End With Next Catch ex As System.Exception StructuredErrorHandler(ex) End Try End Sub |