我想把递归里得到的数据防在DataTable中,可总是得到一条记录,怎么解决?实际应该显示N条记录的DataRow dr1 = li.NewRow();  好象在循环的时候总会去掉上次循环下来的记录li.Rows.Add(dr1);没有替加记录
怎么解决??----------------------------------------------------------------------------    private void BindData(DataTable dt, int id, int kg)
    {
        DataView dv = new DataView(dt);
        dv.RowFilter = "parentid = " + id.ToString();
        
        DataTable li = new DataTable();
        li.Columns.Add(new DataColumn("id1", typeof(Int32)));
        li.Columns.Add(new DataColumn("name", typeof(string)));        foreach (DataRowView drv in dv)
        {
            int m = 0;
            string blank = "";
            if (id != 0)
            {
                m = m + 1 + kg;
                for (int i = 0; i < m; i++)
                {
                    blank += "-";//空格                }
            }                DataRow dr1 = li.NewRow();
                int j = 1;
                dr1[0] = j++;
                dr1[1] = blank + drv["name"].ToString();
                li.Rows.Add(dr1);
                this.Repeater1.DataSource = li;
                this.Repeater1.DataBind();
            BindData(dt, Convert.ToInt32(drv["id"]), m);
        }    }

解决方案 »

  1.   

    this.Repeater1.DataSource = li;
                    this.Repeater1.DataBind();
                BindData(dt, Convert.ToInt32(drv["id"]), m);应该在Foreach 的外面吧
      

  2.   

    修改一下
     private void BindData(DataTable dt, int id, int kg)
        {
            DataView dv = new DataView(dt);
            dv.RowFilter = "parentid = " + id.ToString();
            
            li.Columns.Add(new DataColumn("id1", typeof(Int32)));
            li.Columns.Add(new DataColumn("name", typeof(string)));        foreach (DataRowView drv in dv)
            {
                int m = 0;
                string blank = "";
                if (id != 0)
                {
                    m = m + 1 + kg;
                    for (int i = 0; i < m; i++)
                    {
                        blank += "-";//空格                }
                }                DataRow dr1 = li.NewRow();
                    int j = 1;
                    dr1[0] = j++;
                    dr1[1] = blank + drv["name"].ToString();
                    li.Rows.Add(dr1);            BindData(dt, Convert.ToInt32(drv["id"]), m);
            }    }将下面的代码放在一个按钮的单击事件中
    DataTable li = new DataTable();
    BindData(dt,0,0);
    this.Repeater1.DataSource = li;
    this.Repeater1.DataBind();
      

  3.   

    递归里面的参数,第一个,应该是li吧???然后,DataTable li = new DataTable()改成:
    if(dt == null)DataTable li = new DataTable();
      

  4.   

    可我不需要按钮事件,我要在页面载入的时候直接发生
        protected void Page_Load(object sender, EventArgs e)        DataTable li = new DataTable();
            DataTable dt = GetData();
            BindData(dt, 0, 0);
            this.Repeater1.DataSource = li;
            this.Repeater1.DataBind();
        }还是不行么
      

  5.   


      DataTable li = new DataTable();
      DataTable dt = new datatable()
      dt=GetData();
      BindData(dt, 0, 0);
      this.Repeater1.DataSource = li;  //****师兄li表里没有数据啊.
     this.Repeater1.DataSource = dt;  
      this.Repeater1.DataBind();
      

  6.   

    to Jialang你说的方法不对吧,第一个参数是应该是dt