惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
博客园 - 【当耐特】
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理

博客园 - 秋枫

使用BizTalk Server常见问题处理 BizTalk Server中简单xml架构使用举例 CodeProject.com上微软BizTalk平台技术文章集锦 BizTalk Server 2006中使用MQSeries适配器问题处理 基于.Net平台应用程序唯一运行实例实现 使用BizTalk Server的Sql适配器出现“新事务不能登记到指定的事务处理器中”异常的处理 谈基于.net平台windows开发中的模式窗体 Visual studio 2005下xml的xsl转换调试 小提国内一些提供RSS服务的网站生成Rss文件问题 Visual studio .net 的“隐蔽性”和容易“忽略”的功能 使用sqlcmd(osql) 实用工具列出本地网内的Sql Server 服务器 《敏捷注册表》1.0使用说明书 《敏捷注册表》1.0概述 使用Microsoft SQL Server 2000的XML查询 asp.net中显示DataGrid控件列序号的几种方法 使用.net framewrok 1.1版System.Windows.Forms.TreeView的一个问题 使用.net framewrok 1.1版注册表API的局限和解决 使用SaveFileDialog需要注意的情况 使用.net framework中常用类在2.0版中的新功能
使用从BindingManagerBase.PositionChanged 事件的注意点
秋枫 · 2005-10-31 · via 博客园 - 秋枫

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的那条了。如果针对当前记录进行处理的代码没有考虑这一点,那可能就会引起不容易发现的逻辑问题。