表结构
id name pid
0 root -1
1 tom 0
....
public void ShowTree()//利用dataview ,更高效,更省资源,读一次数据库即可
{
Maticsoft.BLL.TREE tree = new Maticsoft.BLL.TREE();
DataSet ds = new DataSet();
DataView dv = new DataView(); //
TreeNode node = new TreeNode();
string where;
//DataView dv = new DataView(ds.Tables[0]);
ds = tree.GetList("1=1");//读取要分级的表的所有数据
dv = ds.Tables[0].DefaultView;
//添加根节点
where = "pid=-1";
dv.RowFilter = where;
node.Name = dv[0][0].ToString();//id
node.Text = dv[0][1].ToString();//name
treeView1.Nodes.Add(node);
where = "pid=" + node.Name;
while(0!=dv.Count)
{
dv.RowFilter = where;//筛选下一级节点
where = " ";//3个空格,免得length-3 不够减
foreach (DataRowView row in dv)
{
node = treeView1.Nodes.Find(row["pid"].ToString(),true)[0];//找父节点
where = where + " pid=" + row["id"].ToString()+" or ";//查找下一级节点的条件
node.Nodes.Add(row[0].ToString(), row[1].ToString());//添加子节点
}
where = where.Substring(0, where.Length - 3);//去掉最后一个or
}