问题如下:树状数据结构A课程(id:1)(parentid:0)
   单元一(id:3)(parentid:1)
     课程一(id:5)(parentid:3)
     课程二(id:6)(parentid:3)
   单元二(id:4)(parentid:1)
     课程三(id:9)(parentid:4)
B课程(id:2)(parentid:0)
   单元一(id:7)(parentid:2)
   单元二(id:8)(parentid:2)比如我想通过id=1可以得到它下面各级的数据,id=3得到它下面各级的数据等等,不知道怎么做,请各位指教,在线等

解决方案 »

  1.   

    表结构一样的,可以改一下字段名称!
    DataSet dsdata=new DataSet();
            private void button3_Click(object sender, EventArgs e)
            {
                string con = "server=localhost;Integrated Security=SSPI;database=Common";
                string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
                SqlConnection connect = new SqlConnection(con);
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlstr;
                cmd.Connection = connect;          
                SqlDataAdapter dap = new SqlDataAdapter();
                dap.SelectCommand = cmd;
                dap.Fill(dsdata);
                CreatTreeView2(0);
            }        private void CreatTreeView2(int parentid)
            {
                string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim();            DataRow[] drs = dsdata.Tables[0].Select(strFilter);            foreach (DataRow dr in drs)
                {
                    TreeNode tmnode = new TreeNode(dr["SHORTNAME"].ToString().Trim());
                    this.treeView1.Nodes.Add(tmnode);
                    CreatTreeView2(tmnode, Convert.ToInt32(dr["ORGUNITID"]));
                }
            }        private void CreatTreeView2(TreeNode parentNode,int parentid)
            {
                DataRow[] drs = dsdata.Tables[0].Select("ORGUNITPARENT= " + parentid.ToString().Trim());            foreach (DataRow dr in drs)
                {
                    TreeNode tmnode = new TreeNode(dr["SHORTNAME"].ToString().Trim());
                    parentNode.Nodes.Add(tmnode);
                    CreatTreeView2(tmnode, Convert.ToInt32(dr["ORGUNITID"]));
                }
            }
      

  2.   

    ORGUNITID,     ==> id
    SHORTNAME,     ==> 课程/单元..
    ORGUNITPARENT  ==> parentid
      

  3.   

    DataSet ds=new DataSet();
    private void getData(int ParentID)
    {
       DataSet dsTemp=....
       if (dsTemp.Tables[0].Rows.Count<=0)
       {
          return;
       }
       ds.Merge(dsTemp);
       foreach (DataRow row in dsTemp.Tables[0].Rows)
       {
           //获取子一级的数据
           getData(int.Parse(row["ID"].ToString()));
       }
    }
    所有的数据都在DS里,自已调试一下
      

  4.   

    yuanmanguo:我不是要把数据加载到treeview控件的,我的意思把一个级下级的所有子级给列出来,
    比如,当参数id=1时,效果如下:
    ------------------------
    单元一 2级
    单元二 2级
    课程一 3级
    课程二 3级
    课程三 3级
      

  5.   

    没什么好方法,递规.可以是数据库端递规,也可以是前台程序端递规.如果设计带路径,那么查询就方便了.其实就是这两种设计方式. 下面贴子楼主的是带路径的设计方式, 一楼贴的是不带路径的方式. http://topic.csdn.net/u/20080311/22/37dd03ff-2263-4cc6-b333-987de5460aee.html
      

  6.   

    如果在程序中实现,可以一次将所有数据获取过来后,递归。
    如果在sql中的话,可以写一个存储过程,递归筛选出来返回数据集就可以了。看这里有一个类似的例子,是在存储过程中处理的,你可以参考一下。
    http://www.cnblogs.com/sxlfybb/archive/2007/12/07/986848.html
      

  7.   

    可以这样改一下,
    试一下.
            DataSet dsdata = new DataSet();        private void CreatTreeView3(int parentid)
            {
                string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim();            DataRow[] drs = dsdata.Tables[0].Select(strFilter);            foreach (DataRow dr in drs)
                {
                    string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";
                    TreeNode tmnode = new TreeNode(nodename);
                    this.treeView1.Nodes.Add(tmnode);                
                }            foreach (DataRow dr in drs)
                {
                    CreatTreeView2(Convert.ToInt32(dr["ORGUNITID"]));
                }
            }        private void button4_Click(object sender, EventArgs e)
            {
                string con = "server=localhost;Integrated Security=SSPI;database=Common";
                string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
                SqlConnection connect = new SqlConnection(con);
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlstr;
                cmd.Connection = connect;
                SqlDataAdapter dap = new SqlDataAdapter();
                dap.SelectCommand = cmd;
                dap.Fill(dsdata);
                CreatTreeView3(1);
            }
      

  8.   

    不好意思.
    改一下.        DataSet dsdata = new DataSet();        private void CreatTreeView3(int parentid)
            {
                string strFilter = "ORGUNITPARENT= " + parentid.ToString().Trim();            DataRow[] drs = dsdata.Tables[0].Select(strFilter);            foreach (DataRow dr in drs)
                {
                    string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";
                    TreeNode tmnode = new TreeNode(nodename);
                    this.treeView1.Nodes.Add(tmnode);                
                }            foreach (DataRow dr in drs)
                {
                    CreatTreeView3(Convert.ToInt32(dr["ORGUNITID"]));
                }
            }        private void button4_Click(object sender, EventArgs e)
            {
                string con = "server=localhost;Integrated Security=SSPI;database=Common";
                string sqlstr = "Select ORGUNITID,SHORTNAME,isnull(ORGUNITPARENT,0) ORGUNITPARENT from OrganizationUnit ";
                SqlConnection connect = new SqlConnection(con);
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlstr;
                cmd.Connection = connect;
                SqlDataAdapter dap = new SqlDataAdapter();
                dap.SelectCommand = cmd;
                dap.Fill(dsdata);
                CreatTreeView3(1);
            }
      

  9.   


    string nodename = dr["SHORTNAME"].ToString().Trim() + " " + dr["ORGUNITID"].ToString() + "级";改为string nodename = dr["SHORTNAME"].ToString().Trim() + " " + parentid.ToString() + "级";
    0_0