2011-03-03 12 views
0
から

私のデータベーステーブルの構造は、このようなものです:バインドC#WindowsフォームのTreeViewデータベース

ID(主キー)、タイトル(NVARCHAR)、のParentID

(これは現在のテーブルのIDです)

と最初のノード(ルート)の 'ParentID'は評価されます= -1 このデータをメモリにロードしました(たとえばクラスのリストなど) TreeViewにループなどのアイテムを追加するにはどうすればよいですか?

答えて

0

私はこのコードを書いたのですか?

+1

正常に動作しますか? (あなたはちょうどそれが良いスタイルであるかどうかを知りたがっていますか)、それともエラーがありますか? – Justin

+0

それは正しく動作します。 – Shahin

+0

このようなメソッドには非常に欠陥があります。単一のクエリ結果を反復処理するのではなく、データベースクエリで再帰関数を使用します。 – too

0

データをループオーバーし、表示するデータを含むTreeNodesを作成できます。また、必要に応じて、ノードを親にすることもできます。

次に、ツリービューのノードコレクションにツリー表示を追加できます。それはどのように

private void Heading_Load(object sender, System.EventArgs e) 
{ 
    InsertNodes(null, 0); 
} 
private void InsertNodes(TreeNode n, int hdrID) 
{ 
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Acounting;Integrated Security=True;Pooling=False"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("SELECT hdrid,title FROM [Heading] WHERE ParentID=" + hdrID, con); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    while (rdr.Read()) { 
     TreeNode t = new TreeNode(rdr("title").ToString()); 
     InsertNodes(t, Convert.ToInt16(rdr("hdrID").ToString())); 
     if (n == null) { 
      trvHeader.Nodes.Add(t); 
     } else { 
      n.Nodes.Add(t); 
     } 
    } 
    rdr.Close(); 
     } 

です:

1

ParentIDでデータを注文すると、最初の結果はルート1(-1)になります。そして、uは以前のすべてのノードがツリー内にすでに存在すること、および一意のキー(ID)によってそれらを見つけることを確認してくださいどのように

 if (ParentID == -1) 
     { 
      treeView1.Nodes.Add(ID, Title); 
     } 
     else 
     { 
      TreeNode tn = treeView1.Nodes.Find(ID, true)[0]; 
      tn.Nodes.Add(ID, Title); 
     } 

のthatsを使用しています。