比如机构表 :根节点 省公安厅,市公安厅是这个省公安厅的,所以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++的,可是比较麻烦了,就没有写!!临时发挥,可能有不太对啊,请你原谅,同时希望对你有所帮助!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)