日期:2014-05-18  浏览次数:20977 次

treeview多层树加载
从数据库里读出DATATABLE,里边有一个项是父节点ID,如何根据这个父节点ID把数据库里的树形结构对应到treeview里,
关键是有很多层,每层都.nodes[i].add(tn)的话就得N个.node[].node[].node[],有没有更好的方法?

------解决方案--------------------
http://www.cnblogs.com/SunYu/archive/2010/04/29/1724367.html
------解决方案--------------------
探讨

http://www.cnblogs.com/SunYu/archive/2010/04/29/1724367.html

------解决方案--------------------
private void bindTreeView1()
{
string sql = "select * from dm_category";
DataTable dt = db.ExecuteDataTable(sql, CommandType.Text, null);
DataRow[] dr = dt.Select("parent_id is null");
for (int i = 0; i < dr.Length; i++)
{
TreeNode tn = new TreeNode();
tn.Text = dr[i]["category_name"].ToString();
tn.Tag = dr[i]["id"].ToString();
FillTree(tn, dt);
treeView1.Nodes.Add(tn);
}
}

private void FillTree(TreeNode node, DataTable dt)
{
DataRow[] drr = dt.Select("parent_id='" + node.Tag.ToString() + "'");
if (drr.Length > 0)
{
for (int i = 0; i < drr.Length; i++)
{
TreeNode tnn = new TreeNode();
tnn.Text = drr[i]["category_name"].ToString();
tnn.Tag = drr[i]["id"].ToString();
if (drr[i]["parent_id"].ToString() == node.Tag.ToString())
{
FillTree(tnn, dt);
}
node.Nodes.Add(tnn);
}
}
}

------解决方案--------------------
刚好,不妨试看http://topic.csdn.net/u/20120717/19/cea2499e-8a49-412f-8897-6b89d92047bf.html
------解决方案--------------------
递归咯,写一个遍历的方法,自己套自己。好像这类问题都是用递归最方便吧