树形控件绑定问题 求救!!

lishuai1030 2010-09-27 10:44:38
create table De1--一级部门
(
DId int ,
DName varchar(20)
)
go
create table De2--二级部门
(
DId int ,
DName varchar(20),
DId1 int
)
go
create table Employee--员工
(
EmpId int ,
EmpName varchar(20),
DId2 int,
DId1 int
)
go
--二级部门属于一级部门,员工可以属于二级部门,也可以直属一级部门
--直属一级部门的时候记录二级部门编号为0
--现在要帮顶到treeview上,分级别部门显示,要怎样遍历帮顶啊
...全文
91 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sisi88 2010-09-27
  • 打赏
  • 举报
回复
//将所有父节点填充到根节点下
private void GetAdmin()
{
tvbase.Controls.Clear();
user = (UserInfo)Session["LoginUser"];
IList<RoleRight> list = RoleRightManager.GetRoleRightByParentId(user.Role.RoleId, 0);
foreach (RoleRight r in list)
{
int ParentNodeId = r.Node.NodeId;
TreeNode tn = CreateNode(r.Node.DisplayName, r.Node.NodeId, "~/images/menuclose.gif");
ParentNode(ParentNodeId, tn);
tvbase.Nodes.Add(tn);
}


}
//得到所有子节点
private void ParentNode(int parentNodeId, TreeNode tueeNode)
{
user = (UserInfo)Session["LoginUser"];
IList<RoleRight> list = RoleRightManager.GetRoleRightByParentId(user.Role.RoleId, parentNodeId);

foreach (RoleRight r in list)
{
TreeNode tn = CreateNode(r.Node.DisplayName, r.Node.NodeId, "~/images/OpenTree.gif");
tueeNode.ChildNodes.Add(tn);


}
}
private TreeNode CreateNode(string desplayName, int NodeId, string imgUrl)
{
TreeNode tn = new TreeNode();
tn.Value = NodeId.ToString();
tn.Text = desplayName;
tn.ImageUrl = imgUrl.ToString();
return tn;
这是一二级手动绑定
你试试 层很多的话就用递归
-小蕾- 2010-09-27
  • 打赏
  • 举报
回复
这种情况貌似不能递归了,你还是一层一层的遍历吧,效率有点低,好在你层数不多,应该没问题
。6楼的办法
T_long 2010-09-27
  • 打赏
  • 举报
回复
递归递归
zhanglinjiang2010 2010-09-27
  • 打赏
  • 举报
回复
递归就可轻松搞定 自己去改一下

/// <summary>
/// 创建第一层节点
/// </summary>
/// <param name="userId"></param>
public void UserMenu()
{
TreeView1.Nodes.Clear();
TreeNode fatherNode = null;
foreach (SYSFUN sysfun in user.RoleInfo.List)
{
String strText = sysfun.DisplayName.ToString();
String strId = sysfun.NodeId .ToString();
if (sysfun.ParentNodeId == 0)
{
fatherNode = this.CreatTreeNode(strText, strId, "");

SerCreateTree(strId, fatherNode);

TreeView1.Nodes.Add(fatherNode);
}
}
}

/// <summary>
/// 创建一个树节点,返回一个树节点对象,参数内容是:
/// 节点名称,节点ID,链接地址,正常图标,展开后的图标
/// </summary>
private TreeNode CreatTreeNode(string strText, string strId, string strUrl)
{
TreeNode newNode = new TreeNode();
newNode.Text = strText;
newNode.Value = strId;
newNode.NavigateUrl = strUrl;
return newNode;
}

//创建第二层结点
private void SerCreateTree(string strId, TreeNode fatherNode)
{
foreach (SYSFUN sysfun in user.RoleInfo.List)
{
if (sysfun.ParentNodeId.ToString().Equals(strId))
{
String strText = sysfun.DisplayName.ToString();
String stId = sysfun.NodeId .ToString();
string nodeURL = sysfun.NodeURL;//将路径转换为在客户端可用的URL
TreeNode childNode = this.CreatTreeNode(strText, stId, nodeURL);//"Images/exp.gif"//根据节点信息,创建第二层节点
fatherNode.ChildNodes.Add(childNode);//将子节点加入到父节点中
}

}
}


快乐小子飞 2010-09-27
  • 打赏
  • 举报
回复
用递归算法,顶,赚分
米娜Rose 2010-09-27
  • 打赏
  • 举报
回复
关注!
porschev 2010-09-27
  • 打赏
  • 举报
回复
不过这几层foreach那效率低的可怕。。。

可以多等会。。。会有更好的方法。。。上面说的这方法是一定能出来。。

但那几层嵌套循环效率只能说差到家了。。。
porschev 2010-09-27
  • 打赏
  • 举报
回复
你表建的很奇怪啊。。。

new出一个treeview

查出一级部门的集合foreach。。。建节点。。添加到treeview上。。

第一个foreach中通过一级部门的ID得到二级部门的集合和直属一级部门的员工(条件是二级部门ID为0)。。。再foreach。。。建节点。。添加在一级部门节点上

第二个foreach通过二级部门的ID中再得到二级部门员工的集合(条件是二级部门ID非等于0)。。。添加到二级部门节点上
tourstar 2010-09-27
  • 打赏
  • 举报
回复
用递归来实现帮顶

62,046

社区成员

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

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

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

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