Autor Beitrag
chip777
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 26.04.10 14:01 
Hi,

ich würde gerne in ein TreeView einen Haupknoten einfügen, dass klappt mit folgendem Code auch super
ausblenden C#-Quelltext
1:
2:
TreeNode Wurzel = new TreeNode(ProjektName);
treeView1.Nodes.Add(Wurzel);


Danach würde ich gerne Unterknoten einfügen, dass hab ich so probiert:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for (int i = 0; i != dataGridView2.RowCount; i++)
            {
                if (Convert.ToString(dataGridView2[0, i].Value) != "")
                {
                    TreeNode Node = new TreeNode(Convert.ToString(dataGridView2[0, i].Value));
                    treeView1.Nodes.Add(Node);
                   
                }
            }

Leider werden das wieder normale Knoten und keine Unterknoten. Wie kann ich diese als Unterknoten des ersten Knotens definieren?


Martin
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 26.04.10 14:24 
Hallo,

das liegt daran, dass du den neu erstellen Knoten direkt dem TreeView anhängst (oberste Ebene).

Wenn du sie dem Wurzelknoten als Kindelement hinzufügen willst, dann musst du dies auch so schreiben:
ausblenden C#-Quelltext
1:
Wuzrel.Nodes.Add(Node);					


Gruß
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 26.04.10 14:28 
Vielen Dank Daniel,

ich hatte es vorher schon mit
ausblenden C#-Quelltext
1:
treeView1.Wurzel.Add(Node);					

versucht, aber das klappte nicht. und google lieferte zwar viele Ergebnise aber keine brauchbaren.

Hauptsache es läuft jetzt und nochmal danke für die schnelle Antwort.
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 26.04.10 15:19 
So, ich hab nochmal ein kleines Problem mit den Unterknoten:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//Wurzel erzeugen
            TreeNode Wurzel = new TreeNode(ProjektName);
            treeView1.Nodes.Add(Wurzel);
            //Schleife - Roboter anlegen
            for (int i = 0; i != dataGridView2.RowCount; i++)
            {
                if (Convert.ToString(dataGridView2[0, i].Value) != "")
                {
                    TreeNode RobNode = new TreeNode((Convert.ToString(dataGridView2[0, i].Value)));
                    Wurzel.Nodes.Add(RobNode);
                }
                TreeNode VorNode = new TreeNode(Convert.ToString(dataGridView2[7, i].Value));
                RobNode.Nodes.Add(VorNode);     // Hier tritt der Fehler auf

            }
            treeView1.ExpandAll();


Das Erzeugen des Wurzelknotens funktioniert, und auch die RobNodes werden erzeugt. Jetzt würde ich gerne unter meinen RobNodes noch VorNodes erstellen, diese müssten aber wie oben im Kontext gehandelt werden. Im Moment bekomme ich die Meldung das RobNode nicht vorhanden ist, was ich auch verstehen kann, da es ja in einer anderen Schleife definiert ist, wie kann ich jetzt aber die Logik meines Codes beibehalten und zusätzlich das Programm lauffähig machen.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 26.04.10 15:38 
Das RobNode ist nur innerhalb der If-Zweig verwendbar/sichtbar. Es würde ja gar nicht existieren, wenn in dataGridView2[0,i] nichts stehen würde ... wie soll dann zu nichts ein VorNode hinzugefügt werden können?

Ich vermute du willst einfach die Klammer erweitern (das sie noch zeile 12 + 13 beinhaltet).

Abgesehen davon hat dir Jürgen schon gesagt, dass Convert.ToString nicht notwendig ist, da jede Klasse über die Methode ToString() verfügt. Das ist einfach unlesbar. Des weiterem ist auf != "" vergleichen auch nicht schön.

Besser ist if (!(string.IsNullOrEmpty(dataGrdiView2[0, i].Value)))

Da fällt mir auf.. .Value ist ja wahrscheinlich schon ein string ... okay ein Object, dennoch ist .ToString() schöner.
chip777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 26.04.10 15:42 
Danke jetzt klappt es.
Ich hab die Anweisung jetzt so umgebaut das beide Nodes in einer Schleife sind, bzw. in Unterschleifen, sodass sie sich kennen. Morgen geh ich mein komplettes Programm mal durch und ersetze überall das Convert.ToString gegen (string).

Martin