Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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中仅选中两个DataGridViewCheckBox列中的一个或为true_C# - Fatal编程技术网

C# 如何在DataGridView中仅选中两个DataGridViewCheckBox列中的一个或为true

C# 如何在DataGridView中仅选中两个DataGridViewCheckBox列中的一个或为true,c#,C#,我有一个定义了五列的DataGridView。用户在运行时通过openFileDialog选择一个或多个文件来填充DataGridView,并将文件名加载到DataGridView的第一列。第二列和第三列包含复选框,用于指示应如何处理文件名。真值为1,假值为0。但是,用户只需要能够为每个文件名选择两个复选框中的一个。如果用户选中其中一个复选框,我希望另一个复选框(如果选中)变为未选中。下面是我的代码。它不会生成任何错误,并且当它偶尔使复选框在选中另一个复选框时变为未选中时,它可能会在同一列或另一

我有一个定义了五列的DataGridView。用户在运行时通过openFileDialog选择一个或多个文件来填充DataGridView,并将文件名加载到DataGridView的第一列。第二列和第三列包含复选框,用于指示应如何处理文件名。真值为1,假值为0。但是,用户只需要能够为每个文件名选择两个复选框中的一个。如果用户选中其中一个复选框,我希望另一个复选框(如果选中)变为未选中。下面是我的代码。它不会生成任何错误,并且当它偶尔使复选框在选中另一个复选框时变为未选中时,它可能会在同一列或另一列中取消选中另一个复选框,但决不会在同一行中取消选中。我需要学习如何使用调试器,并将在遇到困难时立即处理此问题,但在此期间,如果能得到任何帮助,我将不胜感激:

private void dataGridViewInputReports_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex > 0 && e.ColumnIndex < 3)
    {
        if (Convert.ToInt16(dataGridViewInputReports.Rows[e.RowIndex].Cells[e.ColumnIndex].Value) == 1)
        {
            if (e.ColumnIndex == 1)
            {
                dataGridViewInputReports.Rows[e.RowIndex].Cells[2].Value = 0;
            }
            else if (e.ColumnIndex == 2)
            {
                dataGridViewInputReports.Rows[e.RowIndex].Cells[1].Value = 0;
            }
        }
    }
}
您可以参考此内容了解如何在多个选择上执行操作。这适用于多个选择以进行删除。
这可能有助于回答您的问题。

解决方案是不使用CellValueChanged事件,而是使用CellClick事件。我在这里找到了这样的指导:其中说明了当用户单击复选框单元格时是否要立即响应,您可以处理DataGridView.CellClick事件,但此事件发生在单元格值更新之前。如果在单击时需要新值,一个选项是根据当前值计算期望值。因此,如果用户单击选中=1的复选框,我必须编写代码,知道复选框的值将变为未选中=0,但现在它仍然选中=1。此代码将切换在同一dataGridView行中选中两个复选框中的哪一个:

private void dataGridViewInputFiles_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex == 1 || e.ColumnIndex == 2)
    {
        if (Convert.ToInt16(dataGridViewInputFiles.Rows[e.RowIndex].Cells[e.ColumnIndex].Value) == 0)
        {
            if (e.ColumnIndex == 1)
            {
                dataGridViewInputFiles.Rows[e.RowIndex].Cells[2].Value = 0;
            }
            else if (e.ColumnIndex == 2)
            {
                dataGridViewInputFiles.Rows[e.RowIndex].Cells[1].Value = 0;
            }
        }
        else
        {
            if (e.ColumnIndex == 1)
            {
                dataGridViewInputFiles.Rows[e.RowIndex].Cells[2].Value = 1;
            }
            else if (e.ColumnIndex == 2)
            {
                dataGridViewInputFiles.Rows[e.RowIndex].Cells[1].Value = 1;
            }
        }
    }
}