I love the .NET framework for the simplicity it has brought to application development in so many ways. Like in datacentric application development for example. You could save a whole dataset to disk with just one line of code. Thats right. 1 line. And retrieve it again with just one other line.
In this post we’ll see a sample of how to do it.
So suppose you have this simple Student class.
Public Class Student Private first As String Private last As String Private _address As String Private _age As Integer Private _gender As String Private _Id As Integer Public Property ID() As Integer Get Return _Id End Get Set(ByVal value As Integer) _Id = value End Set End Property Public Property FirstName() As String Get Return first End Get Set(ByVal value As String) first = value End Set End Property Public Property LastName() As String Get Return last End Get Set(ByVal value As String) last = value End Set End Property Public Property Address() As String Get Return _address End Get Set(ByVal value As String) _address = value End Set End Property Public Property Age() As Integer Get Return _age End Get Set(ByVal value As Integer) _age = value End Set End Property Public Property Gender() As String Get Return _gender End Get Set(ByVal value As String) _gender = value End Set End Property Public Overrides Function ToString() As String Return FirstName & " " & LastName & ", " & Gender & ", " & Age & ", " & Address End Function End Class
And let’s say you have this function that populates and returns a list of student objects.
Public Function GetPeople() As List(Of Student) Dim students As New List(Of Student) Dim one As New Student one.ID = 1 one.FirstName = "Chan" one.LastName = "Dong" one.Gender = "Male" one.Age = Integer.Parse("26") one.Address = "Xin Xiao, China" students.Add(one) Dim two As New Student two.ID = 2 two.FirstName = "Ruth" two.LastName = "Mtaita" two.Gender = "Female" two.Age = Integer.Parse("23") two.Address = "6032, Olasity, Arusha" students.Add(two) Dim three As New Student three.ID = 3 three.FirstName = "Sydney" three.LastName = "Masao" three.Gender = "Female" three.Age = Integer.Parse("2") three.Address = "6032, Olasity, Arusha" students.Add(three) Dim four As New Student four.ID = 4 four.FirstName = "Willy" four.LastName = "Masao" four.Gender = "Male" four.Age = Integer.Parse("24") four.Address = "Moshi, Tanzania" students.Add(four) Return students End Function
Now I’m going to create a dataset and a table, and fill the dataset with the students objects from above, save the dataset to disk as an xml file, modify the data in xml and then populate the dataset with the modified data from the xml file.
The method below creates the dataset and fills it with our students data.
Public StudentDataset As DataSet Public Sub FillDataset() StudentDataset = New DataSet ‘you need to make it perfect, add datatypes for the columns etc. Dim tb1 As New DataTable("People") Dim col1 As New DataColumn("ID") Dim col2 As New DataColumn("Firstname") Dim col3 As New DataColumn("Lastname") Dim col4 As New DataColumn("Gender") Dim col5 As New DataColumn("Age") Dim col6 As New DataColumn("Address") tb1.Columns.Add(col1) tb1.Columns.Add(col2) tb1.Columns.Add(col3) tb1.Columns.Add(col4) tb1.Columns.Add(col5) tb1.Columns.Add(col6) Dim row As DataRow = tb1.NewRow row(0) = GetPeople(0).ID row(1) = GetPeople(0).FirstName row(2) = GetPeople(0).LastName row(3) = GetPeople(0).Gender row(4) = GetPeople(0).Age row(5) = GetPeople(0).Address tb1.Rows.Add(row) Dim row1 As DataRow = tb1.NewRow row1(0) = GetPeople(1).ID row1(1) = GetPeople(1).FirstName row1(2) = GetPeople(1).LastName row1(3) = GetPeople(1).Gender row1(4) = GetPeople(1).Age row1(5) = GetPeople(1).Address tb1.Rows.Add(row1) Dim row2 As DataRow = tb1.NewRow row2(0) = GetPeople(2).ID row2(1) = GetPeople(2).FirstName row2(2) = GetPeople(2).LastName row2(3) = GetPeople(2).Gender row2(4) = GetPeople(2).Age row2(5) = GetPeople(2).Address tb1.Rows.Add(row2) Dim row3 As DataRow = tb1.NewRow row3(0) = GetPeople(3).ID row3(1) = GetPeople(3).FirstName row3(2) = GetPeople(3).LastName row3(3) = GetPeople(3).Gender row3(4) = GetPeople(3).Age row3(5) = GetPeople(3).Address tb1.Rows.Add(row3) StudentDataset.Tables.Add(tb1) End Sub
Now I’ll create a simple form, add a datagridview control in it. I’ll create a method within the form to save the dataset to XML, and then I’ll add another method to get the dataset from XML and fill the datagrid with the student records from our dataset.
Saving a Dataset to XML
This single line of code does that for us. The .Net method Dataset.WriteXml takes a file path and saves your whole dataset as an xml file. In this case, the path is the local application folder, and the file name is Studentdataset.xml
Public Sub DatasetToXML() StudentDataset.WriteXml("StudentsDataset.xml") End Sub
See the dataset in Xml format below.
Retrieving the Dataset from XML
Again notice the single line of code that retrieves the dataset from XML. The .Net method for the action is Dataset.ReadXml
Public Sub FillDatasetFromXML() Dim mydataset As New DataSet 'this line loads the dataset from Xml mydataset.ReadXml("StudentsDataset.xml") 'This code adds the records to the datagridview For Each row As DataRow In mydataset.Tables(0).Rows Dim i(5) As String i(0) = row(0) i(1) = row(1) i(2) = row(2) i(3) = row(3) i(4) = row(4) i(5) = row(5) DataGridView1.Rows.Add(i) Next End Sub
Now I’m going to open the xml file in notepad, or whichever xml editor that you may use, modify one record, save changes, and fill our datagrid with the modified dataset.
Here is the form loaded with data from the dataset that we retrieved from Xml.
Edit the dataset in Xml
I’m changing all the details for the first student in xml format using notepad.
After modifying the record and saving the changes, I go back to my form again and load the records from the modified Xml dataset. See the updated changes for the first student displayed in the form now.
And here is the modified dataset in Xml view
And here is the rest of the form’s code.
Private Sub ButtonToXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonToXML.Click Call DatasetToXML() End Sub Private Sub ButtonFromXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFromXML.Click DataGridView1.Rows.Clear() Call FillDatasetFromXML() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call FillDataset() End Sub
The dataset class has many other important methods you could use, for example in saving and retrieving table schemas etc. Its up to everyone to explore the powerful features and use them in their projects.
This was just a scrath at the top, on how you could save a dataset in xml, transfer it maybe over the network, and load it again on the other side ready for use.
Till next time, yours truly.