Autor Beitrag
Petros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Do 14.09.17 20:16 
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.
ausblenden Quelltext
1:
2:
3:
|  Vendor  | product |
----------------------
|   zte    | f460    |

Datei1.xml
ausblenden 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
ausblenden Quelltext
1:
2:
3:
|  Vendor  |
------------
|   zte    |

Datei2.xml
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ausblenden 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 user profile iconTh69: Code- durch XML-Tags ersetzt

Für diesen Beitrag haben gedankt: Petros
Petros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: 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

ausblenden 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

ausblenden 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