这是一个Winform C#问题。
我有一个自定义的datagridview,它绑定到bindingsource。有一个监听器监听bindingsource.currentchanged事件。
当我订阅自定义datagridview的已排序事件并以编程方式选择一行时,不会触发bindingsource.currentchanged事件:
dataGridViewExtended.Sorted += SortedCompleted;
private void SortedCompleted(...){
// Some code to get rowIndex...
dataGridViewExtended.Rows[rowIndex].Selected = true;
}
为什么以编程方式更改datagridview行的选择不会触发bindingsource.currentchanged?我该怎么解雇这个事件?
答案 0 :(得分:3)
您可以使用 CurrentCell 属性设置CurrentRow。
CurrentRow 是ReadOnly。
选定的属性不会影响到CurrencyManager。
在一些DataGridView事件中从一些代码更改CurrentRow有一些限制,它可能会抛出异常。
要从Dgv事件更改CurrentRow,您可以在更改后使用 Control.BeginInvoke 到Async。
答案 1 :(得分:1)
我找到了原因。选择DataGridView行不会触发BindingSource的CurrentChanged事件。部分原因是可以同时选择多行。要触发该事件,您需要设置DataGridView的CurrentCell。任何时候,CurrentCell只能是一个。一旦更新了CurrentCell,就会触发CurrentChanged事件。
就我而言,只需将所选行的第一个单元格设置为CurrentCell即可。
答案 2 :(得分:1)
CurrencyManager DtCm; //SETUP CURRENCY MANAGER
DtCm = (CurrencyManager)this.BindingContext[DtTable]; //BIND CURRENCY MANAGER
int F = Dgv.CurrentRow.Index; //SET INDEX POSITION
this.DtCm.Position = F; //RESTORE POSITION