更改单元格中的当前单元格输入DataGridView的事件

时间:2013-02-07 04:57:32

标签: c# winforms datagridview

我正在使用datagridview开发一个表单。

我想要的结果是:

  • 当用户点击ReadOnly Cell时,光标将移至可编辑单元格。
  • 当用户点击可编辑单元格时,光标将位于此当前可编辑单元格上。

我在Cell_Enter Event上做了这个(我有理由在Cell_Enter上编码。我必须使用Cell_Enter)。

DataGridViewCell cell = myGrid.Rows[cursorRow].Cells[cursorCol];
myGrid.CurrentCell = cell;
myGrid.BeginEdit(true);

点击Editable Cell即可,点击ReadOnly Cell会出现例外错误:

错误 - > 操作无效,因为它会导致对SetCurrentCellAddressCore函数的重入调用。

那么,这个问题有解决方案吗? (当用户点击ReadOnly Cell时,光标将移至Editable单元格。)

编辑:我想要的解决方案是如何将光标移动到非当前单元格的其他单元格?

3 个答案:

答案 0 :(得分:2)

我找到了解决此问题的解决方案here


      private void myGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            //Do stuff
            Application.Idle += new EventHandler(Application_Idle);

        }

        void Application_Idle(object sender, EventArgs e)
        {
            Application.Idle -= new EventHandler(Application_Idle);
            myGrid.CurrentCell = myGrid[cursorCol,cursorRow];
        }

答案 1 :(得分:1)

尝试使用If.. else ..statement

if (cursorCol == 1) //When user clicks on ReadOnly Cell, the Cursor will move to Editable Cell.
{
   myGrid.CurrentCell = myGrid[cursorRow, cursorCol];
}
else //When user clicks on Editable Cell, the Cursor will be on this Current Editable Cell.
{
  //Do stuff
  myGrid.BeginEdit(true);
}

答案 2 :(得分:1)

我不是100%肯定这会适合你的情况,但是由于我们客户的愚蠢UI要求,我曾经遇到过类似的问题。快速解决方法是将代码包装在BeginInvoke中。例如:

BeginInvoke((Action)delegate
{
    DataGridViewCell cell = myGrid.Rows[cursorRow].Cells[cursorCol];
    myGrid.CurrentCell = cell;
    myGrid.BeginEdit(true);
});

本质上,这将使它在CellEnter事件之后执行代码,允许DataGridView执行导致异常的幕后操作。

最终,它被重构为自定义控件,不再需要扩展DataGridViewBeginInvoke