VB.Net DataTable вложенные отношения, как? - PullRequest
2 голосов
/ 01 июня 2019

enter image description here

enter image description here

Обновлено: я пытаюсь создать XML со схемой, показанной на скриншоте (ссылка на сайт).Кто-нибудь подскажет, как добавить отношение для достижения этого или изменить Datatable для достижения этого?

        Data_Set.Relations.Add("ProdCategory", tbl_Product.Columns("pID"), tbl_Category.Columns("cID"))
    Data_Set.Relations("ProdCategory").Nested = True

    Data_Set.Relations.Add("CatogoryItems", tbl_Category.Columns("cID"), tbl_Items.Columns("iID"))
    Data_Set.Relations("CatogoryItems").Nested = True

    'Data_Set.Relations.Add("ProdItems", tbl_Product.Columns("pID"), tbl_Iems.Columns("iID"))
    'Data_Set.Relations("ProdItems").Nested = True

Я застрял с приведенным выше кодом.

а также я должен иметь возможность читать XML обратно в набор данных с чтением XML.

1 Ответ

3 голосов
/ 06 июня 2019

Ваш код выглядит так, как будто вы пытаетесь использовать разные столбцы 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

Поскольку в вашем примере нулевые значения, вы не можете включить ограничения.

...