有两个数据表,用ASP.net(C#)如何动态实现栏目的显示
显示的样式与Treeview的样式相同
一个表是父表
tabel1
pid    父栏目编号
pname  父栏目名称
一个是与此相关的子表
tabel2
id     子栏目编号
pid    父栏目编号
name   子栏目栏目名称
zlink   栏目连接地址
这个问题搞的我一个星期了还是搞不出来.
感觉用ASP写好多了
但是ASP.NET确实比ASP好学易上手,但是就是某一个功能实现起来就是那么难.
譬如上面的这个.

解决方案 »

  1.   

    递归啊private void BindListBox()
    {
    DataTable dt = doBind.GetData(BLL_doClass.GetDataSet());
    LbClass.Items.Add(new ListItem("根目录","0"));
    Recursion(0,0,0,null,null,dt);
    LbClass.SelectedValue = Rtp.Text;}
    private void Recursion(int id,int pid,int level, string strName,string strRtp,DataTable dt)
    {
    DataRow[] drs = dt.Select("ID=" + id);
    string currentString =  GetDecorateString(level,strName);
    if (drs.Length != 0)
    {
    LbClass.Items.Add(new ListItem(currentString,strRtp));
    }
    drs = dt.Select("ParentID=" + id);if (drs.Length != 0)
    {
    level++;
    foreach (DataRow dr in drs)
    {
    Recursion((int)dr["ID"],(int)dr["PrefaceID"], level,dr["Name"].ToString(),dr["Rtp"].ToString(), dt);
    }
    }
    else
    {
    return; 
    }
    }
    private string GetDecorateString(int level, string strName)
    {
    string curentString = null;
    if (level != 1)
    {
    for(int i=1;i<level;i++)
    {
    curentString += "-";
    }
    curentString = "| "+curentString+strName;
    }
    else
    {
    curentString = strName;
    }return curentString;
    }
      

  2.   

    用两个表合并成一个表,然后用递归
    表 table 
    DataRowCollection dataRow = table.Rows;
    foreach(DataRow dr in dataRow)
    {
     if (dr["parentId"]==0)
    {
     TreeNode root = new TreeNode();
     root.Text = dr["Name"].ToString();
     this.treeView1.Nodes.Add(root);
     AddTree(root,dr["ID"]);
    }
    }
    private void AddTree(TreeNode root ,int parentId)
    {
    foreach(DataRow dr in dataRow)
    {
    if(dr["parentId"]==parentId)
    {
     TreeNode node = new TreeNode();
     node.Text = dr["Name"].ToString();
     root.Nodes.Add(node);
    AddTree(node,dr[ID]);
    }
    }
    }