C# datagridview 的过滤更新问题

DGV 过滤后,显示已经是过滤后的结果,但是更新时发生了奇怪的现象,就是DGV里面的内容没有变化。代码是这样的:

过滤代码

        String str = "0";
            //if (str.Length == 0) return;
            DataTable dt = (DataTable)dgvBase.DataSource;
            if (dt == null) return;
            String filter;
            filter = String.Format( "dat_type not like '%{0}%' and is_checked='N'", str);
            dt.DefaultView.RowFilter = filter;
            dgvBase.DataSource = dt;//!!!!!!!!!!!!!!!!

本以为,这样过滤,显示正确了,更新也就没问题了。但是结果不对。后来发现在拷贝网上代码时,上面的最后一行抄错了。应该是

dgvBase.DataSource = dt.DefaultView;
这样才基本符合要求,但是问题又来了,就是更新代码中用的是这种方法

  public static bool UpdateOneColInDgv(DataGridView dgv,int curRow, string col,string val)
        {
            DataTable dt = (DataTable)dgv.DataSource;//!!!!!!!!!!!!!
            if (dt == null)
            {
                return false;
            }
            DataRow dr;
            {
                dr = dt.Rows[curRow];
            }

            dr[col] = val;
            return true;
        }

第一行报错,因为是dataview ,不能转换table 。…
经过痛苦思考,发现,view可以转化成table,这样将过滤代码改成如下形式:

     String str = "0";
            //if (str.Length == 0) return;
            DataTable dt = (DataTable)dgvBase.DataSource;
            if (dt == null) return;
            String filter;
            filter = String.Format( "dat_type not like '%{0}%' and is_checked='N'", str);
            dt.DefaultView.RowFilter = filter;
            dgvBase.DataSource =  dt.DefaultView.ToTable();//!!!!!!!!!!!!!!!!

这样后面的更新代码就不用改了。调试通过。

马拉孙 2021-09-19 于泛五地区。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值