Autor Beitrag
bvbborussia
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.12.10 16:47 
Hallo Zusammen,

ich habe eine XML Datei die ich in ein Treeview einlese. Wie krieg ich, nach klick,einzelne Treeview Knoteninhalte in die Textbox eingefügt? Das Bild welches ich eingefügt habe zeigt das besser.

Vielen Dank.

Gruß
bvbborussia
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.12.10 17:23 
Du merkst dir in jedem TreeNode.Tag den zugehörigen Datensatz und schreibst den dann im TreeView.AfterSelect-Ereignis dann die Eigenschaften des Datensatzes in die dazugehörigen TextBoxen. Evtl. kannst bzw. mußt du je Ebene unterschiedliche Daten in die Tag-Eigenschaft schreiben.

Beim Auslesen mußt du dann entsprechend den Tag wieder in den Datensatz-Typ konvertieren, z.B.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
MyDataType datatype = e.Node.Tag as MyDataType;
if(datatype != null)
{
  // nun kannst du auf die Eigenschaften und Methoden von datatype zugreifen, z.B.
  textbox.Text = datatype.Name;
}


P.S: Eine andere Möglichkeit wäre "DataBinding", jedoch unterstützt das der TreeView nicht direkt, sondern du müßtest eine BindingSource, DataTable o.ä verwenden.
bvbborussia Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.12.10 17:40 
Welche Using-Direktive muss ich für das MyDataType einfügen?

Versteh leider nicht ganz wie du das meinst, muss dabei auch sagen das ich nicht viele Erfahrung in C# habe.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.12.10 17:46 
Damit meine ich einfach deine "gsd_geraete_daten.geraet" (oder wie auch immer dein Datentyp heißt -).
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Sa 11.12.10 17:46 
MyDateType = MeinDatenTyp. in diesem Fall mehr dein Datentyp. also da, wo du während das Programm läuft, die Daten reinspeicherst. Das TreeView selbst kann die Daten nicht speichern...
bvbborussia Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.12.10 18:00 
Wie komme ich den auf mein Datentyp mit C#? Über XElement oder wie?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.12.10 18:08 
Wie liest du denn überhaupt die XML-Datei ein und erzeugst den TreeView daraus. Dafür benötigst du doch schon deinen eigenen Datentypen :?:
bvbborussia Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.12.10 18:16 
Also so les ich die Datei ein und füg die im Treeview ein:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
 private void xmlDeviceData_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = "C:/Users/Bleri/Documents/Visual Studio 2010/Projects/MieleProjekt";
            openFileDialog1.Title = "Lade die XMLDeviceData-Datei";
            openFileDialog1.FileName = "XMLDeviceData";
            openFileDialog1.Filter = "XML Datei|*.xml";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                
                sr = new System.IO.StreamReader(openFileDialog1.FileName);

                xmldoc = new XmlDocument();
                xmldoc.Load(sr);
                treeView.Nodes.Clear();

                treeView.Nodes.Add(new TreeNode(xmldoc.DocumentElement.LocalName));

                TreeNode tNode = new TreeNode();

                tNode = treeView.Nodes[0];

                AddNode(xmldoc.DocumentElement, tNode);

                treeView.ExpandAll();
                treeView.CollapseAll();

            }
        }
private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
        {

            XmlNode xNode;
            TreeNode tNode;
            XmlNodeList nodeList;
            int i;
            // Loop through the XML nodes until the leaf is reached.
            // Add the nodes to the TreeView during the looping process.

            if (inXmlNode.HasChildNodes)
            {
                nodeList = inXmlNode.ChildNodes;

                for (i = 0; i <= nodeList.Count - 1; i++)
                {
                    xNode = inXmlNode.ChildNodes[i];
                    inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
                    // inXmlNode
                    tNode = inTreeNode.Nodes[i];
                    AddNode(xNode, tNode);
                }
            }
            else
            {
                // Here you need to pull the data from the XmlNode based on the
                // type of node, whether attribute values are required, and so forth.
                inTreeNode.Text = (inXmlNode.OuterXml).Trim();
            }
        }


Vielen Dank Th69...

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.12.10 18:52 
Hallo BVB-Fan -)

so wird das leider nichts. Das händische Einlesen von XML-Dateien ist sehr umständlich und fehleranfällig. Außerdem hast du jetzt keine Trennung von Daten und Ansicht (GUI).

Besser ist es mittels "XML-Serialisierung" die Daten in geeignete Datenstrukturen (Klassen) abzulegen und den TreeView anhand dieser Datenstruktur zu füllen.
(Bisher füllst du auch noch den TreeView falsch. Du willst doch sicherlich die Werte sehen, d.h. xNode.Value und nicht den Namen der Node-Klasse).

Zum Thema "XML-Serialisierung" lies dich mal z.B. unter
- openbook.galileocomp...68ccd52850c8a5129ca4
- www.switchonthecode....al-xml-serialization
- Einführung in die XML-Serialisierung und Steuern der XML-Serialisierung mit Attributen
ein.

P.S. Ist das ein privates Projekt oder eine Studien- bzw. Azubiprojektarbeit?

Für diesen Beitrag haben gedankt: bvbborussia
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Sa 11.12.10 19:03 
warum nich gleich hier bleiben, wenn wir was über XML-Serialisierung wissen wollen?
www.c-sharp-library....und+laden_64947.html

XML-(De)Serialisierung ist sehr nützlich. erzeugt übersichtliche XML-Dateien ohne dass man viel für machen brauch. nur ne Klasse für die Daten, das wars...

Für diesen Beitrag haben gedankt: bvbborussia
bvbborussia Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.12.10 19:06 
Ja ich hoffe wie können auch heute gewinnen!!!

Nein das ist ein privates Porjekt. Ich will XML-Dateien nicht mehr über einen Editor befüllen und ändern sondern das ganze programmtechnisch realisieren. Ich studiere auch nebenbei Informatik und bin jetzt halt in der Frühphase der Programmierung, deshalb möchte ich mir das durch solche eigene ausgedachte Projekt erlernen.

Ich werde mir die Links auf jedenfall angucken und ich hoffe ich versteh das ansonsten mußt du mir wohl weiter helfen.

Vielen Dank für dein Mühe Th69