asp.net中treeview递归绑定数据库字段

lwh3063625 2010-06-28 09:42:41
比如说我的数据库TB_myBM表中有这么几个字段
id(int自动增长的) name(varchar) varid(varchr)
1 部门 001
2 技术部 001001
3 市场部 001002
4 技术1部 001001001
5 技术2部 001001002
6 技术3部 001001003
7 市场1部 001002001
8 市场2部 001002002
9 市场3部 001002003
10 技术1部1小分部 001001001001
11 技术1部2小分部 001001001002


怎么用treeview递归树形绑定达到下面的效果:
部门
技术部
技术1部
技术1部1小分部
技术1部2小分部
技术2部
技术3部
市场部
市场1部
市场2部
市场3部

麻烦各位说清楚点带上后台代码,在此谢谢
...全文
1643 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我也不会啊
hookyzlr 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;……
[/Quote]
这个方法可行,也可以现出来父节点,点击父节点在显示子节点。
ganendexin2010 2010-10-22
  • 打赏
  • 举报
回复
楼主 我也想要啊 我是新手 也不会啊
juxianxiang 2010-08-19
  • 打赏
  • 举报
回复
总是头疼这个,但是总是不想弄懂,很烦人,学习。
nitaiyoucala 2010-08-19
  • 打赏
  • 举报
回复
叫我qq我发给你个例子
zhangdoublepan 2010-08-19
  • 打赏
  • 举报
回复
简单点的其实就是从数据库中找出父节点,然后再遍历父节点的foreach中遍历子节点,添加到树中
huangwenquan123 2010-08-19
  • 打赏
  • 举报
回复
简单点的其实就是从数据库中找出父节点,然后再遍历父节点的foreach中遍历子节点,添加到树中
wh68108597 2010-07-26
  • 打赏
  • 举报
回复
有点模糊啊
O爱咋咋地O 2010-07-26
  • 打赏
  • 举报
回复
 private void Bind(TreeNode parent)
{
DataTable dt = get();
if (parent != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["d_id"].ToString().IndexOf(parent.Value) == 0&&!dt.Rows[i]["d_id"].ToString().Equals(parent.Value)&&dt.Rows[i]["d_id"].ToString().Length==parent.Value.Length+3)
{
TreeNode tn=new TreeNode();

tn.Text=dt.Rows[i]["d_name"].ToString();
tn.Value = dt.Rows[i]["d_id"].ToString();
parent.ChildNodes.Add(tn);
Bind(tn);
}
}
}
else
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["d_id"].ToString().Length == 3)
{
TreeNode tn = new TreeNode();
tn.Text = dt.Rows[i]["d_name"].ToString();
tn.Value =dt.Rows[i]["d_id"].ToString();
TreeView1.Nodes.Add(tn);
Bind(tn);
}
}
}

}

Bind(null);
wwfgu00ing 2010-07-24
  • 打赏
  • 举报
回复

private void bind()
{
string temp = "<ul class='simpleTree'>";
DataSet ds = db.getDs();
DataRow[] dr = ds.Tables[0].Select("department_code='001'");
Response.Write("为了测试,当前总行数为:" + "<a style='color=red'>"+ds.Tables[0].Rows.Count+"</a><div style='height=10px;background-color:white'></div>");

foreach (DataRow r in dr)
{
string name = r["department_name"].ToString();
string code = r["department_code"].ToString();
temp += "<li class='root' id='li1' name='" + name + "'><span id='s1' oncontextmenu = showMenu('" + i + "') name='" + name + "' class='" + code + "'>" + name + "</span>";
if (AddChildNode(ds, code) != "" || AddChildNode(ds, code)!=null)
{
temp += "<ul>" + AddChildNode(ds, code);
ds.Tables[0].Rows.Remove(r);

}

}


temp += "</ul>";

mytree.InnerHtml = temp;

}

public string AddChildNode(DataSet ds, string department_code)
{
i++;

string a = "";
DataRow[] dr = ds.Tables[0].Select("parent_department='" + department_code + "'");
int count = dr.Length;

if (dr != null)
{

foreach (DataRow r in dr)
{


string code = r["department_code"].ToString();

string name = r["department_name"].ToString();
a += "<li id='li" + i + "' class='" + code + "' name='" + name + "'><span id='s" + i + "' oncontextmenu = showMenu('" + i + "') name='" + name + "' class='" + code + "'>" + name + "</span></li>";
if (AddChildNode(ds, code) == "" || AddChildNode(ds, code) == null)
{

}
else
{
a += "<ul>" + AddChildNode(ds, code) + "</ul>";

}


}

}

return a;
}


pan123799403 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lianjianguo888 的回复:]
怎么解决啊,好像没有说清楚啊!
[/Quote]
对啊
链接将 2010-07-23
  • 打赏
  • 举报
回复
怎么解决啊,好像没有说清楚啊!
luoxj_win 2010-06-29
  • 打赏
  • 举报
回复
间隔有问题,我弄了下!
SQL Result
NodeID NodeName NodeUrl ParentNodeID
----------- ---------- -------------------- ------------
1 主面板 main.aspx 0
2 服务器信息 serverList.aspx 0
3 用户信息 usersList.aspx 0
4 发布服务 addServer.aspx 2
5 增加用户 addUser.aspx 3
(5 行受影响)
---------------------------------------------------------
luoxj_win 2010-06-29
  • 打赏
  • 举报
回复
SQL Result
NodeID NodeName NodeUrl ParentNodeID
----------- ---------- -------------------- ------------
1 主面板 main.aspx 0
2 服务器信息 serverList.aspx 0
3 用户信息 usersList.aspx 0
4 发布服务 addServer.aspx 2
5 增加用户 addUser.aspx 3
(5 行受影响)
---------------------------------------------------------

/// <summary>
/// 生成树形控件
/// </summary>
private void CreateTree()
{
//先获取ParentNodeID为0的数据对象集合,这里称为父节点
//GetFaterNodes();是获取父节点的方法 [slelec * from NodeLink where ParentNodeID=0]
List<NodeLink> nodesParent = ServerInfoManage.GetFaterNodes();//楼主,对比上面的数据列

foreach (NodeLink PNode in nodesParent)//遍历父节点集合
{
TreeNode PTree = new TreeNode();
PTree.Text = PNode.NodeName;
PTree.NavigateUrl = PNode.NodeUrl;

//获取父节点下的子节点
//GetSubNodesByNID方法是获取子节点的方法[select * from NodeLink where NodeID=@PNode.NodeID]
List<NodeLink> subNodes = ServerInfoManage.GetSubNodesByNID(PNode.NodeID);//注意参数

foreach (NodeLink subNode in subNodes)//遍历子节点集合,并添加到父节点
{
TreeNode subTree = new TreeNode();
subTree.Text = subNode.NodeName;
subTree.NavigateUrl = subNode.NodeUrl;
PTree.ChildNodes.Add(subTree);
}
tvUrls.Nodes.Add(PTree);//把父节点添加到树形控件[tvUrls]中
}
}
lester19872007 2010-06-29
  • 打赏
  • 举报
回复
其实递归绑定很简单,想你这样的数据没有必要再前台做,可以在数据库中先把数据递归了 直接返回给前台调用就好了!



WITH locs(ArticleReplyId,ParentId,ParentUserName,UserId,ArticleTitle,loclevel)
AS
(
SELECT ArticleReplyId,ParentId,ParentUserName,UserId,ArticleTitle,0 AS loclevel FROM ArticleReply_tb
WHERE ParentId is null
UNION ALL
SELECT l.ArticleReplyId,l.ParentId,l.ParentUserName,l.UserId,l.ArticleTitle,loclevel+1 FROM ArticleReply_tb l
INNER JOIN locs p ON l.ParentId=p.UserId
)

SELECT * FROM locs

这个是我以前写的递归取数据的方法, 你可以更具你自己的表修改,只适用于SQL SERVER2005或者以上版本!
wuyq11 2010-06-28
  • 打赏
  • 举报
回复
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag=drv["NodeId"].ToString();
tmpNd.Text=drv["NodeName"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
}
}
charindex和根据深度判断varid长度

62,050

社区成员

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

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

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

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