SQL中的数据 与 树 的问题,求高人指点?谢谢!

junoveia 2014-09-19 09:10:11
表: member

编号 姓名 父级编号 位置 性别 年龄
101001 张三 男 22
101002 李四 101001 左 女 33
101003 王五 101001 右 男 55
101004 赵六 101002 左 女 66
101005 张那 101002 右 男 12
101006 李玉青 101003 左 女 23
101007 赵几凡 101005 左 男 25

这个表里的数据 在asp.net 中用 C# 如何实现二叉树的结构,具体是什么来做,最好有源码,我是新手,在此我先谢谢各位高人指点?希望高人不吝赐教!!!
...全文
475 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
番茄并不番 2016-07-05
  • 打赏
  • 举报
回复
111111111111111111111111111111111111111111
wuhg_2286783337 2014-09-20
  • 打赏
  • 举报
回复
使用TreeView控件实现树形系统导航 //加载根节点开始递归调用填充TreeView树形控件 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //获取数据连接语句,并创建数据库连接对象 myConn = DBClass.GetConnection(); CreateDataSet(); InitTree(TreeView1.Nodes, "0"); } } //选择数据库数据建立数据集对象返回数据 public DataSet CreateDataSet() { query = "select * from tbTree"; myAdapter = new SqlDataAdapter(query, myConn); data = new DataSet(); myAdapter.Fill(data, "tree"); return data; } //从DataSet中取数据建树 //从根节点开始递归调用显示子树 public void InitTree(TreeNodeCollection Nds, string parentId) { TreeNode NewNode; //data为存储建树数据信息的数据集 //用父节点进行筛选数据集中信息 DataRow[] rows = data.Tables[0].Select("parent_Id='" + parentId + "'"); foreach (DataRow row in rows) { NewNode = new TreeNode(row["title"].ToString(), //设置父节点 row["Files_Id"].ToString(), "images/1.gif", row["NavigateUrl"].ToString(), ""); Nds.Add(NewNode); InitTree(NewNode.ChildNodes, row["Files_Id"].ToString());//添加子节点 }//CodeGo.net/ } //点击节点跳转到指定页面 protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e) { int nodeId = Convert.ToInt32(TreeView1.SelectedValue);//获取TreeView控件选择的值 string url = DBClass.GetUrl(nodeId);//获取指定地址 Response.Redirect(url.ToString());//转到指定页 } //从数据库中获取控件中某个节点的关联地址 public static string GetUrl(int filesId) { //获得url地址 SqlConnection myConnection = GetConnection(); SqlCommand myCommand = new SqlCommand("GetUrl", myConnection); myCommand.CommandType = CommandType.StoredProcedure; //添加参数 SqlParameter FilsesId = new SqlParameter("@FilesId", SqlDbType.Int, 4); FilsesId.Value = filesId; myCommand.Parameters.Add(FilsesId); //添加参数 SqlParameter Url = new SqlParameter("@Url", SqlDbType.NVarChar, 100); Url.Direction = ParameterDirection.Output; myCommand.Parameters.Add(Url); //执行存储过程 myConnection.Open(); myCommand.ExecuteNonQuery(); string url = Url.Value.ToString(); myCommand.Dispose(); myConnection.Dispose(); return url; }
我叫小菜菜 2014-09-19
  • 打赏
  • 举报
回复
引用 1 楼 junoveia 的回复:
这是像这个图上的一样,如何实现啊?
select distinct *
from member 
start with 父级编号 in(101002)  --李四
connect by prior 编号=父级编号;
这样就可以递归查询到所有李四那个分支(包括李四)的数据。 在程序代码中,通过:

DataTable dtAll=上面查询的结果;

DataRow[] drrArr = dtAll.Select("父级编号='李四'");   
foreach (DataRow dr in drrArr)
{
  这里的dr将得到李四分支下的左右两个结点的数据
}
上面使用递归查询,一次性查询了整棵树的数据。也可以每次展开结点后再查询。 这是数据逻辑层的内容。 界面显示部分(UI),现成的可以使用各种tree控件,但是要实现图像版块显示,只能找一个符合你审美观和需求的第三方控件了,或者自己自定义控件。 无论你使用什么类型的控件,数据部分都是这样的,怎么改都是大同小异。
wanghui0380 2014-09-19
  • 打赏
  • 举报
回复
额,这东西现成滴控件一堆,addflow,flowchart,ilog dairgm。如果是web滴更多,我就不提了 如果是非要自己做,暂时就先别考虑绘图,暂时先考虑把数据转换成grahpml或者vml,然后在考虑开发一个显示granphml滴带交互滴通用控件
truediego 2014-09-19
  • 打赏
  • 举报
回复
我觉得你迷失在 data - view之间了 你的数据库中的数据,只是原始数据 你要先组织成 树结构的数据 (方便处理)------ 方法的话,楼上各楼都给出了 然后你用这个方便处理的数据(树结构),再去画图 --- 最简单的方法就是想象着你手动画这个图怎么画的,程序就怎么写(循环,递归随意) 数据库数据 ---> 【整理】 ---> 树状结构数据 -----> 【遍历】 ---> 画图
liuxiuming 2014-09-19
  • 打赏
  • 举报
回复
桉闰给的数据源的逻辑不对。。。
junoveia 2014-09-19
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
随便给你搜了一个,其它的你自己搜索一下:http://www.haolizi.net/example/view_734.html 这类控件开发(假设要求达到商用的稳定程度和功能要求的话)超过了csdn上99.9%的人员的能力,所以找现成的开源控件比较好。 但是你到底是读取树形数据结构有问题?还是不会使用某种控件?你应该真正问出具体问题。不要人家告诉了这个答案,你又说人家没搞懂的你的问题,你问的是另一个。
大神您好:可能是我表达的不清楚,我的目的是想 通过C# 来实现像二叉树一样 只有左和右两个子节点的树,然后用图型的形式显示出来,那个表是给的数据源。我不知道要怎么做,从何做起。很迷茫。。。
於黾 2014-09-19
  • 打赏
  • 举报
回复
sp大神说的很对,CSDN里99.9%的人都做不了 有能力做这个的,也没有几个像sp大神一样有闲工夫跑这教学生来
於黾 2014-09-19
  • 打赏
  • 举报
回复
所以我说,想完全实现你的图,需要自己画啊 如果你完全不会画,还是老老实实用vs自带的控件,或找个第三方控件吧 这些东西都是说说简单,做起来难如登天
junoveia 2014-09-19
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
完全实现你画的这个图,你只能自己画 如果只是实现结构 用treeview就可以
treeview实现的是左侧的,我现在要网络图的形式,你知道怎么画吗?
引用 14 楼 truediego 的回复:
1. 先生成那个树结构 2. 生成一个Panel 3. 根据树结构的层次,节点数,算出Panel的宽高 4. 遍历树结构,开画 (1) 从Panel. CreateGraphics 出一个绘图实例来 (2) 根据当前节点该在的位置, DrawRectangle, FillRectangle, DrawText, DrawLine之类的 没有现成的控件可以实现这个图,估计你只想确认这句话而已
现在是有这样的数据表,问题是想实现那个组织结构图,不知道要怎么来画出来,您有这方面的资料吗?
  • 打赏
  • 举报
回复
随便给你搜了一个,其它的你自己搜索一下:http://www.haolizi.net/example/view_734.html 这类控件开发(假设要求达到商用的稳定程度和功能要求的话)超过了csdn上99.9%的人员的能力,所以找现成的开源控件比较好。 但是你到底是读取树形数据结构有问题?还是不会使用某种控件?你应该真正问出具体问题。不要人家告诉了这个答案,你又说人家没搞懂的你的问题,你问的是另一个。
truediego 2014-09-19
  • 打赏
  • 举报
回复
1. 先生成那个树结构 2. 生成一个Panel 3. 根据树结构的层次,节点数,算出Panel的宽高 4. 遍历树结构,开画 (1) 从Panel. CreateGraphics 出一个绘图实例来 (2) 根据当前节点该在的位置, DrawRectangle, FillRectangle, DrawText, DrawLine之类的 没有现成的控件可以实现这个图,估计你只想确认这句话而已
  • 打赏
  • 举报
回复
引用 9 楼 junoveia 的回复:
主要是那个图是怎么画出来的,图有了在用递归。哪位知道那个图要如何画?
晕死,又改成问如何画图了。 如果问画图问题,你贴出关系数据库干嘛啊?你应该直接问 TreeNode(或者 TreeView)控件如何添加到窗口上显示的问题。或者还有别的什么控件可以显示那个图形的问题。或者自己如何开发自定义控件的问题。 我们的与这个一样,功能强200倍的控件是自己开发的。所以跟你说了也白搭,你也不能看懂。你自己搜一个开源的数控件吧。 不要把一堆无关的数据库表贴上来。不要让别人给你写所有代码。
卧_槽 2014-09-19
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
如果你觉得没有递归编程的概念,建议你找一个软件专业课程去学习。有没有学会“递归”,这其实就跟“文盲与高中生”的区别样,在工作生活中混不了多久、早晚会明显地表现出来。
如果表数据稍微多点,就会递不动的。
junoveia 2014-09-19
  • 打赏
  • 举报
回复
引用 7 楼 porenasckx 的回复:
这个就是一个递归的思想,你先查询顶级节点,然后在顶级节点中拿编号带入数据库查询它的子节点,递归循环即可!
大哥,下面那个图怎么画呀?
junoveia 2014-09-19
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
上学时如果认真学过“递归”概念就好办了。 大致是
public void 完善节点(TreeNode node, string 当前编号)
{
    node.Value = 当前编号;
    List<string> 子级编号 = 查询数据库("select 编号 from yourTable where 父级编号='" + 当前编号 + "'");
    foreach(string x in 子级编号)
    {
        TreeNode n = new TreeNode();
        node.Nodes.Add(n);
        完善节点(n, x);
    }
} 
这就是一个简单的“递归”算法。每当为node的子树集合添加一个新的节点n的时候,递归调用“自己”这个方法,从而完善了节点也就同时完善了子树。
您知道那个图要怎么画出来吗?请您指点一下?谢谢!
junoveia 2014-09-19
  • 打赏
  • 举报
回复
主要是那个图是怎么画出来的,图有了在用递归。哪位知道那个图要如何画?
truediego 2014-09-19
  • 打赏
  • 举报
回复
1. 检索的话,如果是Oracle数据库,可以直接检测出树结构的结果 例子的话, 随便搜了一篇,没细看 http://blog.csdn.net/wangpeng047/article/details/6877917 2. UI体现的, 2#的自己画,或者其它楼的C#的Tree表现,看你的需求了
E次奥 2014-09-19
  • 打赏
  • 举报
回复
这个就是一个递归的思想,你先查询顶级节点,然后在顶级节点中拿编号带入数据库查询它的子节点,递归循环即可!
  • 打赏
  • 举报
回复
如果你觉得没有递归编程的概念,建议你找一个软件专业课程去学习。有没有学会“递归”,这其实就跟“文盲与高中生”的区别样,在工作生活中混不了多久、早晚会明显地表现出来。
加载更多回复(6)

111,092

社区成员

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

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

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