关于DataGridView的行visible的问题

转自:http://blog.163.com/qiaoqiaoyouxiang@126/blog/static/13260743120106281047324/

谢谢原创,留作学习参考。

在DataGridView中,选择行无法隐藏的问题!

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

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

 

     在这里可以看出明显是数据绑定问题,就是货币管理器的问题:这下问题好解决了;

CurrencyManager:货币管理类,通过如下方法可以获取。在CurrencyManager中有2个方法

SuspendBinding(),ResumeBinding()(详细资料可以查询MSDN)

 

CurrencyManager cm = (CurrencyManager)BindingContext[DataGirdView.Source];

cm.SuspendBinding(); 挂起数据绑定

.........

DataGridView.SelectedRows[0].Visible = false;

.........

cm.ResumeBinding(); 恢复数据绑定

 

*********************************

我的代码是:

 

DataGridViewHelper.TryGetCellValue<string>(dataGridViewRightCert.Rows[0], "ACTIVEID", ref ActiveID);
                DataGridViewHelper.TryGetCellValue<string>(dataGridViewRightCert.Rows[0], "CANCELACTIVEID", ref CancelActiveID);
               
                DataGridViewHelper.TryGetCellValue<DateTime>(dataGridViewRightCert.Rows[0], "CERTCREATEDATE", ref CertData); //取得现在证书的日期
                DateStor = CertData;
                DataGridViewHelper.BandData(dataGridViewRightCert, string.Format(TableViewFormat2, "2,4", ""), "BLDROOMID=" + BldRoomID + " order by CERTCREATEDATE");
                //遍历找date,存数组。
                count = dataGridViewRightCert.RowCount;
                Datearray = new DateTime[count];
                CurrencyManager cm = (CurrencyManager)BindingContext[dataGridViewRightCert.DataSource];
                for(int i = 0; i< count;i++)
                {
                    DataGridViewHelper.TryGetCellValue<DateTime>(dataGridViewRightCert.Rows[i], "CERTCREATEDATE", ref CertData);
                    cm.SuspendBinding(); //挂起数据绑定
                    dataGridViewRightCert.Rows[i].Selected = false;
                    dataGridViewRightCert.Rows[i].Visible = false;
                    Datearray[i] = CertData;
                    if(Datearray[i] == DateStor )
                        Cur_index = i;
                }

                Crule = Cur_index;
                dataGridViewRightCert.Rows[Cur_index].Selected = true;
                dataGridViewRightCert.Rows[Cur_index].Visible = true;
                cm.ResumeBinding(); //恢复数据绑定
                buttonRightCertPre.Enabled = true;
                buttonRightCertNxt.Enabled = true;
                dataGridViewRightCert.Refresh();

 

 

其中,如果不用上述方法,就会报错。或者另一个解决办法是rowfilter。参见:

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值