您的位置:首页 > 编程语言 > C#

[c#]DataGridView与货币管理器的位置关联的行不能设置为不可见异常处理机制

2013-07-26 08:42 204 查看
在DataGridView中,选择行无法隐藏的问题!

当直接用程序中的 DataGridView.SelectRows[0].Visible = false; 程序会报出一个异常!

异常错误如下:System.InvalidOperationException: 与货币管理器的位置关联的行不能设置为不可见。

网上很多解决方法。可是用起来却未必如愿。特别是当用户点击你DataGridView的列标题ColumnHeader(实际上不只是点击,只要按下鼠标)也会出导致出现上面的错误。

我搞了半宿,觉得DataGridView的实现上是有BUG的。而BUG的问题可能就是出在这IsBindingSuspended上(在类BindingManagerBase、CurrencyManager中)。如果你已经调用CurrencyManager.SuspendBinding();则CurrencyManager.IsBindingSuspended=true。这时如果你不会排序戓点击ColumnHeader,无论你如何隐藏行都不会出错。点击后你就会发现又出错了,而且再调用CurrencyManager.SuspendBinding();也是于是无补。我分析的原因是当你点击ColumnHeader的时候CurrencyManager.IsBindingSuspended又进入了“隐藏开启”状态。因此这时CurrencyManager.IsBindingSuspended=ture,而你的程序还是照样出错,这时候CurrencyManager.SuspendBinding();也是摆设。

左试右调找到了以下方法,不多说看代码:(下面的代码尽量)

CurrencyManager cm = (CurrencyManager)BindingContext[dgvr.DataGridView.DataSource];//

cm.SuspendBinding(); //挂起,这行必需有

dgvr.ReadOnly = true;//继续,这行可选,如果你的DataGridView是编辑的就加上吧。

dgvr.Visible = false;

cm.ResumeBinding();//继续,这行必需有

转自:http://hi.baidu.com/superxiaoxin/item/ab0eceb7e3225a97194697b5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐