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

 在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值