C# 以编程方式选择datagridview行不会触发bindingsource.currentchanged事件
这是一个WinC形式的问题 我有一个定制的datagridview,它绑定到bindingsource。有一个侦听器正在侦听bindingsource.currentchanged事件 当我订阅自定义datagridview的排序事件并以编程方式选择行时,bindingsource.currentchanged事件不会被激发:C# 以编程方式选择datagridview行不会触发bindingsource.currentchanged事件,c#,winforms,C#,Winforms,这是一个WinC形式的问题 我有一个定制的datagridview,它绑定到bindingsource。有一个侦听器正在侦听bindingsource.currentchanged事件 当我订阅自定义datagridview的排序事件并以编程方式选择行时,bindingsource.currentchanged事件不会被激发: dataGridViewExtended.Sorted += SortedCompleted; private void SortedCompleted(...){
dataGridViewExtended.Sorted += SortedCompleted;
private void SortedCompleted(...){
// Some code to get rowIndex...
dataGridViewExtended.Rows[rowIndex].Selected = true;
}
为什么以编程方式更改datagridview行的选择不会触发bindingsource.currentchanged?我怎样才能触发该事件?我找到了原因。选择DataGridView行不会触发BindingSource的CurrentChanged事件。部分原因是可以同时选择多行。要触发该事件,需要设置DataGridView的CurrentCell。任何时候,CurrentCell只能是一个。更新CurrentCell后,将立即触发CurrentChanged事件
在我的情况下,只需将所选行的第一个单元格设置为CurrentCell即可。我找到了原因。选择DataGridView行不会触发BindingSource的CurrentChanged事件。部分原因是可以同时选择多行。要触发该事件,需要设置DataGridView的CurrentCell。任何时候,CurrentCell只能是一个。更新CurrentCell后,将立即触发CurrentChanged事件 在我的例子中,只需将所选行的第一个单元格设置为CurrentCell即可。您可以使用CurrentCell属性设置CurrentRow CurrentRow是只读的 所选属性不影响CurrencyManager 在某些DataGridView事件中,从代码更改CurrentRow有一些限制,它可能引发异常 要从Dgv事件更改CurrentRow,可以使用Control.BeginInvoke异步发布更改。可以使用CurrentCell属性设置CurrentRow
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
CurrentRow是只读的
所选属性不影响CurrencyManager
在某些DataGridView事件中,从代码更改CurrentRow有一些限制,它可能引发异常
要从Dgv事件更改CurrentRow,可以使用Control.BeginInvoke异步发布更改。表单从Control继承。编写BeginInvoke时,您可以调用您的表单。BeginInvoke.Form继承自控件。写作开始,你称之为表单。
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