数据网格复选框列选择不正确
本文关键字:选择 不正确 列选 复选框 数据网 网格 数据 | 更新日期: 2023-09-27 18:11:47
我想有一个带有复选框的列,当用户单击它们时,它们选择自己的行(突出显示它)。我已经想出了这个代码,与不做的工作,我怎么能解决它?
有更好的方法吗?(即使在我取消选中复选框后,该行仍保持高亮显示)。
private void dataGrid_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
if (Convert.ToBoolean(dataGrid.Rows[e.RowIndex].Cells[0].Value) == true)
dataGrid.Rows[e.RowIndex].Selected = false;
else if (Convert.ToBoolean(dataGrid.Rows[e.RowIndex].Cells[0].Value) == false)
dataGrid.Rows[e.RowIndex].Selected = true;
}
}
尝试将逻辑放置在CellMouseUp
事件处理程序中,因为CellClick
事件发生在CheckBox状态更新之前。
使用EditedFormattedValue
属性(包含单元格的当前格式化值)来检索复选框的当前状态。
Value属性是单元格包含的实际数据对象,而FormattedValue是它的格式化表示形式对象。
存储单元格的当前格式化值,无论是否单元格处于编辑模式,值尚未提交。
下面是一个工作示例。
void dataGrid_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
DataGridViewCheckBoxCell checkBoxCell =
dataGrid.Rows[e.RowIndex].Cells[0] as DataGridViewCheckBoxCell;
if (checkBoxCell != null)
{
dataGrid.Rows[e.RowIndex].Selected = Convert.ToBoolean(checkBoxCell.EditedFormattedValue);
}
}
}
CellMouseUp
将无法使用空格键进行选择。
如果你不需要做"real"选择,我会在单元格值改变时改变行背景颜色,这会更容易:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[0].Value) == true)
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Blue;
else if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[0].Value) == false)
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}