Entwickler-Ecke
WinForms - ReadXML eigenartiges verhalten
Petros - Do 14.09.17 20:16
Titel: ReadXML eigenartiges verhalten
Hallo,
da kommt schon mein nähstes problem.
Folgenes ich habe mehrere xml datein einige die ich in einem DataGridView übergebe (Klapt auch) jetzt zum merkwürdigem verhalten.
lese ich Datei1.xml ein zeigt er mir alle spalten und tabelleninhate an.
Quelltext
1: 2: 3:
| | Vendor | product | ---------------------- | zte | f460 | |
Datei1.xml
XML-Daten
1: 2: 3: 4:
| <Root> <product>f460</product> <vendor>zte</vendor> </Root> |
Bei Datei 2 zeigt er mir in der Tabelle nur den Vendor an aber nicht die Produkte
Quelltext
1: 2: 3:
| | Vendor | ------------ | zte | |
Datei2.xml
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <Root> <product>f460</product> <product>f461</product> <product>f462</product> <product>f463</product> <product>f464</product> <product>f465</product> <vendor>zte</vendor> </Root> |
hat zufällig jemand ne ahnung woran das liegen kann
MFG Petros
Ralf Jansen - Do 14.09.17 20:55
Wie kommen die Daten den ins DataGridView? Ein DataGridView hat keine ReadXml Methode.
Falls du von Dataset.ReadXml sprichst dort wird keine Tabelle gelesen sondern eine Menge von Tabellen. Dein Xml hat aber keine entsprechende Struktur. Ich vermute mal das das Dataset jetzt deine Tabellenstruktur versucht zu erraten. Im ersten Fall errät es eine Tabelle mit zwei Spalten. Im zweiten Fall 2 Tabellen mit jeweils einer Spalte. Ich wüßte auch nicht was man im zweiten Fall auch anderes raten sollte. Tabellen haben eine rechteckige Struktur immer gleich viele Daten je Row. 6 Produkte zu einen 1 Vendor passt nicht welcher vendor gehört dann zu welchem Produkt und wer bekommt keinen vendor.
Eine funktionierende Xml Struktur wäre
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| <root> <table1> <product>f460</product> <vendor>zte</vendor> </table1> <table1> <product>f461</product> <vendor>zte</vendor> </table1> <table2> <id>1</product> <name>Irgendeine andere Tabelle</name> </table2> </root> |
Letztlich würde ich aber von der Dataset/Xml Kombinationen abraten. Da ist zuviel Magie drin. Die macht Sinn wenn man auch WriteXml des Datasets benutzt hat zum erstellen der Xml Dateien oder zumindest ein Xsd hat das man dem Dataset beim einlesen mitgibt. Die eher zu nutzende Variante ist sich eine Klasse zu schreiben die dem gewünschten Xml Format entspricht und die dann mit dem XmlSerializer beschrieben/gelesen wird.
Moderiert von Th69: Code- durch XML-Tags ersetzt
Petros - Do 14.09.17 21:25
Ja genau über DataSet Readxml => DataGridView
naja struktur schon es gibt 2 Tabellen bzw was er daraus schlussfolgert product und vendor jewals eine spalte. Dachte ich zumindest
Meine Daten rufe ich aus einer Json datei und lasse sie in xml umwandeln
C#-Quelltext
1: 2:
| XNode node = JsonConvert.DeserializeXNode(cveForm.rt_box2.Text, "Root", ); rt_box1.Text = node.ToString(); |
und speichere das ganze als xml. So kommt die struktur zu stande.
wenn ich jetzt noch herrausbekomme wie das mit den <tabel> einbauen kann dann wäre mein problem gelöst.
vendor ist eine spalte und hat nur einen eintrag
producte ist eine spalte und hat ein oder mehrere einträge
Vendor = hersteller
product = geräte namen
wenn ich das ganze in meine db übertrage ist es folgender maßen aufgebaut
"Ein Hersteller" = mehrere "producte"
Ralf Jansen - Do 14.09.17 22:18
Dann verstehe ich nicht was das xml da soll?
Schreibe eine simple Klasse(n) die deinem Json entspricht und befülle die mit Json.Net, das du da scheinbar benutzt, direkt.
Da das dann eine 1 zu N Beziehung ist ist das keine einfache Tabelle und nicht einfach so in einem DataGridView anzuzeigen. Entweder du baust das in Memory so um das du zu jedem Produkt genau ein Vendor hast und somit eine 2-spaltige Tabelle die anzeigbar wird oder du nimmst etwas das deiner Struktur entspricht zum Beispiel einen TreeView.
Sollte aber Produkt und Vendor aus mehr als einem Text bestehen dann gibt es kein Standard Winforms Control das das einfach so anzeigen kann und du musst dir erst das passende Control schreiben bzw. was passendes im Netz suchen.
Da nicht ganz klar ist wie du das jetzt genau angezeigt haben willst beschreib das besser etwas genauer. Dann kann dir hier eher jemand helfen.
Petros - Fr 15.09.17 11:07
OK ich versuche es mal genauer hinzubekommen was ich genau will bzw was meine application machen soll.
Ich Habe 1 datenbank mit 2 tabellen
1 Tabelle = Vendor mur den Spalten V_ID=PK und V_Name
2 Tabelle = Produkt mit 3 spalten D_ID=PK D_Name und fk_V_ID=FK
PK = Primärschlüssel FK = Fremdschlüssel
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Tabelle 1 Tabelle 2 | Vendor | | Produkt | ------------------ ------------------------------- | V_ID | V_Name | | D_ID | D_Name | fk_V_ID | ------------------ ------------------------------- | 1 | Siemens | | 1 | 3210 | 2 | | 2 | Nokia | | 2 | 3310 | 2 | | 3 | Samsung | | 3 | Lumia 525 | 2 | | 4 | Galaxy S6 | 3 | | 5 | Galaxy S7 | 3 | | 6 | Galaxy S8 | 3 | | 7 | Waschmas. 1| 1 | | 8 | Waschmas. 2| 1 |
USW diese daten bekomme ich per json |
damit ich die Inhalten der JSon in eine dataset bekomme muss ich sie ja erst strukturell umbauen das machen ich in dem ich die datei in XML umwandle. das klapt ja auch habs mal getestet mit deinem vorschlag <table1> und <table2> ja das funktioniert auch nur weis ich leider nicht wie ich das ganze so hinbekommen das er mir da auch bei convert in xml automatisch an die richtige stelle schreibt stadt nur <product> und <vendor>.
Dachte da an so etwas wie das ganze in einer Richtext auszugeben und dann per Repleace das ganze entsprechend anpassen
C#-Quelltext
1: 2: 3: 4: 5:
| RichTextBox1.Text.Replace ("<product>","<table1><product>"); RichTextBox1.Text.Replace ("</product>","</product></table1>");
RichTextBox1.Text.Replace ("<vendor>","<table2><vendor>"); RichTextBox1.Text.Replace ("</vendor>","</vendor></table2>"); |
oder kennt jemand einen besseren weg
//EDIT Problem schon gelöst danke für den Tip @Ralf Jansen das mit dem <table1> und das ganze per Replace hat mir zum erwünschtem ergebnis verholfen
MFG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!