C# winform 递归数据库表 生成树节点

ITArtMan 2014-02-27 01:24:54
放图:

这个数据表可以形成一个树节点,怎么用递归生成树节点。。。求指教。。谢谢
...全文
929 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roger丶Yu 2016-10-31
  • 打赏
  • 举报
回复
可以的 我之前也没想到 看了你的就会了 6666
ITArtMan 2014-02-28
  • 打赏
  • 举报
回复
搞了一晚,贴上代码。:

private DataTable dt = null;
private void Form1_Load(object sender, EventArgs e)
{
//加载数据表
dt = DB.GetTable("select deptId,parentId,deptName from dept");
dataGridView1.DataSource = dt;

BindRoot();
}
//获取根节点
private void BindRoot()
{
//从dt表中查询出parentId='ABC'的行
DataRow[] ro = dt.Select("parentId='ABC'");
foreach (DataRow dr in ro)
{
//if (dr["parentId"].ToString() == "ABC")
//{
TreeNode node = new TreeNode();
node.Tag = dr;
node.Text = dr["deptName"].ToString();
treeView1.Nodes.Add(node);
AddChild(node);
//}
}
}
//绑定子节点
private void AddChild(TreeNode node)
{
DataRow dr2 = (DataRow)node.Tag;//获取与根节点关联的数据行
string pId = dr2["deptId"].ToString();//获取根节点的deptId

//从dt表中查询出parentId=deptId的节点
DataRow[] rows = dt.Select("parentId='"+pId+"'");
if (rows.Length == 0)
return;
foreach (DataRow drow in rows) //再次遍历,添加子节点
{
TreeNode node3 = new TreeNode();
node3.Tag = drow;
node3.Text = drow["deptName"].ToString();
node.Nodes.Add(node3);
//递归
AddChild(node3);
}
}

ITArtMan 2014-02-28
  • 打赏
  • 举报
回复
引用 7 楼 infinat 的回复:
是按deptId 排序?还是按parentId递归列树? 看你说的样子应该是按deptId 与parentId的引用关系递归列树 先查找parentId = null 作为根, 1、根据parentId = null 找到对应的行,引用 函数 A ( 变量 id) 2、 函数 A ( 变量 id) { 2.1 获取deptId 2.2 查找parentId 2.3 递归应用自身 函数 A ( 变量 parentId ) }
有点思路了,谢谢。
ITArtMan 2014-02-28
  • 打赏
  • 举报
回复
引用 8 楼 a13602089932 的回复:
你的根节点是Null,数据库中的NUll和c#空值还不一样,最好给他一个默认值方便处理 public void GetTree(string pid, TreeNodeCollection tnc){ 对象 =SQLHelper.方法(pid); TreeNode node=tnc.Add(对象.dpname); GetTree(对象.dpid, node.Nodes); } 伪代码,是否看到精髓?
方便帖个代码不,我新手,搞不来。
花姑娘941 2014-02-27
  • 打赏
  • 举报
回复
你的根节点是Null,数据库中的NUll和c#空值还不一样,最好给他一个默认值方便处理 public void GetTree(string pid, TreeNodeCollection tnc){ 对象 =SQLHelper.方法(pid); TreeNode node=tnc.Add(对象.dpname); GetTree(对象.dpid, node.Nodes); } 伪代码,是否看到精髓?
infinat 2014-02-27
  • 打赏
  • 举报
回复
是按deptId 排序?还是按parentId递归列树? 看你说的样子应该是按deptId 与parentId的引用关系递归列树 先查找parentId = null 作为根, 1、根据parentId = null 找到对应的行,引用 函数 A ( 变量 id) 2、 函数 A ( 变量 id) { 2.1 获取deptId 2.2 查找parentId 2.3 递归应用自身 函数 A ( 变量 parentId ) }
ITArtMan 2014-02-27
  • 打赏
  • 举报
回复
引用 4 楼 F546445693 的回复:
本身就是一个树结构, 你要递归成什么样?
就是要把这个表生成树节点。。。不知道怎么搞。。。 如: 湖南学院 软件工程系 教务处 信息工程系 教务处
灬浪子灬 2014-02-27
  • 打赏
  • 举报
回复
引用 楼主 lyw7758258 的回复:
放图: 这个数据表可以形成一个树节点,怎么用递归生成树节点。。。求指教。。谢谢
这是一个单表上树的列子你可以看看,挺简单的 http://blog.csdn.net/rui_china/article/details/9919819
F546445693 2014-02-27
  • 打赏
  • 举报
回复
本身就是一个树结构, 你要递归成什么样?
ITArtMan 2014-02-27
  • 打赏
  • 举报
回复
谢谢,但看起来好复杂,我新手。。
ITArtMan 2014-02-27
  • 打赏
  • 举报
回复
坐等。。。。。。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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