解决方案 »

  1.   

    完全实现你画的这个图,你只能自己画
    如果只是实现结构
    用treeview就可以
      

  2.   

    本帖最后由 bdmh 于 2014-09-19 09:30:03 编辑
      

  3.   

    上学时如果认真学过“递归”概念就好办了。大致是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的时候,递归调用“自己”这个方法,从而完善了节点也就同时完善了子树。
      

  4.   

    1:先查询  父级编号 为空的数据,放到List  A中;
    2:遍历A,创建父 TreeNode, 根据 编号匹配 父级编号  下的子数据;放到List B中
    3:遍历 B 创建子TreeNode,添加到父TreeNode下。
      

  5.   

    1. 检索的话,如果是Oracle数据库,可以直接检测出树结构的结果
     例子的话, 随便搜了一篇,没细看
    http://blog.csdn.net/wangpeng047/article/details/68779172. UI体现的, 2#的自己画,或者其它楼的C#的Tree表现,看你的需求了
      

  6.   


    晕死,又改成问如何画图了。如果问画图问题,你贴出关系数据库干嘛啊?你应该直接问 TreeNode(或者 TreeView)控件如何添加到窗口上显示的问题。或者还有别的什么控件可以显示那个图形的问题。或者自己如何开发自定义控件的问题。我们的与这个一样,功能强200倍的控件是自己开发的。所以跟你说了也白搭,你也不能看懂。你自己搜一个开源的数控件吧。不要把一堆无关的数据库表贴上来。不要让别人给你写所有代码。
      

  7.   

    1. 先生成那个树结构
    2. 生成一个Panel
    3. 根据树结构的层次,节点数,算出Panel的宽高
    4. 遍历树结构,开画
       (1) 从Panel. CreateGraphics 出一个绘图实例来
       (2) 根据当前节点该在的位置, DrawRectangle, FillRectangle, DrawText, DrawLine之类的
    没有现成的控件可以实现这个图,估计你只想确认这句话而已
      

  8.   

    随便给你搜了一个,其它的你自己搜索一下:http://www.haolizi.net/example/view_734.html这类控件开发(假设要求达到商用的稳定程度和功能要求的话)超过了csdn上99.9%的人员的能力,所以找现成的开源控件比较好。但是你到底是读取树形数据结构有问题?还是不会使用某种控件?你应该真正问出具体问题。不要人家告诉了这个答案,你又说人家没搞懂的你的问题,你问的是另一个。
      

  9.   


    treeview实现的是左侧的,我现在要网络图的形式,你知道怎么画吗?
    现在是有这样的数据表,问题是想实现那个组织结构图,不知道要怎么来画出来,您有这方面的资料吗?
      

  10.   

    sp大神说的很对,CSDN里99.9%的人都做不了
    有能力做这个的,也没有几个像sp大神一样有闲工夫跑这教学生来
      

  11.   

    我觉得你迷失在 data - view之间了
    你的数据库中的数据,只是原始数据
    你要先组织成 树结构的数据 (方便处理)------ 方法的话,楼上各楼都给出了
    然后你用这个方便处理的数据(树结构),再去画图 ---   最简单的方法就是想象着你手动画这个图怎么画的,程序就怎么写(循环,递归随意)
    数据库数据   --->    【整理】  ---> 树状结构数据   ----->     【遍历】    --->   画图
      

  12.   

    额,这东西现成滴控件一堆,addflow,flowchart,ilog dairgm。如果是web滴更多,我就不提了如果是非要自己做,暂时就先别考虑绘图,暂时先考虑把数据转换成grahpml或者vml,然后在考虑开发一个显示granphml滴带交互滴通用控件
      

  13.   

    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控件,但是要实现图像版块显示,只能找一个符合你审美观和需求的第三方控件了,或者自己自定义控件。无论你使用什么类型的控件,数据部分都是这样的,怎么改都是大同小异。
      

  14.   

    使用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;
        }