怎样把数据库中的内容显示在treeview 中?

lingyunfeipu 2003-08-12 02:31:59
我有表 aa
字段:
id(部门代码) bmmc (名称) bmjb(部门级别) parentid(父级)

1 a 1 0
2 b 1 0
3 aa 2 1
4 aaa 3 3
5 aaaa 4 4

我要实现
A
AA
AAA
AAAA
B
并且层可以N层
怎样用递归编程?

我的信箱:lingyunfeipu@yahoo.com.cn
可否给一个例子
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
map1827 2003-09-09
  • 打赏
  • 举报
回复
up
雪狼1234567 2003-08-12
  • 打赏
  • 举报
回复
public void CreateNodesOfParent(string iParent,TreeNode pNode)
{


DataView dvwData = new DataView(this.dt.Tables[0]);
if (iParent == null)
{
dvwData.RowFilter = "[ParentID] is null";
}
else
{
dvwData.RowFilter = "[ParentID] = " +"'"+ iParent+"'";
}


foreach(DataRowView Row in dvwData)
{
// Call Stack !
if(pNode == null)
{
TreeNode zNode = this.treeView1.Nodes.Add(Row["DeptName"].ToString());
zNode.Tag = Row["DeptID"].ToString();
CreateNodesOfParent((Row["DeptID"].ToString()),zNode);
}
else
{
TreeNode zNode = pNode.Nodes.Add(Row["DeptName"].ToString());
zNode.Tag = Row["DeptID"].ToString();
CreateNodesOfParent((Row["DeptID"].ToString()),zNode);
}

}
}
public void IniTree()
{
this.treeView1.BeginUpdate();
CreateNodesOfParent(null,0);
this.treeView1.ExpandAll();
this.treeView1.EndUpdate();
}
dahuzizyd 2003-08-12
  • 打赏
  • 举报
回复
其实是一样的,呵呵。
xiangzionest 2003-08-12
  • 打赏
  • 举报
回复
我有一个例子,不过我的例子中有一个总的root,然后实现递归调用。可以吗?
private void CreateTreeNode(TreeNodeCollection newNodes,int parentID,DataSet ds)
{
try
{
DataView dv=new DataView();
dv.Table =ds.Tables["OrgInfo"];
dv.RowFilter="UpOrgID="+parentID.ToString();
foreach(DataRowView drv in dv)//循环遍历子组织,合并到记录中
{
TreeNode tmpNd=new TreeNode();
int id=Convert.ToInt32(drv["OrgID"]);
tmpNd.ID=id.ToString();
tmpNd.Text=drv["OrgName"].ToString();

newNodes.Add(tmpNd);
CreateTreeNode(newNodes[newNodes.Count-1].Nodes,id,ds);//递归调用创建子组织
}
}
catch{}
}

我没有用部门级别字段,OrgID为组织ID,UpOrgID为父组织ID调用时CreateTreeNode(Treeview1.Nodes,UpOrgID,dsOrg);
dahuzizyd 2003-08-12
  • 打赏
  • 举报
回复
建树:
public void InitTree(TreeNodeCollection Nds,string parentId,DataTable dt)
{
dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=dt;
dv.RowFilter="ParentId=" + parentId ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag =drv[0].ToString();
tmpNd.Text=drv[2].ToString();
Nds.Add(tmpNd);
intId=drv[1].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName);
}
}
遍历树:
public void GetAllNodeText(TreeNodeCollection tnc,string txt)
{
foreach (TreeNode node in tnc)
{
if( node.Nodes.Count != 0 )
GetAllNodeText(node.Nodes,txt);
}
}
调用:
myTree.InitTree(TreeView1.Nodes,"0",dataTable);

注意这个:dv.RowFilter="ParentId=" + parentId ;ParentId就是父节点的ID,这里是字段名,最后要和你的对应上。
我的表结构:
id ParentID name
顾君彦 2003-08-12
  • 打赏
  • 举报
回复
无需使用递归,使用简单的算法即可解决.
使用一个hash表,记录tree节点即可.
选创建每个节点,
再进行遍例节点,在hash表中查找父节点.父子关系处理完后,把首节点加到treeview上即可.
效率会比递归高.

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧