怎么用递归 绑定数据库 显示在treeview中做成组织结构图。

怎么用递归 绑定数据库 显示在treeview中做成组织结构图。,第1张

既然是递归,就有父节点子节点,首先数据库是这样设计的

比如机构表 :根节点 省公安厅,市公安厅是这个省公安厅的,所以ParentID为省公安厅的ID,县公安厅的ParentID为对应市公安厅的ID

下面例子是B/S树的一段代码:

//组织机构下的子机构

var clientOrgUnit = Psap.WcfProxy.CenterServiceFactory.CreateOrgUnitServiceClient()

var orgUnits = clientOrgUnit.GetOrgUnitModelList("ParentId=" + parentID)//根据父节点ID找到下面的所有子节点

clientOrgUnit.Close()

foreach (var model in orgUnits) //遍历根节点下面的机构

{

ComponentArt.Web.UI.TreeViewNode node = new ComponentArt.Web.UI.TreeViewNode()

node.Text = model.Name

node.Value = Psap.Common.Enums.ObjectType.OrgUnit + "_" + model.ID

node.Expanded = false

node.ImageUrl = _ORGUNIT_IMAGE

node.ToolTip = model.Name

//node.ExpandedImageUrl = "folder_open.gif"

node.Selectable = false

String url = String.Format("View/TreeViewUrl.aspx?parentID={0}&childType=1", Server.UrlEncode(model.ID.ToString()))

node.ContentCallbackUrl = url

TreeView1.Nodes.Add(node)

}

这段代码每次都会发送请求到TreeViewUrl.aspx,然后得到ParentID找到子节点下面的子节点。

还一种递归的方式更容易理解:

如下面代码:

/// <summary>

/// 递归的创建子节点

/// </summary>

/// <param name="node"></param>

void AddChild(Microsoft.Web.UI.WebControls.TreeNode node)

{

Microsoft.Web.UI.WebControls.TreeNode node1

string p_id = node.ID

DataSet ds = DeptBll.GetUFList("supId =" + p_id)

for (int i = 0i <ds.Tables[0].Rows.Counti++)

{

node1 = new Microsoft.Web.UI.WebControls.TreeNode()

node1.ID = ds.Tables[0].Rows[i]["deptId"].ToString()

node1.Text = ds.Tables[0].Rows[i]["deptName"].ToString()

node1.NodeData = ds.Tables[0].Rows[i]["nlevel"].ToString() + "@" + ds.Tables[0].Rows[i]["deptType"].ToString() + "@" + ds.Tables[0].Rows[i]["code"].ToString()

node.Nodes.Add(node1)

AddChild(node1)

}

}

private sub startAdd(treeview tv)

dim s as string

dim root as Node

'在这里先可以创建一个根节点

set root=tv.nodes.add(,,key,"这是根节点")

root.expand

s="select *from tab where parentid='0'"

'进行数据库查询

while(条件成立)

tv.nodes.aa(root,tvchild,key,text)

RecurrenceFun(tv,key)

'移动到下一条

wend

end sub

private sub RecurrenceFun(treeview tv,node PNode,int Pid)

dim s as string

dim Node as Node

s="select *from tab where parentid=' + Pid + '"

'进行数据库查询

while(条件成立)

set Node=tv.nodes.aa(PNode,tvchild,key,text)

RecurrenceFun(treeview tv,node,int Pid)

'移动到下一条

wend

end sub

以上是VB的代码。大概思想就是这样!

想写C++的,可是比较麻烦了,就没有写!!临时发挥,可能有不太对啊,请你原谅,同时希望对你有所帮助!!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6779860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存