我想要一个带有复选框的列,当用户点击它们时,它们会选择自己的行(高亮显示它)。我已经提出了这个代码,如果不能完成这项工作,我该如何解决?
有更好的方法吗? (即使在“取消选中”复选框后,该行也会保持高亮显示。)
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;
}
}
答案 0 :(得分:1)
尝试将逻辑放在CellMouseUp
事件处理程序中,因为在更新CheckBox状态之前发生了CellClick
事件。
这与使用EditedFormattedValue
属性(包含单元格的当前格式化值)一起检索CheckBoxes当前状态。
来自MSDN:
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);
}
}
}
希望这有帮助。
答案 1 :(得分:0)
CellMouseUp
无效
如果您不必进行“真实”选择,我会在单元格值更改时更改行背景颜色,这样会更容易:
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;
}
}