私のデータベーステーブルの構造は、このようなものです:バインドC#WindowsフォームのTreeViewデータベース
(これは現在のテーブルのIDです)ID(主キー)、タイトル(NVARCHAR)、のParentID
と最初のノード(ルート)の 'ParentID'は評価されます= -1 このデータをメモリにロードしました(たとえばクラスのリストなど) TreeViewにループなどのアイテムを追加するにはどうすればよいですか?
私のデータベーステーブルの構造は、このようなものです:バインドC#WindowsフォームのTreeViewデータベース
(これは現在のテーブルのIDです)ID(主キー)、タイトル(NVARCHAR)、のParentID
と最初のノード(ルート)の 'ParentID'は評価されます= -1 このデータをメモリにロードしました(たとえばクラスのリストなど) TreeViewにループなどのアイテムを追加するにはどうすればよいですか?
私はこのコードを書いたのですか?
データをループオーバーし、表示するデータを含む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();
}
です:
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を使用しています。
正常に動作しますか? (あなたはちょうどそれが良いスタイルであるかどうかを知りたがっていますか)、それともエラーがありますか? – Justin
それは正しく動作します。 – Shahin
このようなメソッドには非常に欠陥があります。単一のクエリ結果を反復処理するのではなく、データベースクエリで再帰関数を使用します。 – too