如何验证是否已检查DataGridViewCheckBoxCell

时间:2009-10-13 22:03:20

标签: c# winforms datagridview datagridviewcheckboxcell

我已将数据表绑定到DataGridView,此数据表有一个名为“Status”的列,其类型为Boolean。我可以通过代码将值设置为truefalse

但是,我无法弄清楚如何检查是否已经检查过给定的行。这是我试图使用的代码,并且编译它显示错误“指定的强制转换无效”。

任何帮助都将不胜感激。

if (rowIndex >= 0)
{
    var cbxCell = (DataGridViewCheckBoxCell)dgvScan.Rows[rowIndex].Cells["Status"];

    if ((bool)cbxCell.Value)
    {
        // Do stuff
    }
    else
    {
        // Do other stuff
    }
}

7 个答案:

答案 0 :(得分:8)

问题是DataGridCheckBoxColumn的默认FALSE值为null,Default TRUE值是布尔值True。这会导致问题,因为布尔值不可为空。您可以通过两种方式解决此问题:

    if (cbxCell.Value != null && (bool)cbxCell.Value)
    {
        do stuff;
    }

解决此问题的另一种方法是将列的TrueValue属性设置为某个值。这可以在设计时完成,如下所示:

enter image description here

然后你可以写:

    if ((string)cbxCell.Value == "T")
    {
        do stuff;
    }

这是因为字符串可以为空。

请注意:即使我将FalseValue设置为F,false值仍然似乎为null,所以我建议忽略FalseValue属性。

另一个注意事项:如果您在上面的TrueValue中放置了一些东西然后尝试擦除它,则True值变为null(ouch),要求您删除该列然后重新添加它以将其恢复为默认值条件。或者您可以在代码中更改它,如下所示:

((DataGridViewCheckBoxColumn)DataGridView1.Columns["Selected"]).TrueValue = true

答案 1 :(得分:4)

谢谢大家。 有同样的问题,但我发现编写senderGrid.EndEdit(),在检查值之前,解决它。

HTMLElement

保持良好的工作

答案 2 :(得分:1)

 if (Convert.ToBoolean(dgvScan.Rows[rowIndex].Cells["Status"].Value))
{
//Do Something
}
else {
// Do Something
}

答案 3 :(得分:1)

可能遇到的另一个问题是:

当用户单击单元格以选中或取消选中该框时,在单元格失去焦点之前,不会更改基础值。

如果相关代码位于按钮中,则不会出现问题,因为单击按钮时单元格将失去焦点。但是如果您的代码是从计时器触发的,您可能仍在检查“旧”值。

请在此处查看我的其他答案: https://stackoverflow.com/a/22080846/1015072

答案 4 :(得分:0)

我之前没有经验,但我想你应该检查列或属性的值。

试着看看这个例子:

http://programmingwithstyle.blogspot.com/2007/06/how-to-get-from-datagridviewcheckboxcel.html

答案 5 :(得分:0)

CbxCell.Value必须等于DBNull.Value(您的列可以包含空值吗?)

我会在投射前检查DBNull:

if (!DBNull.Value.Equals(CbxCell.Value) && (bool)CbxCell.Value == true)
{
    //Do stuff
}
else
{
    //Do Stuff
}

答案 6 :(得分:0)

bool checked = cell.Value as bool? ??  false;