XML zu Dataset mit vier DataTables --> Wie ordentlich verknüpfen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    XML zu Dataset mit vier DataTables --> Wie ordentlich verknüpfen

    Aloa,

    ich habe einen Haufen XML-Dateien, welche ich auswerten muss.
    Aus diesem Grund hab ich sie mal in ein Dataset eingelesen. Das Dataset besteht aus vier DataTables. Soweit so gut.
    Jede einzelne kann ich wunderbar anzeigen lassen.
    Ich möchte nun aber alle zu einer Datatable verknüpfen.

    Ich habe es nun per LINQ versucht
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Dim Artikel As DataTable = ds.Tables(2)
    2. Dim Text As DataTable = ds.Tables(3)
    3. Dim query =
    4. From art In Artikel.AsEnumerable(), tx In Text.AsEnumerable()
    5. Where art.Field(Of Integer)(1) = tx.Field(Of Integer)(1) AndAlso art.Field(Of String)(2).Equals("P.A.V_BelegPos.Artikel") AndAlso tx.Field(Of String)(3).Equals("*")
    6. Select New With
    7. {
    8. .Zeile = art.Field(Of Integer)(1),
    9. .Key = art.Field(Of String)(2),
    10. .Data = art.Field(Of String)(3),
    11. .Text = tx.Field(Of String)(3)
    12. }
    13. DataGrid1.DataSource = query.ToList

    Aber irgendwie bin ich scheinar zu doof.

    Das Problem ist, dass es sich um kein Typisiertes Dataset handelt, es wird halt anhand der XML automatisch generiert.
    Man sieht, es gibt eine ReportID (Table 0), es gibt zu jeder ReportID n verschiedene SectionIDs (Table 1).
    Zu jeder SectionID & ReportID gibt es keinen bis n Einträge in Table 1 und Table 2.

    Da es nicht typisiert ist, kann ich es leider nicht so schön im Designer verknüpfen.
    Ich dachte, ich könnte einfach eine DataRelation anlegen.
    Aber wenn ich das tue und das DataSet einem GridView als Datasource zuordne, bleibt leider alles leer.
    So schlau scheint es also dann doch nicht zu sein.

    Ist es die falsche Herangehensweise?
    Bilder
    • Daten.png

      62,01 kB, 776×694, 142 mal angesehen
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Mit Dataset.WriteXmlSchema kann auch ein untypisiertes Dataset sein Schema als Datei ausgeben.
    Dieses Schema wiederum kann man als typisiertes Dataset in sein Projekt einbinden,und dann hat man ein typisiertes Dataset.

    Die Frage ist halt, ob dein Xml wirklich geeignet ist, in ein Dataset eingelesen zu werden, und ob die Relationen da hinhauen. Zu jedem ForeignKey musses ja einen passenden Primkey geben - das scheint mir nicht selbstverständlich, wenn du dein Dataset aus verschiedenen XmlDateien zusammenstückelst.
    Hi,

    das Schema herauszuschreiben, daran habe ich noch gar nicht gedacht.
    Das werde ich einmal probieren.

    Die Zuordnung sollte kein Thema sein. Sie werden vom ERP System generiert. Und wenn da eine Referenz fehlen würde, wäre Holland in Not ^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    So, ich muss noch einmal schreiben.
    Vielleicht verstehe ich das Importieren einer Schema-XML nun falsch.
    Ich sehe keinen Menüpunkt oder eine Funktion um eine Schema-XML in ein Dataset zu importieren.
    Das Erstellen ging ja recht Problemlos.

    Gehen wir mal von meinem kleinen Beispiel aus:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <xs:schema id="dsXMLOutput" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    3. <xs:element name="dsXMLOutput" msdata:IsDataSet="true" msdata:Locale="en-US">
    4. <xs:complexType>
    5. <xs:choice minOccurs="0" maxOccurs="unbounded">
    6. <xs:element name="ttXMLReport" minOccurs="0" maxOccurs="79228162514264337593543950335">
    7. <xs:complexType>
    8. <xs:sequence>
    9. <xs:element name="ReportId" type="xs:int" minOccurs="0" />
    10. <xs:element name="ReportType" type="xs:string" minOccurs="0" />
    11. <xs:element name="Report" type="xs:string" minOccurs="0" />
    12. <xs:element name="LayoutId" type="xs:int" minOccurs="0" />
    13. <xs:element name="Language" type="xs:string" minOccurs="0" />
    14. </xs:sequence>
    15. </xs:complexType>
    16. </xs:element>
    17. <xs:element name="ttXMLSection" minOccurs="0" maxOccurs="79228162514264337593543950335">
    18. <xs:complexType>
    19. <xs:sequence>
    20. <xs:element name="ReportId" type="xs:int" minOccurs="0" />
    21. <xs:element name="SectionId" type="xs:int" minOccurs="0" />
    22. <xs:element name="SectionKey" type="xs:string" minOccurs="0" />
    23. </xs:sequence>
    24. </xs:complexType>
    25. </xs:element>
    26. <xs:element name="ttXMLData" minOccurs="0" maxOccurs="79228162514264337593543950335">
    27. <xs:complexType>
    28. <xs:sequence>
    29. <xs:element name="ReportId" type="xs:int" minOccurs="0" />
    30. <xs:element name="SectionId" type="xs:int" minOccurs="0" />
    31. <xs:element name="FieldKey" type="xs:string" minOccurs="0" />
    32. <xs:element name="FieldData" type="xs:string" minOccurs="0" />
    33. </xs:sequence>
    34. </xs:complexType>
    35. </xs:element>
    36. <xs:element name="ttXMLText" minOccurs="0" maxOccurs="79228162514264337593543950335">
    37. <xs:complexType>
    38. <xs:sequence>
    39. <xs:element name="ReportId" type="xs:int" minOccurs="0" />
    40. <xs:element name="SectionId" type="xs:int" minOccurs="0" />
    41. <xs:element name="FieldKey" type="xs:string" minOccurs="0" />
    42. <xs:element name="FieldText" type="xs:string" minOccurs="0" />
    43. </xs:sequence>
    44. </xs:complexType>
    45. </xs:element>
    46. </xs:choice>
    47. </xs:complexType>
    48. <xs:unique name="main">
    49. <xs:selector xpath=".//ttXMLReport" />
    50. <xs:field xpath="ReportId" />
    51. </xs:unique>
    52. <xs:unique name="ttXMLSection_main">
    53. <xs:selector xpath=".//ttXMLSection" />
    54. <xs:field xpath="ReportId" />
    55. <xs:field xpath="SectionId" />
    56. </xs:unique>
    57. <xs:unique name="ttXMLData_main">
    58. <xs:selector xpath=".//ttXMLData" />
    59. <xs:field xpath="ReportId" />
    60. <xs:field xpath="SectionId" />
    61. <xs:field xpath="FieldKey" />
    62. </xs:unique>
    63. <xs:unique name="ttXMLText_main">
    64. <xs:selector xpath=".//ttXMLText" />
    65. <xs:field xpath="ReportId" />
    66. <xs:field xpath="SectionId" />
    67. <xs:field xpath="FieldKey" />
    68. </xs:unique>
    69. </xs:element>
    70. </xs:schema>

    Oder muss ich es gar nicht im Designer importieren, sondern via Code?
    Wenn ich so durch google stoße ich augenscheinlich nur auf Informationen dazu, wie man Codetechnisch arbeitet.
    Hintergrund war ja aber ein Dataset zu generieren, welches ich über den Dataset-Designer verwalten könnte.
    Oder habe ich das falsch verstanden?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo,

    danke nochmal.
    Mein Problem war, dass die Schema-Dateien die Endung XSD haben und ich das Ganze natürlich als "XML" exportiert habe. War nicht gänzlich so schlau wie ich annahm.
    Wenn ich die Datei umbenenne kann ich sie auch Problemfrei per Drag&Drop importieren.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D