不能识别DataGridViewCheckBoxCell的值

本文关键字:的值 DataGridViewCheckBoxCell 识别 不能 | 更新日期: 2023-09-27 18:02:21

所以我在这里看到了几个帖子,我尝试了每一个解决方案都无济于事。我在网上试过几个例子,但都没有效果。它在嘲弄我!下面的代码是我现在运行的,我觉得应该工作,但它没有。问题是,如果值不是true或false,那么它就会因为无效强制转换而爆炸,因为值显示为{}。如果值为true,那么它永远不会被识别为true。Value = cell.TrueValue。我将datagridview设置中的TrueValue和false分别设置为true和false。我错过了什么?

       DataGridViewCheckBoxCell cell =
            (DataGridViewCheckBoxCell) ((DataGridView) sender).Rows[e.RowIndex].Cells[e.ColumnIndex];
        if (cell.ValueType == typeof(bool))
        {
            if (cell.Value != null && !(bool)cell.Value)
                cell.Value = cell.TrueValue;
            else
                cell.Value = cell.FalseValue;
        }

我想我终于得到了一部分。细胞。Value == DBNull。新处女复选框的值。细胞。Value == cell。

更新代码
            if (cell.ValueType == typeof (bool))
            {
                if (cell.Value == DBNull.Value || cell.Value == cell.FalseValue)
                {
                    cell.Value = cell.TrueValue;
                }
                else if ((bool)cell.Value)
                {
                    cell.Value = cell.FalseValue;
                }
            }

我终于搞定了。最后一个问题通过使用Convert.ToBoolean(cell. value) == false而不是cell来解决。Value == cell。FalseValue

最终代码:

DataGridViewCheckBoxCell cell =
            (DataGridViewCheckBoxCell)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex];
        if (cell.ValueType != typeof (bool)) return;
        if (cell.Value == DBNull.Value || Convert.ToBoolean(cell.Value) == false)
        {
            cell.Value = cell.TrueValue;
            ((DataGridView)sender).Rows[e.RowIndex].Cells["Comment"].Value = "Not in source.";
        }
        else 
        {
            cell.Value = cell.FalseValue;
            ((DataGridView)sender).Rows[e.RowIndex].Cells["Comment"].Value = "";
        }

不能识别DataGridViewCheckBoxCell的值

可能不是这个问题的正确解决方案,但对我来说很有用,以便获得单元格检查值:

使用事件CellContentClick而不是CellClick。第一个仅在正确单击复选框时触发,第二个则在单击单元格的任何部分时触发,这是一个问题。此外,由于任何原因,DataGridViewCheckBoxCell。EditedFormattedValue在CellClick中返回的值是错误的,我们将使用EditedFormattedValue。

使用以下代码:

DataGridViewCheckBoxCell currentCell = (DataGridViewCheckBoxCell)dataGridView.CurrentCell;
if ((bool)currentCell.EditedFormattedValue)
     //do sth
else
     //do sth
DataGridView.Rows[0].Cells[0].Value = true; 
or 
DataGridView.Rows[0].Cells[0].Value = false;