DataGrid的一个列中包含了很多的CheckBox,我需要遍历出某一行中此列中的所有CheckBox,该如何遍历出呢?下面是我的代码,没有遍历出CheckBox,请各位指教
string role = null;
foreach(object obj in Form1.Controls)
{
if(obj is DataGrid)
{
foreach(object nobj in this.DataGrid1.Controls)
{
if(nobj is CheckBox)
{
CheckBox cb = (CheckBox)nobj;
if(cb.Checked == true)
{
role += "1";
}
else
{
role += "0";
}
}
}
}
}

解决方案 »

  1.   

    DataGrid中的CheckBox并不是在this.DataGrid1.Controls中,而是在
    this.DataGrid1.Items[行号].Cells[列号].Controls中,所以楼主你要foreach遍历DataGrid1中的每一个Items中的每一个Cells中的控件,判定其是否为CheckBox。
      

  2.   

    string role = null;
    foreach(object obj in Form1.Controls)
    {
    if(obj is DataGrid)
    {
    foreach(object nobj_item in this.DataGrid1.Items)
    {
         foreach(object nobj_cell in nobj_item.Cells)
         {
                               foreach(object nobj_control in nobj_cell.Controls)
             {                            if(nobj_control is CheckBox)
    {
    CheckBox cb = (CheckBox)nobj_control;
    if(cb.Checked == true)
    {
    role += "1";
    }
    else
    {
    role += "0";
    }
    }
                           }
                        }
    }
    }
    }
      

  3.   

    谢谢jerryfos(想飞)大哥指教,但报了一个错: “object”并不包含对“Cells”的定义
      

  4.   

    nobj_item.Cells 这里报错:“object”并不包含对“Cells”的定义
      

  5.   

    我需要遍历出某一行中此列中的所有CheckBox???
    那不就是一个格吗?
      

  6.   

    我需要遍历出某一行中此列中的所有CheckBox???
    那不就是一个格吗?
    --------------------------------------------------
    是一个格里放了多个CheckBox,该如何遍历呢?
      

  7.   

    忘记问你,你是用WinForm还是WebForm?我写的是WebForm中的微软控件,如果你的是WinForm就有错了
      

  8.   

    这个肯定是winform了..所以偶没有参与
      

  9.   

    你用的是微软的树型控件吗?
    有没有在解决方案中添加“Microsoft.Web.UI.WebControls”引用?
      

  10.   

    没有用微软的树型控件,我的页面里放了一个DataGrid,DataGrid每一行的一个列里放了多个CheckBox,我需要把某一行的CheckBox遍历出来
      

  11.   

    头晕晕了.......不好意思。程序调试肯定是会出现“nobj_item.Cells 这里报错:“object”并不包含对“Cells”的定义”错误,因为object还没完成初始化。
    你可以忽略它继续执行试下
      

  12.   

    把程序换成下面的就可以避免调试时的错误:
    string role = null;
    foreach(object obj in Form1.Controls)
    {
      if(obj is DataGrid)
      {
       foreach(System.Web.UI.WebControls.DataGridItem nobj_item in DataGrid1.Items)
       {
         foreach(System.Web.UI.WebControls.TableCell nobj_cell in nobj_item.Cells)
         {
           foreach(System.Web.UI.Control nobj_control in nobj_cell.Controls)
           {
             if(nobj_control is CheckBox)
    {
    CheckBox cb = (CheckBox)nobj_control;
    if(cb.Checked == true)
    {
    role += "1";
    }
    else
    {
    role += "0";
             }
    }
    }
    }
    }
    }
    }
      

  13.   

    因为VS编译时用object obj还只是个空对象,所以会检查出错误。上面的程序我也没有详尽调试,其实只要楼主你知道自己要找的CheckBox在this.DataGrid1.Items[行号].Cells[列号].Controls中就行了,别的都是实现问题,希望能帮你解决些问题。
      

  14.   

    非常谢谢jerryfos(想飞)的热心指教,上面的代码把DataGrid中所有行的checkbox遍历出来了,我需要的点击一个按妞,然后通过ItemCommand时间偏历出这一行的checkbox,我需要的是遍历某一行的checkbox,如何定位行号呢?
      

  15.   

    1,在DataGrid中的“属性生成器”里添加一个按钮列“选择”
    2,为DataGrid添加ItemCommand响应事件:DataGrid属性-》事件
    (这样,当用户点击DataGrid中的某个选择按钮时就会触发)
    3,在事件的处理方法中写以下代码:
    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName=="Select")//判断用户点击的是不是选择按钮
    {
    foreach(System.Web.UI.Control nobj_control in e.Item.Cells["你的CheckBox所在列号,从0开始"])
    {
    if(nobj_control is CheckBox)
    {
    CheckBox cb = (CheckBox)nobj_control;
    if(cb.Checked == true)
    {
    role += "1";
    }
    else
    {
    role += "0";
    }
    }
    }
    }
    }
      

  16.   

    foreach(System.Web.UI.Control nobj_control in e.Item.Cells["你的CheckBox所在列号,从0开始"])这里报错:语句无法对“System.Web.UI.WebControls.TableCell”类型的变量操作,因为“System.Web.UI.WebControls.TableCell”不包含“GetEnumerator”的定义,或它是不可访问的
      

  17.   

    ┌──────────────────────────────┐
    │第一列 │     放入了很多CheckBox的列    │      操作按妞    │
    ├──────────────────────────────┤
    │abc    │ checkbox1 checkbox2 checkbox3 │  按妞     │
    ├──────────────────────────────┤ 
    │def    │ checkbox1 checkbox2 checkbox3 │  按妞     │ 
    ├──────────────────────────────┤
    │fdf    │ checkbox1 checkbox2 checkbox3 │  按妞     │ 
    └──────────────────────────────┘
    也许是我没表达清楚,以上就是一个DataGrid表格,当我点击某一行的按妞的时候,在ItemCommand事件中把这一行的第二列中所有的checkbox遍历出来,该如何写呢?恳请大家多多指教
      

  18.   

    在模板中设置好每个CheckBox的ID,然后通过一个循环用Cell[i].FindControl["ID"]去找,肯定能找到所有的CheckBox