我的这个和你的不太一样,人员是在另一个表里的,向你的直接象下面的结构,把人员的ParentID设为他的父节点的ID就可以了:
部门信息表:
DepID     ParentID    Name
100001     0          技术部
100002     0          财务部
100003    100001      编码组
100004    100001      测试组建表的过程:需要先声明一个 DataView dv
public void InitTree(TreeNodeCollection  Nds,string parentId,DataSet ds,string TableName)
{   //从根节点开始递归调用显示子树 
dv=new DataView();
TreeNode  tmpNd;
string intId;
dv.Table=ds.Tables[TableName];
dv.RowFilter="ParentId="  + parentId ;
foreach(DataRowView drv in dv)
{   //递归算法从这里开始。
tmpNd=new TreeNode();
tmpNd.Tag =drv[0].ToString();  //节点ID
tmpNd.Text=drv[2].ToString();  //节点名称
Nds.Add(tmpNd);
intId=drv[1].ToString();       //节点的父节点
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName);
}
}
四个参数:TreeNodeCollection Nds就是你要生成的树,例如:treeView1
ParentID 父节点名称,初始时为0 后面两个我就不说了。
另外,在添加节点时判断是否已有相同名称的节点存在可以用递归:
public void GetAllNodeText(TreeNodeCollection tnc,string txt)
{  
foreach (TreeNode node in tnc)
{
if( node.Nodes.Count != 0 )
GetAllNodeText(node.Nodes,txt);
}
}
我的添加节点时只判断同级节点是否有重名的:
public bool AddNode(TreeNode SelNode,string ID,string txt)
{
int exist = 0;
TreeNode NewNode = new TreeNode();
NewNode.Text = txt;
NewNode.Tag = ID;
foreach (TreeNode tnc in SelNode.Nodes )
{
if (tnc.Text == txt)
{
exist = 1;
return false;
}

}
if (exist != 1)
{
SelNode.Nodes.Add(NewNode);
return true;
}
else
{
return false;
}
}
删除就很简单了
public bool DeleteNode(TreeNode DelNode)
{
if ( DelNode.Nodes.Count == 0)
{
DelNode.Remove();
return true;
}
else
{
return true;
}
}以上是winform下的,web应用下的你要先装上web下的treeView控件,实现方法查不多,主要是类型不一样,而且webTreeView1在添加和删除节点时,由于没有selectedNode的概念,所以要根据selectedIndex来遍历树查找节点,然后添加或删除,代码太多,就不贴上来了。
这些你可以作在一个类下,在前台界面引用,然后使用里面的方法。

解决方案 »

  1.   

    在web下,我是使用一个全局静态变量来保存selectedIndex
    string static CurrentNodeIndex ;
    CurrentNodeIndex =  TreeView1.SelectedNodeIndex;
    另:上面的根据selectedIndex来遍历树查找节点,错了,应该是SelectNodeIndex
      

  2.   

    还是有问题啊,对了,还有个问题,我用DATAVIEW筛选了记录后,我怎么把筛选的记录副到一个字符串上去啊,
      

  3.   

    http://search.csdn.net/expert/topic/52/5202/2003/3/13/1525202.htm