当前位置: 代码迷 >> ASP.NET >> 关于树状数据结构,向求救
  详细解决方案

关于树状数据结构,向求救

热度:8441   发布时间:2013-02-25 00:00:00.0
关于树状数据结构,向各位高手求救,在线等
问题如下:

树状数据结构

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得到它下面各级的数据等等,不知道怎么做,请各位指教,在线等

------解决方案--------------------------------------------------------
递归
------解决方案--------------------------------------------------------
表结构一样的,可以改一下字段名称!

C# code
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"]));            }        }
------解决方案--------------------------------------------------------
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里,自已调试一下
------解决方案--------------------------------------------------------
没什么好方法,递规.可以是数据库端递规,也可以是前台程序端递规.

如果设计带路径,那么查询就方便了.

其实就是这两种设计方式. 下面贴子楼主的是带路径的设计方式, 一楼贴的是不带路径的方式. 

http://topic.csdn.net/u/20080311/22/37dd03ff-2263-4cc6-b333-987de5460aee
------解决方案--------------------------------------------------------
如果在程序中实现,可以一次将所有数据获取过来后,递归。
如果在sql中的话,可以写一个存储过程,递归筛选出来返回数据集就可以了。

看这里有一个类似的例子,是在存储过程中处理的,你可以参考一下。
http://www.cnblogs.com/sxlfybb/archive/2007/12/07/986848
  相关解决方案