以编程方式选择datagridview行不会触发bindingsource.currentchanged事件

时间:2010-07-15 05:18:25

标签: c# winforms

这是一个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?我该怎么解雇这个事件?

3 个答案:

答案 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