C# 对NEW Datatable过滤排序,为何会影响到DataGridView的显示,BUG吗?

C# 对NEW Datatable过滤排序,为何会影响到DataGridView的显示,BUG吗?
见代码
paras = new SqlParameter[]{
new SqlParameter("@type", "待复核明细"),
new SqlParameter("@fhdjbh", PubVar.djbh)
};
dt = PubVar.sql.RunProcedureDR("LJH_FHT_mxfh", paras);
DataGridView1.DataSource = dt;
DataTable dtNew = dt;
string cxStr = string.Format("sptm LIKE '{0}%' or spbh like '%{0}%' or zjm like '%{0}%'", "a");
//排序,过滤
dtNew.DefaultView.RowFilter = cxStr;
dtNew.DefaultView.Sort = "pihao,shl";
如上代码:有个DataGridView,已经设置数据源了,我重新NEW了一个DataTable dtNew后,对dtNew排序或者过滤 界面的DataGridView1都会跟着变,求高人指导

6个回答

DataTable dtNew=dt.Clone();

sonnpy
sonnpy dt.copy() 才行, clone(); 只是复制了结构 谢谢你给我了灵感
5 年多之前 回复
sonnpy
sonnpy dt.copy() 才行, clone(); 只是复制了结构 谢谢你给我了灵感
5 年多之前 回复

DataTable dtNew = dt;并没有创建一个新的对象,其中dtNew和dt指向同一个datatable。

你倒是可以创建一个新的DataView(绑定的时候绑定到DataView):
DataView newView = new DataView(dt);
newView.RowFilter = cxStr;
...

sonnpy
sonnpy 嗯 我也发现在他们都是指的同一个DataTable 所以 我对 DtNew进行排序 或者 过滤时,DataGridView1都会跟着变,所以最后 的解决方法 如上面 熙风 讲的 要复制一个就可以了,因为我想把过滤的数据 传递给新的窗体进行显示
5 年多之前 回复

你操作的是不是那个datagridview的数据源来的?

因为你是直接绑定的。你可以每次查询创建一个新的dt

DataTable dtNew = dt;
这里你变量名有new有什么用?你要用new运算符创建一个新的。

sonnpy
sonnpy new 了也没有 发现都是指向同一个 DataTable
5 年多之前 回复

完美解决 谢谢上面 回答的朋友
采纳 熙风 的建议 不过是过滤之前 是 下面这样就可以了
dtNew = dtNew.Copy();

最后传递是 传递dtNew.DefaultView.ToTable()

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐