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

来源:互联网 发布:顺丰科技java笔试 编辑:程序博客网 时间:2024/06/06 13:21

 在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

原创粉丝点击