捕获和阻止复选框取消/检查DataGridView是否自动切换

时间:2016-03-30 10:40:47

标签: c# winforms checkbox datagridview

我有一个带有列复选框的datagridview enter image description here

我想要的是如果勾选复选框(我使用CellContentClick事件) 我想显示一个messageBox,如果用户按下确定..然后选中复选框并开始新查询。否则按Annul或关闭Messagebox - >未选中的复选框。

但是我有一个问题要实现..

   private void dgvApprovazione_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        try
        {

            if (dgvApprovazione.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewCheckBoxCell)
            {
                CheckBox checkboxTmp = sender as CheckBox;

                checkboxTmp.AutoCheck = false;


            }


        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

EDIT --- 我无法访问设计窗口。 Checkbox是一个dinamyc列,是读取DB的结果。 DB中的字段是真/假类型。在datagridview中,我有复选框,带有check或uncheck。

我希望捕获并阻止'代码时间'中的自动检测

1 个答案:

答案 0 :(得分:1)

您可以在启动时或使用列的ReadOnly属性添加列时使列只读,然后处理CelllContextClick并显示消息框并根据基础设置单元格的值消息框结果:

private void Form1_Load(object sender, EventArgs e)
{
    //Load data
    //Add columns

    //I suppose your desired coulmn is at index 0
    this.dataGridView1.Columns[0].ReadOnly = true;
}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    //I suppose your desired coulmn is at index 0
    if (e.ColumnIndex == 0 && e.RowIndex >= 0)
    {
        var result = MessageBox.Show("Check Item?", "", MessageBoxButtons.YesNoCancel);
        if (result == System.Windows.Forms.DialogResult.Yes)
        {
            ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = true;
        }
        else
        {
            ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value = false;
        }
    }
} 

单元格中没有真正的CheckBox,事件的发件人为DataGridView