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 于泛五地区。