Ваш код выглядит так, как будто вы пытаетесь использовать разные столбцы Parent / Child, например, вы связываете productid в родительской таблице с categoryid в дочерней таблице и т. Д. Это приведет к нежелательному результату. Мое ближайшее предположение к тому, что вы хотите:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim DtSet As New DataSet
With DtSet
.Tables.Add("Product")
With .Tables("Product")
.Columns.Add("ProductID", GetType(String))
.Rows.Add("P1")
.Rows.Add("P2")
End With
.Tables.Add("Category")
With .Tables("Category")
.Columns.Add("ProductID", GetType(String))
.Columns.Add("CategoryID", GetType(String))
.Rows.Add("P1", "C1")
.Rows.Add("P1", "C2")
.Rows.Add("P2", "C3")
.Rows.Add("P2", "C4")
End With
.Tables.Add("Items")
With .Tables("Items")
.Columns.Add("ProductID", GetType(String))
.Columns.Add("CategoryID", GetType(String))
.Columns.Add("Items", GetType(String))
.Rows.Add("P1", "", "Item1")
.Rows.Add("P2", "", "Item2")
.Rows.Add("", "C2", "Item3")
.Rows.Add("", "C3", "Item4")
.Rows.Add("", "C4", "Item5")
End With
.Relations.Add(New DataRelation("ProductToItems", .Tables("Product").Columns("ProductID"),
.Tables("Items").Columns("ProductID"), False))
.Relations.Add(New DataRelation("ProductToCategory", .Tables("Product").Columns("ProductID"),
.Tables("Category").Columns("ProductID"), False))
.Relations.Add(New DataRelation("CategoryToItems", .Tables("Category").Columns("CategoryID"),
.Tables("Items").Columns("CategoryID"), False))
For Each Relation As DataRelation In .Relations
Relation.Nested = True
Next
End With
DtSet.WriteXml("C:\Data\Data.XML", XmlWriteMode.IgnoreSchema)
End Sub
Поскольку в вашем примере нулевые значения, вы не можете включить ограничения.