关于checkbox和datagridview的问题

时间:2011-03-20 05:10:52

标签: c# .net winforms datagridview checkbox

我有带有复选框列的datagridview,可以使用外部复选框选中或取消选中列中的复选框。它在选择所有列并将数据保存在数据库中时工作正常。但是,当我取消选中带有外部复选框的datagridview中的复选框并再次选择datagridview中的单个复选框时,它再次获取列中所有复选框的rowindex。

if (chkbranches.Checked == true)
{
  foreach (DataGridViewRow dr in gridviewholiday.Rows)
  {
    dr.Cells[0].Value = true;
  }

  for (int i = 0; i < gridviewholiday.Rows.Count; i++)
  {
    rowindex = i;
    list.add(rowindex);//to put the rowindex in array list
  }
}
else if (chkbranches.Checked == false)
{
  foreach (DataGridViewRow dr in gridviewholiday.Rows)
  {
    dr.Cells[0].Value = false;
    gridviewholiday.Refresh();
    gridviewholiday.ClearSelection();
    list.Clear();
  }
}

2 个答案:

答案 0 :(得分:0)

如果检查chkbranches,为什么要循环两次?你不能在第一个foreach中添加项目到列表中吗?在取消选中的循环中,为什​​么每次都刷新并清除两个控件?可能只需要一次。

如上所述,这对单一检查没有任何作用。如果您期待它,那似乎就是问题。

答案 1 :(得分:0)

不太确定您尝试做什么,但我有一个类似的按钮删除所有已检查的行。我在复选框中使用了这样的模板字段:

<asp:TemplateField>
   <ItemTemplate>
     <asp:CheckBox ID="cbSelector" runat="server" />
   </ItemTemplate>
</asp:TemplateField>

然后对于我执行的删除按钮代码:

protected void btnDeleteChecked_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in gridOrders.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("cbSelector");
        if ((null != cb) && cb.Checked)
        {
            uint id = Convert.ToUInt32(gridOrders.DataKeys[row.RowIndex].Value);
            gInvoiceDB.DeleteInvoice(id, true);
        }
    }
}