如何验证是否DataGridViewCheckBoxCell被选中(How to verify if

2019-07-23 10:26发布

我已绑定一个数据表到DataGridView ,此数据表中有一个名为“状态”列是类型的Boolean 。 我可以将值设置为truefalse通过代码就好了。

然而,我无法弄清楚如何检查是否给定行已签与否。 这是我想使用和编译它显示错误“指定的强制转换无效”的代码。

任何帮助,将不胜感激。

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

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

Answer 1:

问题是,对于一个DataGridCheckBoxColumn默认FALSE值为null,并且默认TRUE值为True布尔值。 这会导致一个问题,因为布尔值不可为空。 你可以解决这个问题的方法有两种:

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

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

然后,你可以这样写:

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

这工作,因为字符串是空。

请注意:即使我设置FalseValue为f假值似乎仍然是空的,所以我建议忽略FalseValue财产。

另一个注意:如果你把在TrueValue东西如上然后学尝试删除它,真值变为零(哎哟),requireing您删除列,然后才能将其恢复到初始状态重新添加。 或者你可以在代码如下更改:

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


Answer 2:

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

private void dgvRiscos_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        var senderGrid = (DataGridView)sender;
        senderGrid.EndEdit();

        if (senderGrid.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn &&
            e.RowIndex >= 0)
        {

            var cbxCell = (DataGridViewCheckBoxCell)senderGrid.Rows[e.RowIndex].Cells["associado"];
            if ((bool)cbxCell.Value)
            {
                   // Criar registo na base de dados
            }
            else
            {
                   // Remover registo da base de dados
            }
        }
    }

保持良好的工作



Answer 3:

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


Answer 4:

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

当用户点击的细胞选择或取消选择的方块中,基础值将不被改变,直到细胞失去焦点。

这会不会是一个问题,如果有问题的代码是一个按钮,因为细胞就会失去焦点,当您单击按钮。 但是,如果你的代码是从计时器所触发,您仍可以检查“老”的价值。

看到我其他的答案: https://stackoverflow.com/a/22080846/1015072



Answer 5:

我在这没有现成的经验,但我猜你应该检查的列或属性的值。

试着看看这个例子:

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



Answer 6:

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

我会检查的DBNull铸造之前:

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


Answer 7:

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


文章来源: How to verify if a DataGridViewCheckBoxCell is Checked