[C#] DataSet/GridView aus XML heraus befüllen

WiZdooM

Erfahrenes Mitglied
Hallo

Ich möchte gerne ein Datenset mit den Werten aus einer XML füllen und diese dann im Gridview ausgeben lassen.
Ich hab mir also ein DataSet angelegt, dort eine Tabelle drin erzeugt, die 4 Spalten enthält. Das ganze dann noch mit einem Gridview verknüpft (Member: die Datentabelle, Source: das DataSet). Nun lese ich die XML mit der DataSet.ReadXml-Methode (XmlReader) aus, wie es in der MSDN steht:
Code:
            string file = "Data.xml";
            System.IO.FileStream fileStreamXML = new System.IO.FileStream(file, System.IO.FileMode.Open);
            System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(fileStreamXML);
            XMLDataSet.ReadXml(xmlReader);
            xmlReader.Close();

Da an der Stelle keine Exception geworfen wird, nehme ich an das steht im DataSet. Wie bekomme ich nun das Gelesene in die DataTable und damit in das Gridview ?
 
Hallo Norbert,

offenbar ist in dem DataSet nichts drin, der Lookup sagt jedenfalls dass das DataSet Empty is :(

Eine Datenbank mittels ADO an ein GridView zu Binden ist ja kein Problem, aber ich will nicht extra für eine handvoll Einträge eine Datenbank aufsetzen... Irgendwie scheint das wohl nicht zu gehen. Im Netz findet man jedenfalls eigentlich nichts zu dem Thema.

Edit: Ich hab jetzt mal ein ListView genommen. Das Lässt sich etwas angenehmer Befüllen. Aber nur "etwas".
In meiner XML ist er nun beim Element "COL" (Column) angekommen. Für jede Spalte existiert ein Element mit dem jeweiligen Attribut, also 4 Spalten und 4 Attribute. Mit folgendem Reader traversiere ich die XML und befülle die ListView:
Code:
XmlTextReader reader = new XmlTextReader("Data.xml");
            try
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            switch (reader.Name)
                            {
                                case "ROWHEADER":
                                    break;
                                case "COLHEADER":
                                    for (int i = 0; i < reader.AttributeCount; i++)
                                    {
                                        reader.MoveToAttribute(i);
                                        switch (reader.Name)
                                        {
                                            case "text":
                                                listView1.Columns.Add(reader.Value);
                                                break;
                                            case "width":
                                                listView1.Columns[i-1] .Width = XmlConvert.ToInt32(reader.Value);
                                                break;
                                        }
                                    }

                                    break;
                                case "ROW":
                                    break;
                                case "COL":
                                    reader.MoveToAttribute(0);
                                        switch (reader.Name)
                                        {
                                            case "text":
                                                ListViewItem item = new ListViewItem(reader.Value);
                                                item.SubItems.Add(reader.Value);
                                                item.SubItems.Add(reader.Value);
                                                item.SubItems.Add(reader.Value);
                                                listView1.Items.Add(item);
                                                break;
                                        }
                                    break;
                            }
                            break;
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message.ToString());
            }

Wie gesagt befinden wir uns nun an der Stelle "COL" in der XML, dort wo nun die Zelle befüllt werden soll.
Nun laut der MSDN wird die listView mit dem Subitems und Items befüllt. Zwar füllt mir dieser Reader die Zellen, aber nur vertikal nicht horizontal - die Werte die in den Spalten stehen sollen, stehen in den Zeilen. Etwas Ähnliches passiert auch beim Setzen der Spaltenbreite, anstatt jede Spalte zu nehmen, nimmt er nur die erst Spalte und setzt das Attribut "Width" auf "200".
Zum besseren Verständnis hier noch die XML Datei.
XML:
<?xml version="1.0" encoding="utf-8" ?>
<ROOT>
  <ROWHEADER>
  	<COLHEADER text="Programm" width="200" />
        <COLHEADER text="Version" width="35" />
        <COLHEADER text="Seriennummer" width="200" />
        <COLHEADER text="Verwendet von..." width="200" />
  </ROWHEADER>
  <ROW>
        <COL text="Windows XP" />
        <COL text="SP3" />
        <COL text="THISI-SASAM-PLESE-RIALN-UMBER" />
        <COL text="PC 123" />
    </ROW>
</ROOT>

Wieso macht der das ?
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück