DataGridView在更改CurrentCell时更改CurrentCell

时间:2018-02-21 11:55:49

标签: .net datagridview

"初始"问题

DataGridView被绑定到BindingList的子类(" Sorted")。班级"排序"负责订购数据。当数据在"排序"被改变了,"排序" class将当前数据移动到正确的位置。 DataGridView中的数据也会发生变化,所以没关系。

示例:

A
C
B <- current entry. 

离开后:

A
B
C

但是..当用户更改导致行移动并离开单元格的数据时,下一个活动单元格(焦点)是同一行中的下一个单元格。但我想将焦点设置为新行中的单元格。

示例:

A 1
C 2
B 0 
^ focus

按Tab / Enter:

A 1
B 0
C 2 
  ^ focus

但我想把重点放在:

A 1
B 0
  ^ focus
C 2 

计算正确的单元格不是问题(&#34; Sorted&#34;列表执行事件)。但在哪种情况下我可以设置正确的CurrentCell?我试过的每一个事件都以闪烁或异常结束,因为递归而无法在此处设置CurrentCell。

1 个答案:

答案 0 :(得分:0)

一个非常肮脏但有效的解决方案:

private DataGridViewCell ThreadCellSelect = null;
private void SetNextCell(DataGridViewCell newSelection)
{
    Thread t = new Thread(new ThreadStart(ThreadSetDGVCell));
    ThreadCellSelect = newSelection;
    t.Start();
}
private void ThreadSetDGVCell()
{
    if (this.InvokeRequired)
    {
        Thread.Sleep(1); // next time slice
        Invoke((MethodInvoker)delegate () { ThreadSetDGVCell(); });
    } else
    {
        if (ThreadCellSelect != null)
        {
            this.CurrentCell = ThreadCellSelect;
            ThreadCellSelect = null;
        }
    }
}