首页 > 解决方案 > 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。

所以问题是在视觉上勾选了复选框,但在代码中最后一个不是,除非我改变我的焦点。

标签: c#datagridviewnorthwind

解决方案


foreach (DataGridViewRow row in dataGridView1.Rows)
{
     if (Convert.ToBoolean(row.Cells[3].Value)) //Column Delete
     {
          // what you want to do
     }
}

您忘记通过使用将值转换为布尔值Convert.ToBoolean()


推荐阅读