从Databound Gridview获取Checkbox

时间:2011-11-11 16:32:43

标签: asp.net gridview objectdatasource

有没有办法检测ASP.NET中的数据绑定网格视图中是否选中了复选框字段?我可以使用foreach检索cell.Text循环中的所有其他单元格值。由于它是数据绑定(到ObjectDataSource),列和单元格没有显式设置ID,我似乎无法找到一个属性让我知道单元格包含复选框或只是文本。所有单元格都是DataControlFieldCell类型,因此我也无法根据类型进行检查。想法?

编辑:

foreach (GridViewRow row in report_gv.Rows)
{
   data += "<TR>";
   foreach (TableCell cell in row.Cells)
   {
      data += "<TD>" + cell.Text + "</TD>";
      //If this is a checkbox (bit value from the DB) cell.Text isn't going to return anything
   }
   data += "</TR>";
}

4 个答案:

答案 0 :(得分:1)

foreach (GridViewRow row in myGridView) {
  foreach (TableCell cell in row.Cells) {
    foreach (Control ctrl in cell.Controls) {
      if (ctrl is CheckBox) {
        CheckBox cb = (CheckBox)ctrl;
        // use cb
      } else if (cell is TextBox) {
      } else if (cell is Label) {
      }
    }
  }
}

您可以根据需要对此进行展开以进行处理。

答案 1 :(得分:0)

你可以做到。但更容易转换为<TemplateField>,这样您就可以为CheckBox分配ID。然后你的foreach去了:

foreach (GridViewRow row in myGridView) {
  CheckBox myCB = (CheckBox)row.FindControl("gvIdentifier");

  // Do something with myCB
}

答案 2 :(得分:0)

GridView.RowDataBound活动中,您可以访问每行内的每个checkbox。 试试这样的事情

<ItemTemplate>
<asp:CheckBoxList ID="chb1" runat="server">
</ItemTemplate>

protected void GvRowDataBound(object sender, GridViewRowEventArgs e)
{
            var chb = (CheckBox) e.Row.FindControl("chb1");
            var ischeck = false;
            if(chb != null)
            {
                if(chb.Checked)
                {
                    ischeck = true;
                }
            }
}

答案 3 :(得分:0)

您可以使用FindControl上的GridViewItem,然后按照ItemTemplate定义中的复选框ID进行搜索。

在FindControl GridView上有很多例子

例如检查一下:checkBox in gridView