c# - c# DataGridView 复选框不会被选中
问题描述
我有一个简单的DataGridView,它使用northwind 数据库中的Orders(OrderID,CustomerID,ShipName) 表。初始加载后,我在每一行添加一个新列,上面有一个复选框。现在我的 UI 看起来像这样。
使用复选框添加额外列的代码。
DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.Name = "Delete";
checkColumn.HeaderText = "Delete";
checkColumn.Width = 50;
checkColumn.ReadOnly = false;
dataGridView1.Columns.Add(checkColumn);
另外,我有一个名为删除的按钮,单击该按钮应删除选中复选框的所有行。
for (int i = dataGridView1.Rows.Count-1; i >=0 ; i--)
{
DataGridViewRow row = dataGridView1.Rows[i];
bool isChecked = dataGridView1[3, i].Value != null && (bool)dataGridView1[3, i].Value != false;
if (isChecked)
{
dataGridView1.Rows.RemoveAt(i);
}
}
但是,每次我点击一些复选框然后按钮删除时,最后一次点击的总是不会被删除。
经过一些调试,我发现如果我单击一些复选框,然后单击 UI 中的其他任何位置,然后在按钮上删除它,它会按预期工作。
那么,这是一个已知的错误吗?难道我做错了什么?
更新
在 delete 方法中添加了一个计数器,这样我就可以计算有多少复选框被勾选并继续进行另一个测试:
1:我点击前两个复选框,然后按钮删除。第一行被删除,计数器为1。
2:我点击了前两个复选框,然后点击了UI的空白区域,然后按钮删除。两个勾选的行都被删除了。计数器是2。
所以问题是在视觉上勾选了复选框,但在代码中最后一个不是,除非我改变我的焦点。
解决方案
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells[3].Value)) //Column Delete
{
// what you want to do
}
}
您忘记通过使用将值转换为布尔值
Convert.ToBoolean()