如何验证是否已检查DataGridViewCheckBoxCell

11 c# datagridview datagridviewcheckboxcell winforms

我已将数据表绑定到a DataGridView,此数据表有一个名为"Status"的列,该列属于类型Boolean.我可以通过代码将值设置为true或者false正常.

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

任何帮助,将不胜感激.

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

    if ((bool)cbxCell.Value)
    {
        // Do stuff
    }
    else
    {
        // Do other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rth 9

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

    if (cbxCell.Value != null && (bool)cbxCell.Value)
    {
        do stuff;
    }
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

然后你可以写:

    if ((string)cbxCell.Value == "T")
    {
        do stuff;
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

((DataGridViewCheckBoxColumn)DataGridView1.Columns["Selected"]).TrueValue = true
Run Code Online (Sandbox Code Playgroud)


小智 9

谢谢你们。有同样的问题,但我发现在检查值之前编写 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
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

保持良好的工作


Rob*_*loi 0

我以前没有这方面的经验,但我想您应该检查列或属性的值。

尝试看看这个例子:

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