使用BindingManagerBase.PositionChanged 事件注意点

CurrencyManager 类是从抽象类BindingManagerBase派生,当开发基于数据库的应用程序时,经常会在界面层进行数据绑定来显示数据库的数据,由此,通过注册BindingManagerBase.PositionChanged 事件来实现在显示的记录上下移动时进行操作,一般都通过PositionChanged 事件来更新菜单或工具栏的状态。但是有些的时候,如果不注意可能引起逻辑上思维上错误,下面就是这种情况。

假设DataGrid绑定了某个DataTableDataView。设置DataView.RowFilter = null,或DataView.RowFilter = String.Empty;显示了所有10条记录。假设当前记录的索引为0,也就是第一条,到DataView.RowFilter设置为其它条件进行过滤时,假设显示了5条记录,新的数据当前记录的索引还是为0(没有人为改变)。如果使用者刚好注册了.PositionChanged 事件来处理一些动作,那这个事件是不会触发的,当然这里可以通过代码直接调用事件处理程序。

private void Position_Changed(object sender, EventArgs e)

{

   // 处理代码

}

上面的步骤可能就会有问题存在, PositionChanged 事件虽然没有发生,但是过滤后 5 条记录中的索引为 0 的那条可能已经不是过滤前 10 条记录中索引为 0 的那条了。如果针对当前记录进行处理的代码没有考虑这一点,那可能就会引起不容易发现的逻辑问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值