2016-12-04 4 views
0

Wie Elemente in der Strukturansicht hinzugefügt werden? Für eine DataRow enthält sie das übergeordnete Element als eine Spalte und die restlichen Spalten als untergeordnete Knoten. Zeilenstruktur ist wie folgt.TreeView mit DataRow füllen

Tabelle - Person

column1 - SSN (text) 

column2 - Name (text) 

column3 - Age (int) 

column4 - country (text) 

column5 - height (double) 

Wenn Sie auf/erweitern Namen, es sieht aus wie unten.

(-) Name des

- Age 

- Country 

- Height 

Jede Zeile wird wie oben TreeView angezeigt. Wie wird das in TreeView aufgefüllt? 3 Spalten in der Zeile sind Kindknoten der Spalte Name (Elternknoten). Ich verwende nur C# und .Net 4.5 und Winform-Anwendung. Ich habe bereits eine Verbindung zur Datenbank hergestellt. Sie müssen TreeView nur mit DataRowCollection füllen.

Hier ist Beispielcode versucht, die obige Idee zu erreichen.

private void FillDataInTree(DataRowCollection rows) 
    { 
     foreach(DataRow r in rows) 
     { 
      TreeNode[] cNodes = new TreeNode[3]; 
      for(int i=0; i<3; i++) 
      { 
       cNodes[i].Text = r[i + 1].ToString(); 
      } 
      TreeNode node = new TreeNode(r["pName"].ToString(), cNodes); 
      playerTreeView.Nodes.Add(node); 
      //playerTreeView.Nodes 
     } 
    } 
+0

Können Sie uns zeigen, was Sie versucht haben? – Alexei

+0

Und die SSN-Spalte? – Steve

+0

Die SSN-Spalte ist der Primärschlüssel und wird in TreeView-Daten nicht angezeigt. – Francesco

Antwort

0

Die Schleife sollte so etwas wie dieses

foreach (DataRow row in rows) 
{ 
    TreeNode node = playerTreeView.Nodes.Add(row.Field<string>("SSN"), row.Field<string>("Name")); 
    node.Nodes.Add(row.Field<int>("Age").ToString()); 
    node.Nodes.Add(row.Field<string>("Country")); 
    .... 
} 
0

Verwenden .Nodes.Add() erstellen Unterknoten Ihres Namens-Knoten sein: mit @Steve

private void FillDataInTree(DataRowCollection rows) 
{ 
    foreach(DataRow r in rows) 
    { 
     TreeNode node = new TreeNode(r["pName"].ToString()); 
     playerTreeView.Nodes.Add(node); 

     for(int i = 0; i < 3; i++) 
      node.Nodes.Add(r[i + 1].ToString()); 
    } 
} 

Und ich damit einverstanden, dass das Abrufen Felder nach Namen war besser als nach Index.

+0

@Francesco, hast du das versucht? Hat es dein Problem gelöst? –