Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DataGridView.CellContentClick

Tags:

c#

winforms

DataGridView.CellContentClick is not firing if I mouse click a DataGridViewCheckBoxCell very fast. How can I solve this? I need to know when CheckBox's check state changes

like image 410
Cornel Avatar asked Dec 10 '22 22:12

Cornel


1 Answers

Try handling the CellMouseUp event.
You can check which colum the MouseUp event occurred in to see if it is your checkbox column.
You can also find out if it is in edit mode and end the edit mode programmatically, which in turn will fire the CellValueChanged event.

In the example below, I have a DataGridView with two colums.
The first is a DataGridViewTextBoxColumn and the second is a DataGridViewCheckBoxColumn.
When the checkbox changes, the first column wil reflect its check state, without having to move from the row or cell.

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(); 
        }
    }
}
like image 156
Colby Africa Avatar answered Dec 25 '22 07:12

Colby Africa