I had a few minutes to spare. If the xml source is created by you then consider the following which alters the xml structure
XML file XMLFile1.xml
Code:
<Records>
<Record>
<Product>
<Serial>N110879987</Serial>
<ProductName>QWX4T6YU</ProductName>
<SomeDate>2012-08-10</SomeDate>
</Product>
<Operations>
<Operation type="SETUP">
<TimeStamp>2012-08-10</TimeStamp>
<Status>Success</Status>
</Operation>
<Operation type="RUN">
<TimeStamp>2012-08-11</TimeStamp>
<Status>Done</Status>
</Operation>
</Operations>
</Record>
<Record>
<Product>
<Serial>N110879988</Serial>
<ProductName>QWX4T6YU</ProductName>
<SomeDate>2012-08-12</SomeDate>
</Product>
<Operations>
<Operation type="SETUP">
<TimeStamp>2012-08-12</TimeStamp>
<Status>Success</Status>
</Operation>
<Operation type="RUN">
<TimeStamp>2012-08-12</TimeStamp>
<Status>Done</Status>
</Operation>
</Operations>
</Record>
</Records>
The code was done in VS2010 but hopefully will work in VS2005
Code:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ds As New DataSet
ds.ReadXml("XMLFile1.xml")
'
' The following for/next display hidden columns to the IDE output window
'
Console.WriteLine("Product columns hidden")
For Each col As DataColumn In ds.Tables("Product").Columns
If col.ColumnMapping = MappingType.Hidden Then
Console.WriteLine(" [{0}]", col.ColumnName)
End If
Next
Console.WriteLine("Operation columns hidden")
For Each col As DataColumn In ds.Tables("Operation").Columns
If col.ColumnMapping = MappingType.Hidden Then
Console.WriteLine(" [{0}]", col.ColumnName)
End If
Next
Dim ProductIdentifiers As DataView = _
New DataView(ds.Tables("Product") _
.DefaultView _
.ToTable("Product", True, "Record_id"))
For Each item As DataRowView In ProductIdentifiers
Dim FirstRow As Boolean = False
ds.Tables("Product").DefaultView.RowFilter = "Record_id=" & item.Item("Record_id").ToString
ds.Tables("Operation").DefaultView.RowFilter = "Operations_id=" & item.Item("Record_id").ToString
For Each row As DataRow In ds.Tables("Product").Rows
If Not FirstRow Then
Dim CurrRow As DataRowView = ds.Tables("Operation").DefaultView.Item(0)
DataGridView1.Rows.Add(New Object() {row(0), row(1), row(2), CurrRow(0), CurrRow(1), CurrRow(2)})
FirstRow = True
Else
For x As Integer = 1 To ds.Tables("Operation").DefaultView.Count - 1
Dim SubRow As DataRowView = ds.Tables("Operation").DefaultView.Item(x)
DataGridView1.Rows.Add(New Object() _
{Nothing, Nothing, Nothing, SubRow.Item(0), SubRow.Item(1), SubRow.Item(2)})
Next
End If
Next
Next
End Sub
End Class
Screenshot where I added six DataGridViewColumn to a DataGridView