系统中机构管理的树如何递归建立?

walkghost 2008-06-24 01:53:51

数据库结构:
PlaceInfo:
PlaceID, nvarchar
PlaceName, nvarchar
ParentPlaceID nvarchar
示例:
1000------一层
|---100001--二层
| |-----10000101--三层
| |-----10000102--三层
|
|---100002--二层
每增加一层机构,机构编号增加两位,每层机构的编号由01-99。

在用户登录的时候判断用户所在的机构(用户表里面有用户所属机构的字段)和用户类型。如果用户是管理员,就查询出他所属的机构编号和所有他的下属机构的编号。然后用这些机构名称动态的构建树的节点,当用户点击该节点时,右面框架的页面跳转到机构管理页面并把用户所点击的节点的机构编号传递过去。
问题出来了:

如果三层机构的话,递归建树效率应该还凑合。可是机构层数要是稍微再多一些。估计效率就太慢了。有没有更好的方法?
把用户登录的时候获得的一系列机构编号保存在何处?写一个类?还是保存在其他的数据结构中?如何递归构造?
...全文
111 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkghost 2008-06-25
  • 打赏
  • 举报
回复
got it。。。THS
zzzzhaojun 2008-06-25
  • 打赏
  • 举报
回复
PlaceID, nvarchar //机构信息ID
PlaceName, nvarchar //机构信息
ParentPlaceID nvarchar //机构信息的父节点

DataSet ds=new DataSet();//全局
用Select 语句读出所有的,Fill(ds);//略
主要:
必须先执行下面方法:(myTreeView,就是你的树控件的ID)
如果是超用户:
AddNode("最高层父节点值", (Microsoft.Web.UI.WebControls.TreeNode)null, myTreeView);
一般用户:
AddNode("他的机构信息ID", (Microsoft.Web.UI.WebControls.TreeNode)null, myTreeView);

/// <summary>
/// 添加树形控件节点
/// <param name="ParentID">父节点ID</param>
/// <param name="pNode">当前节点</param>
/// <param name="myTreeView">树形控件</param>
/// </summary>
protected void AddNode(string ParentKey, Microsoft.Web.UI.WebControls.TreeNode pNode, TreeView myTreeView)
{

DataView dvTree = new DataView(ds.Tables[0]);
dvTree.RowFilter = "[ParentPlaceID] = " + ParentKey; //过滤ParentID,得到所有子节点
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
Node.Text = Row["PlaceName"].ToString().Trim();
myTreeView.Nodes.Add(Node);
Node.Expanded = true;
Node.Value = Row["PlaceID"].ToString().Trim();
Node.SelectAction = TreeNodeSelectAction.Select;
AddNode(Row["PlaceID"].ToString(), Node, myTreeView); //递归调用生成节点
}
else
{
Node.Text = Row["PlaceName"].ToString().Trim();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
Node.Value = Row["PlaceID"].ToString().Trim();
Node.SelectAction = TreeNodeSelectAction.Select;
AddNode(Row["PlaceID"].ToString(), Node, myTreeView); //递归生成节点
}
}
}
walkghost 2008-06-25
  • 打赏
  • 举报
回复
那用户N多怎么办?
jerry_yuan 2008-06-25
  • 打赏
  • 举报
回复
给用户表添加个字段存放该用户树的xml或每用户生成一个树的xml
walkghost 2008-06-25
  • 打赏
  • 举报
回复
UPUPUPUPUP,急啊郁闷
walkghost 2008-06-25
  • 打赏
  • 举报
回复
UPUPUPUIPUPUPUPO
正宗老冉 2008-06-24
  • 打赏
  • 举报
回复
XmlNode
walkghost 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 caicai_45 的回复:]
自己一次性把PlaceInfo的所有数据取出来,然后在前台用递归实现。

简单的话可以用Tree的控件,生成XmlNode就可以了。

至于具体的PlaceInfo的所有数据取出来放到什么地方,讲究就比较多了。 可以是缓存。
[/Quote]
除了缓存呢?
caicai_45 2008-06-24
  • 打赏
  • 举报
回复
自己一次性把PlaceInfo的所有数据取出来,然后在前台用递归实现。

简单的话可以用Tree的控件,生成XmlNode就可以了。

至于具体的PlaceInfo的所有数据取出来放到什么地方,讲究就比较多了。 可以是缓存。
liyin_liu 2008-06-24
  • 打赏
  • 举报
回复
d i n g
walkghost 2008-06-24
  • 打赏
  • 举报
回复
晕,只有等晚上了。。。。
大自然D使者 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cooolchen 的回复:]
占个位置,学习一下。。。。。。。。。。。
[/Quote]
walkghost 2008-06-24
  • 打赏
  • 举报
回复
这帖子沉了?
walkghost 2008-06-24
  • 打赏
  • 举报
回复
要么就动态的建一个XML文件,然后让树从web.sitemap里面读?
cooolchen 2008-06-24
  • 打赏
  • 举报
回复
占个位置,学习一下。。。。。。。。。。。
walkghost 2008-06-24
  • 打赏
  • 举报
回复
帖子示例中:¦,这些字符是这个论坛系统自己转换的,不知道是什么bug。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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