C#DataGridView可重入调用问题

时间:2016-12-06 14:08:48

标签: c# winforms datagridview

C#winforms

我从对象列表中填充了DataGridViewDataGridView设置为使用fullrowselect并关闭多选。

我在桌子上方有一个按钮,可以用来选择下一行。我在表格上方有一个Checkbox,用于更改所选行的一个单元格中的数据。 buttonCheckbox都可以独立完成。

我希望这样做,以便当他们检查Checkbox时,它会更改所选行单元格中的数据,然后选择表格中的下一行。

无论我怎么做,我都会立即得到可重入的调用错误,或者当我稍后尝试再次选择该行时。

我尝试BeginInvokeBackGroundWorker,使用计时器更改行选择,设置变量以记住行并在行选择更改后或行验证后更改值。每次尝试都会给我同样的错误。

我的代码太长了,无法在此发布,但我可以创建一个简单的应用来证明问题,如果需要。

请帮忙。

以下是代码:

private void chkDone_CheckedChanged(object sender, EventArgs e)
    {
        ProcedureCode proc = getCode(gridCodes.SelectedRows[0].Cells[3].Value + "");
        proc.done = chkDone.Checked;
        setPnlProgress();
        if(chkDone.Checked)
        {
            btnNext_Click(sender, e);
        }
    }

private void btnNext_Click(object sender, EventArgs e)
    {
        int cRow = gridCodes.SelectedRows[0].Index;
        if (cRow < gridCodes.RowCount - 1)
        {           
            gridCodes.CurrentCell = gridCodes[0, cRow + 1];
        }
    }

以下是表格和复选框的屏幕截图:Click to see screenshot

第二个checkbox标记的Done是更改所选行的单元格中的值的那个。第三个圈button选择下一行。

1 个答案:

答案 0 :(得分:0)

当我进入下一行以及用户点击复选框时,我发现复选框CheckChanged事件被触发了。我在行进入阶段添加了一个标记来跳过任何操作,这解决了重入错误。