数据库中的数据
ID 为自动增长   NAME 为名称  P_ID 为父类ID
ID      NAME      P_ID
1      数码产品      0
2       相机         1
3      MP3/MP4     1
4       索尼         3
5       OPPO       3
6      电脑整机      0
7       主板         6
8      显示器        6
9       华硕         7
…       ……        ……
---------------------以上是数据库中的数据
 
 要在页面中显示如下效果数码产品
    相机
    MP3/MP4
      索尼
       OPPO
电脑整机
    主板
       华硕
    显示器
 如果还有下级则继续显示(递归算法)
   最好写下代码  谢谢!!

解决方案 »

  1.   


    写得不清楚吗?  就下面这个效果哈!  
    数码产品 
        相机 
        MP3/MP4 
          索尼 
          OPPO 
    电脑整机 
        主板 
          华硕 
        显示器  
      

  2.   

    数码产品 
        相机 
        MP3/MP4 
           索尼 
            OPPO 
    电脑整机 
        主板 
           华硕 
        显示器 
      

  3.   

    数据库中的数据 
    ID 为自动增长  NAME 为名称  P_ID 为父类ID 
    ID      NAME      P_ID 
    1      数码产品      0 
    2      相机          1 
    3      MP3/MP4     1 
    4      索尼          3 
    5      OPPO        3 
    6      电脑整机      0 
    7      主板          6 
    8      显示器        6 
    9      华硕          7 
    …      ……        …… 
    ---------------------以上是数据库中的数据 要在页面中显示如下效果 数码产品  -------ID 为1
        相机  -------ID 为2    父类ID为1
        MP3/MP4 -------ID 为3 父类ID为1
          索尼 -------ID 为4  父类ID为2
           OPPO -------ID 为5 父类ID为2
    电脑整机 -------ID 为6  父类ID为0
        主板 -------ID 为7  父类ID为6
           华硕 -------ID 为9  父类ID为7
        显示器 -------ID 为8  父类ID为6
    如果还有下级则继续显示(递归算法) 
      最好写下代码  谢谢!! 可能刚刚没说清楚   现在清楚了吧
      

  4.   

    索尼 -------ID 为4  父类ID为2 
          OPPO -------ID 为5 父类ID为2 
    這個是否應該在相機後面
      

  5.   

    private void TreeViews(int ItemId, TreeNode pNode)
        {
            DataRow[] dr;
            if (ItemId == 0)
                dr = ds.Tables[0].Select("nodeid=0");
            else
                dr = ds.Tables[0].Select("nodeid=" + ItemId);
            foreach (DataRow thisRow in dr)
            {
                TreeNode Node = new TreeNode();
                Node.Text = thisRow["menuName"].ToString();
                Node.Value = thisRow["ACALmenuID"].ToString();
                if (pNode == null)
                {
                    Node.Expanded = false;
                    Node.ShowCheckBox = true;
                    TreeView1.Nodes.Add(Node);
                    TreeViews(int.Parse(thisRow["ACALmenuID"].ToString()), Node);
                }
                else
                {
                    Node.Expanded = false;
                    Node.ShowCheckBox = true;
                    pNode.ChildNodes.Add(Node);
                    TreeViews(int.Parse(thisRow["ACALmenuID"].ToString()), Node);
                }
            }
        }
    看下对你有帮助没吧。
      

  6.   

    弄个TREEVIEW就搞定了啊.dim sql as string=""
    sql="select * from table where P_ID=0"
    ..
    while dr.read
    dim treestart as treenode
    treestart.text=dr("name")
     mytreeview.nodes.add(treestart)
    dim sql2..
    sql2="select * from tabel where P_ID=" & dr("ID")
      while dr2.read
       dim treenode2  as treenode
        treenode2.text=dr("name")
         treestart.ChildNodes.add(treenode2)
          如有多层,则继续..
      end while
    end while
    提供一个思路,代码自己补齐.
      

  7.   

    这个简单,只要你数据库里有父节点,我给你两个方法,看看吧!不明白可以发信息问我。    //绑定父节点
        private void initTree()
        {
            DataRow[] drs = dt.Select("ParentID=2", "ID asc");
            for (int i = 0; i < drs.Length; i++)
            {
                TreeNode tn = new TreeNode(drs[i][1].ToString());
                tn.SelectAction = TreeNodeSelectAction.Select;
                tn.Expanded = false;
                this.TreeView1.Nodes.Add(tn);
                LoadTree(tn, Convert.ToInt32(drs[i][0]));
            }
        }
        //绑定除父节点以外所有节点
        private void LoadTree(TreeNode tn, int parentid)
        {
            DataRow[] drs = dt.Select("ParentID=" + parentid, "ID asc");
            for (int i = 0; i < drs.Length; i++)
            {
                TreeNode child = new TreeNode(drs[i][1].ToString());
                tn.SelectAction = TreeNodeSelectAction.Select;
                child.Expanded = false;
                tn.ChildNodes.Add(child);
                LoadTree(child, Convert.ToInt32(drs[i][0]));
            }
        }
      

  8.   

    直接在数据库中写SQL语句,然后绑定就可以了,用递归输出也可以--测试数据
    DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
    INSERT @t SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'--深度排序显示处理
    --生成每个节点的编码累计(相同当单编号法的编码)
    DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
    DECLARE @Level int
    SET @Level=0
    INSERT @t_Level SELECT ID,@Level,ID
    FROM @t
    WHERE PID IS NULL
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
        FROM @t a,@t_Level b
        WHERE a.PID=b.ID
            AND b.Level=@Level-1
    END--显示结果
    SELECT SPACE(b.Level*2)+'|--'+a.Name
    FROM @t a,@t_Level b
    WHERE a.ID=b.ID
    ORDER BY b.Sort
    /*--结果
    |--山东省
      |--烟台市
        |--招远市
      |--青岛市
    |--四会市
      |--清远市
        |--小分市
    --*/
      

  9.   

       DataSet myDS;
            private void Page_Load(object sender, System.EventArgs e)
            {
                CreateDataSet();
                InitTree(TreeView1.Nodes,"0");
            }        private DataSet CreateDataSet()
            {
                SqlConnection myConnection = new SqlConnection("server=20-1555\\SQLEXPRESS;database=Test;pwd=123456;uid=sa;");
                SqlDataAdapter myDA = new SqlDataAdapter("select * from TreeView",myConnection);
                myDS = new DataSet();
                myDA.Fill(myDS,"tree");
                return myDS;
            }        private void InitTree(TreeNodeCollection Nds,string p_ID)
            {
                DataView myDV = new DataView();
                TreeNode tmpNd;
                string intId;
                myDV.Table = myDS.Tables["tree"];
                myDV.RowFilter="P_ID=" + P_ID + "";
                foreach(DataRowView drv in myDV)
                {
                    tmpNd = new TreeNode();
                    tmpNd.Value = drv["TreeId"].ToString();
                    tmpNd.Text = drv["TreeName"].ToString();
                    tmpNd.NavigateUrl = drv["URL"].ToString();
                    Nds.Add(tmpNd);
                    intId = drv["P_ID"].ToString();
                    InitTree(tmpNd.ChildNodes, tmpNd.Value);
                }
            }