表结构如下
ID           Name 
001        国内新闻
002        国外新闻
001001     国内经济
001001001  国内股票
002001     国外经济如何实现?大家帮忙看看?

解决方案 »

  1.   

    ID  Name  ParentID
      

  2.   

    看来挺有规律的,那就根据ID长度来判断吧,每3个字符拆分下用Substring
      

  3.   

    生成一个以ID Name ParentID的临时表不就可以了,针对临时表进行操作
      

  4.   

    DECLARE @tb TABLE(id SYSNAME,[name] SYSNAME)
    INSERT INTO @tb
    select '001',N'国内新闻' union 
    select '002',N'国外新闻' union
    select '001001',N'国内经济' union
    select '001001001',N'国内股票' union
    select '002001',N'国外经济'SELECT * FROM @tbSELECT id,[name],SUBSTRING(id,1,LEN(id)-3) AS parentid INTO #tb FROM @tb
    SELECT * FROM #tb
    DROP TABLE #tb
      

  5.   

    分开两个字段。
    id 和pid
     1    0
     2    1
     3    2
      

  6.   

    第一级长度为3
    第二级长度为6
    3*N
    先求数据库里最长的是多少(X),这样后循环(X/3)次 构建你要的数据
    1级为 len = 3 每个一级的下层len = 6 且字符为 like 父级+'%' 
      

  7.   

    大家帮我看下这哪有问题?    DataSet ds = new DataSet();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                AddTree();
            }
        }    protected void AddTree()
        {
            DbHelperClass dbStr=new DbHelperClass ();
            string sql = "select ID,Name,substring(ID,0,len(ID)-2) as prid  from [news] ";
            ds=dbStr.QuerySqlStrDS(sql);
            DataList1.DataSource = ds.Tables["ds"].DefaultView;
            DataList1.DataBind();
            BindTree("001", (TreeNode)null);
            BindTree("002", (TreeNode)null);  
        }    protected void BindTree(String Perentid, TreeNode tnode)
        {
            TreeNode tn1 = new TreeNode();
            DataView treedv = new DataView(ds.Tables[0]);
            treedv.RowFilter = "[prid]=" +Perentid.ToString();
            foreach (DataRowView ROW in treedv)
            {
                if (tnode == null)
                {
                    tn1.Text = ROW["Name"].ToString();
                    tn1.Value = ROW["ID"].ToString();
                    TreeView1.Nodes.Add(tn1);
                    if (ROW["prid"] == null)
                    {
                        BindTree("001", tn1);
                    }
                    BindTree("00" + (Convert.ToInt32(ROW["prid"]) + 1).ToString(), tn1);
                    Response.Write("00" + (Convert.ToInt32(ROW["prid"]) + 1).ToString());
                }
                else
                {
                    TreeNode tn2 = new TreeNode();
                    tn2.Text = ROW["Name"].ToString();
                    tn2.Value = ROW["ID"].ToString();
                    tnode.ChildNodes.Add(tn2);
                    if (ROW["prid"] == null)
                    {
                        BindTree("001", tn1);
                    }
                    BindTree(ROW["ID"].ToString(), tn2);
                    Response.Write("00" + (Convert.ToInt32(ROW["prid"]) + 1).ToString());
                }        }
        }在sql查询器里没问题
      

  8.   

    看你的表设计 
    与程序无关表设计为:ID        PID        Name
    主键ID    父级ID     名称在后台多循环递归
    放父级为空就是最大级
    以及类推
    父级的数据也就是ID的字段