Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止自动切换复选框取消/签入DataGridView_C#_.net_Winforms_Checkbox_Datagridview - Fatal编程技术网

C# 防止自动切换复选框取消/签入DataGridView

C# 防止自动切换复选框取消/签入DataGridView,c#,.net,winforms,checkbox,datagridview,C#,.net,Winforms,Checkbox,Datagridview,我有一个带有列复选框的datagridview 我想要的是复选框单击(我使用CellContentClick事件) 我想显示一个消息框,如果用户按ok。。然后选中复选框并启动新查询。否则按取消或关闭消息框->未选中复选框 但是我有个问题要解决 private void dgvApprovazione_CellContentClick(object sender, DataGridViewCellEventArgs e) { try {

我有一个带有列复选框的datagridview

我想要的是复选框单击(我使用CellContentClick事件) 我想显示一个消息框,如果用户按ok。。然后选中复选框并启动新查询。否则按取消或关闭消息框->未选中复选框

但是我有个问题要解决

   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);
        }
    }
编辑-- 我没有访问设计窗口的权限。复选框是一个二进制列,它是read DB的结果。 DB中的字段是真/假类型。。在datagridview中,我有复选框和复选框


我希望在“代码时间”中捕获并防止自动检查。

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

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;
        }
    }
} 

单元格中没有真正的
复选框
,事件的发送方是
DataGridView

对不起,现在我是。。。。。我在设计时没有访问权限。。。因为复选框是关于某个字段的db结果(真/假)。根据前面的问题,您可能需要检查单击的单元格是否不属于新行:使用
e.RowIndex=dataGridView1.newRowIndex
如果我的复选框已选中,此策略不会阻止自动选中或取消选中。但取消选中时工作良好。。。选中时,我希望设置只读复选框。复选框是否选中并不重要。我们在这里做的工作是1-使单元格只读。因此,您无法手动选中或取消选中它。2-处理
cellcontent单击
并将逻辑放在那里,以提供要选中或取消选中的逻辑。所以你可以在这里有任何逻辑。例如,您可以设置value=!如果要切换项目检查或任何其他逻辑,则为。True!我很抱歉。。星期一我仍然被星期六晚上(星期天早上)搞糊涂了。。哈哈:谢谢!我已经挣扎了3天,试图弄明白如何使用DataGridView的内置复选框支持作为“单选按钮”,一次只能选择一行。(所有未选中的行都是非法状态。)这是最干净、最简单、最优雅的解决方案,无需编写自定义控件。非常感谢。