昨天在根據經理的要求修改公司后臺的時候,遇到了一個很奇怪的問題
DataView dvFocus = new DataView(ds.Tables[0]); DataView dvLook = new DataView(ds.Tables[0]); DataView dvNewUser = new DataView(ds.Tables[0]); DataView dvConsume = new DataView(ds.Tables[0]); DataView dvUsual = new DataView(ds.Tables[0]);
大概的意思就是用同一個DataTable來創建多個DataView,結構和數據都相同。
然后對前4個DataView使用RowFilter進行篩選,篩選完成之后,從最后一個DataView里剔除掉前面重復的數據
這個時候,問題就來了
if (dvConsume.Count > 0) { for (int i = 0; i < dvConsume.Count; i++) { for (int j = 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()這個方法,復制結構和數據,我心想應該可以了
運行,沒報錯。
問題解決
新聞熱點
疑難解答