同一DataTable下创建多个结构数据相同的DataView的小问题

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

昨天在根据经理的要求修改公司后台的时候,遇到了一个很奇怪的问题

DataView dvFocus =newDataView(ds.Tables[0]);

DataView dvLook=newDataView(ds.Tables[0]);

DataView dvNewUser=newDataView(ds.Tables[0]);

DataView dvConsume=newDataView(ds.Tables[0]);

DataView dvUsual=newDataView(ds.Tables[0]);

大概的意思就是用同一个DataTable来创建多个DataView,结构和数据都相同。

然后对前4个DataView使用RowFilter进行筛选,筛选完成之后,从最后一个DataView里剔除掉前面重复的数据

这个时候,问题就来了

if(dvConsume.Count >0)

{for(inti =0; i < dvConsume.Count; i++)

{for(intj =0; j < dvUsual.Count; j++)

{if(dvConsume[i]["UserID"].ToString() == dvUsual[j]["UserID"].ToString())

{

dvUsual[j].Delete();

}

}

}

}

这个dvConsume里只有一行数据,并且我是放在最后进行筛选的,根据代码来看,应该是没什么问题的,可是

每次都会出现【索引 0 不是为负数,就是大于行数。】这个错误,让我很是郁闷,因为代码没有逻辑上的问题啊

由于哪会儿快下班了,于是就把问题放到了今天来解决

在此断点调试,比对数据,发现

dvUsual[j].Delete();

这个删掉的行会同步到每个DataView,我的天,原来问题出在这

然后我去百度DataTable下的多个DataView是否会同步,没有结果

于是想到了clone()这个方法,果断试了下,一运行,发现一条数据都没有了。

然后看了下clone()的描述,原来是复制结构和约束,不复制数据。

最后找到了Copy()这个方法,复制结构和数据,我心想应该可以了

运行,没报错。

问题解决

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航