Problems with display parents and childs from XML in datagridview

Beantwortet Problems with display parents and childs from XML in datagridview

  • Donnerstag, 12. April 2012 10:59
     
      Enthält Code

    Hi,

    I would read an XML File in a datagridview for editing and save it back to the XML File.

    My XML Example:
    person personID="123456">
    <admin geDelete="no" geId="9999922">
    <generalSettings>
    <title>Mr</title>
    <zip>99988</zip>
    <name>Scott</name>
    <surname>Martin<surname>
    <categories>
    <category>
    <categoryId>107856</categoryId>
    </category>
    </categories>
    <keywords>
    <keyword>Scott</keyword>
    <keyword>example</keyword>
    </keywords>
    </generalSettings>
    <adminDynamic>no</adminDynamic>
    <adminUrl><![CDATA[http://www.adminexample.com]]></adminUrl>
    <adminSupportsJavascript>yes</adminSupportsJavascript>
    </admin>
    </person>

    H

     private void button1_Click(object sender, EventArgs e)
            {
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                    ofd.Filter = "XML Files|*.xml";
                    ofd.Title = "Open XML File";
                    if (ofd.ShowDialog() == DialogResult.OK)
                    {
                        textBox1.Text = ofd.FileName;
    
                    }
    
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                DataSet ds = new DataSet();
                ds.ReadXml(textBox1.Text, XmlReadMode.InferSchema);
    
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "admin";
    
            }
    If I debug the code I get of course only the columns from my root element "admin" in my datagrid view.
    Anyone have an idea who I also get the parent elements "general Settings" and the child from the parent "categories" in my datagrid also?
    For example the "keywords" should be comma seperated in the columns.
    It would be great if it is possible to get finaly this datagridview:

    geDeleted | geID | title | zip | name | surname | categoryID | Keywords | adminDynamic | adminUrl | adminSupportJavascript


    Is this possible and what is best practise?

Alle Antworten

  • Donnerstag, 12. April 2012 14:18
    Beantworter
     
     

    Hallo Tom,

    dies ist ein deutschsprachiges Forum, deswegen die Antwort auch in deutsch.

    DataSets können nur ein sehr eingeschränktes Schema ableiten, wie erläutert in:
    Herleiten der relationalen 'DataSet'-Struktur aus XML (ADO.NET)

    Und so würden die Category / Keywords usw. als eigene Tabellen erstellt.

    Willst Du eine andere Darstellung so kommst Du um eine Bearbeitung nicht herum.
    Möglich wäre es mittels LINQ To XML die Daten in eine eigene Klasse einzulesen und diese über eine Liste zu binden.

    Gruß Elmar

  • Donnerstag, 12. April 2012 15:28
     
     

    Hi Elmar,

    deutsch? OK sowieso besser für mich und mein Englisch.

    Alles klar soweit. Hast Du evtl. so Einstiegshilfen für Linq To XML?

    Danke und Gruß
    Tom

  • Donnerstag, 12. April 2012 16:15
    Beantworter
     
     Beantwortet

    Hallo Tom,

    oben hatte ich bereits einen Link auf die MSDN Dokumentation gegeben.
    Weitere Beispiele findest Du unter 101 LINQ Samples

    Falls das ein wenig viel für den Anfang ist, erzähle genauer welches Ergebnis Du haben möchtest.
    Und auch ob Du mehr als nur eine reine Anzeige planst.

    Gruß Elmar

    • Als Antwort markiert LS-Tom Freitag, 13. April 2012 10:59
    •  
  • Donnerstag, 12. April 2012 17:33
     
     

    Hi Elmar,
    ja ich bin nicht wirklich fit in LinQ arbeite noch "old school" mit sql :)

    Also ich möchte eine XML Datei in ein bearbeitbares Grid laden. Die XML Struktur ist nicht immer gleich. Der User kann die XML im Grid bearbeiten und wieder in der gleichen Datei speichern - das wäre das Optimum.
    Das ganze ist ein Tool, zum erstellen von XML Dateien, da das Zielsystem nur XML verarbeiten kann.

    Also der User downloaded seine Daten als XML Datei aus dem externen System und speichert diese auf dem Desktop. Dann läd er die Datei in das "Tool", in dem er diese berarbeiten kann. Da ist z.B. ein Tag mit "URL" der in der XML Datei mindesten 1000x vorkommt und immer wieder geändert wird. Der User sollte die Möglichkeit haben vielleicht die ganze Spalte mit markieren - und "suchen und ersetzen" oder ähnlichem zu ändern.

    Wenn Du mir ein bisschen auf die Sprünge helfen könntest, wäre das Optimal. Vielleicht gibs auch andere Möglichkeiten als das GridView?

    Bitte KEIN EXCEL ---> das Schema kann Excel ohne VBA nicht verarbeiten und eine fertige VBA Lösung liegt bereits vor ist aber alles andere als das, was ich mir vorstelle.

    Kurz vermerkt: Ich bin nicht auf Visual Studio Express angewiesen habe die Ultimate Version!

    Danke und Viele Grüße
    Tom