表字段
id parentid title
绑定时如下:
private void BindData(DataTable dt,int id)
{
DataView dv = new DataView(dt);
dv.RowFilter = "t_parentid = " + id.ToString();
foreach(DataRowView drv in dv)
{
string blank="";
if(id!=0)
{
for(int i=0;i<GetDepth();i++)
{
blank+="-";
}
}
ListItem li=new ListItem();
li.Text=blank+drv["t_id"].ToString()+drv["t_title"].ToString();
li.Value=drv["t_id"].ToString();
this.ListBox1.Items.Add(li);
BindData(dt,Convert.ToInt32(drv["t_id"]));
}  
}
GetDepth();这个方法应该怎写呀。

解决方案 »

  1.   


    换个思路,不需要计算深度 开始调用BindData(dt,id0,0)private void BindData(DataTable dt,int id,int deep)
    {
    DataView dv = new DataView(dt);
    dv.RowFilter = "t_parentid = " + id.ToString();
    foreach(DataRowView drv in dv)
    {
    string blank="";
    if(id!=0)
    {
    for(int i=0;i<deep;i++)
    {
    blank+="-";
    }
    }
    ListItem li=new ListItem();
    li.Text=blank+drv["t_id"].ToString()+drv["t_title"].ToString();
    li.Value=drv["t_id"].ToString();
    this.ListBox1.Items.Add(li);
    BindData(dt,Convert.ToInt32(drv["t_id"]),deep+1);
    }  
    }
      

  2.   

    你这种也不行呀。要是我绑定第二个同级的类别。deep就貌似不是那么准了呢。
      

  3.   

    不知道一开始你的库是怎么设计的,如果没有针对节点建立一个类似层级index字段,单纯的想通过父节点是谁来获取deep,比较困难。
      

  4.   

    //试试
     private int iDepth = 0; //递归
        private int myDepth = 0; //外围
        private void BindData(DataTable dt, int id)
        {
            DataView dv = new DataView(dt);
            dv.RowFilter = "t_parentid = " + id.ToString();
            
            foreach (DataRowView drv in dv)
            {
                string blank = "";
                if (id != 0)
                {
                    iDepth++;
                    for (int i = 0; i < iDepth; i++)
                    {
                        blank += "-";
                    }
                }
                ListItem li = new ListItem();
                li.Text = blank + drv["t_id"].ToString() + drv["t_title"].ToString();
                li.Value = drv["t_id"].ToString();
                this.ListBox1.Items.Add(li);
                BindData(dt, Convert.ToInt32(drv["t_id"]));
                myDepth++;
                iDepth = myDepth;
            }
        }
      

  5.   

    搞定。奶奶的。少了一个步骤。呵呵。通过当前的记录ID。传入方法后。取出父ID。找ID为父ID的记录。一级一级往上找。