Попробуйте обработать событие CellMouseUp
.
Вы можете проверить, в каком столбце произошло событие MouseUp
, чтобы увидеть, является ли это вашим столбцом флажка.
Вы также можете узнать, находится ли он в режиме редактирования, и программно завершить режим редактирования, что, в свою очередь, вызовет событие CellValueChanged
.
В приведенном ниже примере у меня есть DataGridView с двумя столбцами.
Первый - DataGridViewTextBoxColumn
, а второй - DataGridViewCheckBoxColumn
.
Когда флажок изменится, первый столбец будет отражать его состояние проверки, не выходя из строки или ячейки.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add("False", false);
dataGridView1.Rows.Add("True", true);
}
private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 1 && e.RowIndex >-1 && dataGridView1.Rows[e.RowIndex].Cells[1].IsInEditMode)
{
dataGridView1.EndEdit();
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1)
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value =
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
}
}
}