"初始"问题
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。
答案 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;
}
}
}