有一数据表:category
caid  caname  pid
 1    分类一   0
 2    分类二   0
 3    分类三   1
 4    分类四   0
 5    分类五   2
 6    分类六   3
 7    分类七   1
我已经写一个函数GetTable()获得一个表.这个表的结构跟数据库的一样.按pid=caid递归排序.我想用datalist显示成如下效果:
分类ID     分类名
1           分类一
3           |--分类三
6           |--|--分类六
7           |--分类七
2           分类二
5           |--分类五请教怎么实现.......在线等....

解决方案 »

  1.   

    参考
    http://hi.baidu.com/blake421/blog/item/38fdc4a8ef022fbbca130ce2.html
      

  2.   

    foreach (datarow dr in dt)
    {
    if(dr["pid"].tostring()=="0")
    {
    int level =0;DataRow row = dt.NewRow();
    row["分类ID"] = dr["caid"].tostring();
    row["分类名"] = dr["caname"].tostring();
    this.veiwstate["dt"].Rows.Add(row);
     setLoop(dr["caid"].tostring(),level);
    }
    }
    private void setLoop(string cardid,int level )
    {
        foreach (datarow dr in dt)
    {
        if(dr["pid"].tostring()==cardid)
       {
         row["分类ID"] = dr["caid"].tostring();
         row["分类名"] = dr["caname"].tostring();
         this.veiwstate["dt"].Rows.Add(row);
         if(getCOunt(dr["caid"].tostring())>0)
    {
    setLoop(dr["caid"].tostring(),level+1);
    }
       }
    }
    }
    private int getCOunt(string cardid)
    {
    int i = 0;
    foreach(datarow dr in dt )
    {
        if(dr["pid"].tostring() == cardid ) i++;
    }
    return i ;
    }
      

  3.   

    我写过一个treeview的。不过有个字段标明该记录下是否有子目录。你可以看一下                if (usertable.Rows.Count > 0)
                    {
                        DataRow[] rowList = usertable.Select("fun_fID=23");    //选择根目录的节点
                        if (rowList.Length <= 0) return;
                        for (int i = 0; i < rowList.Length; i++)
                        {
                            TreeNode rootNode = new TreeNode();
                            rootNode.Text = rowList[i]["fName"].ToString();
                            rootNode.Value = rowList[i]["fID"].ToString();
                            rootNode.Expanded = true;
                            if (rowList[i]["fPage"].ToString() != string.Empty)
                            {
                                rootNode.NavigateUrl = rowList[i]["fPage"].ToString();
                            }
                            this.tree.Nodes.Add(rootNode);
                            if (rowList[i]["fHaveSubMenu"].ToString() == "1")
                            {
                                CreateChileNode(rootNode, usertable);
                            }
                        }
                    }
        private void CreateChileNode(TreeNode parentNode, DataTable usertable)
        {
            DataRow[] rowList = usertable.Select("fun_fID=" + parentNode.Value, "fSequence");
            foreach (DataRow row in rowList)
            {
                TreeNode node = new TreeNode();
                node.Text = row["fName"].ToString();
                node.Value = row["fID"].ToString();
                node.Expanded = true;
                if (row["fPage"] != null)
                {
                    node.NavigateUrl = row["fPage"].ToString();
                }
                parentNode.ChildNodes.Add(node);
                if (row["fHaveSubMenu"].ToString() == "1")
                {
                    CreateChileNode(node, usertable);
                }
            }
        }