所以我在这里看到了几个帖子,我尝试了所有解决方案都无济于事。我在网上尝试了几个例子,没有任何效果。它嘲弄我!以下代码是我现在正在运行的代码,我觉得应该可以运行,但它并没有。问题是如果值不是真或假,那么它会因无效的强制转换而爆炸,因为该值显示为{}。如果该值为真,那么在cell.Value = cell.TrueValue的情况下,它永远不会被标识为true。我将datagridview设置中的TrueValue和FalseValue分别设置为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;
}
我想我终于得到了它的一部分。 cell.Value == DBNull.Value表示新的处女复选框。 cell.Value == cell.FalseValue仍无效。
更新代码
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 = "";
}
答案 0 :(得分:2)
特别是对于这个问题可能不是正确的解决方案,但对我来说对于获取单元格检查值非常有用:
使用事件CellContentClick而不是CellClick。第一个触发器仅在正确单击检查时触发,第二个触发器在单元的任何部分单击时触发,这是一个问题。除了因为任何原因DataGridViewCheckBoxCell.EditedFormattedValue错误地返回它的值与CellClick,我们将使用EditedFormattedValue。
使用此代码:
DataGridViewCheckBoxCell currentCell = (DataGridViewCheckBoxCell)dataGridView.CurrentCell;
if ((bool)currentCell.EditedFormattedValue)
//do sth
else
//do sth
答案 1 :(得分:0)
DataGridView.Rows[0].Cells[0].Value = true;
or
DataGridView.Rows[0].Cells[0].Value = false;