我有带有复选框列的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();
}
}
答案 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);
}
}
}