日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataView.RowFilter使用

發布時間:2025/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataView.RowFilter使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有如下的DataView,現在按大類小類打印出分類列表.

??????? DataView dv = F.Studio.Trade.BLL.ClassBLL.Query().Tables[0].DefaultView;
??????? dv.RowFilter = "Code='0001'"; //這個設置無效
??????? dv.RowFilter = "Len(Code)=4";//獲取全部一級分類
??????? foreach (DataRowView drv in dv)
??????? {
??????????? string code = drv["Code"].ToString();
??????????? string classname = drv["ClassName"].ToString();
??????????? Response.Write(classname + "<br/>");
??????????? //獲取對應的二級分類,注意:這里同樣設置的是dv變量
??????????? dv.RowFilter="Code Like '" + code +"*' And Len(Code)=" + (code.Length + 4);
??????????? foreach (DataRowView drv2 in dv)
??????????? {
??????????????? string code1 = drv2["Code"].ToString();
??????????????? string classname1 = drv2["ClassName"].ToString();
??????????????? Response.Write("--" + classname1 + "<br/>");
??????????? }
??????? }
//============如下則得不到期望的結果(將foreach改成for)
??????? for (int i = 0; i < dv.Count;i++ )
??????? {
??????????? string code = dv[i]["Code"].ToString();
??????????? string classname = dv[i]["ClassName"].ToString();
??????????? Response.Write(classname + "<br/>");
??????????? //DataView dv2=new DataView(dv.Table);
??????????? //dv2.RowFilter=...
????????? ?//使用新數據視圖來避免沖突,將下面的dv改成dv2就可以得到預期結果
??????????? dv.RowFilter = "Code Like '" + code + "*' And Len(Code)=" + (code.Length + 4);
??????????? for (int j = 0; j < dv.Count;j++ )
??????????? {
??????????????? string code1 = dv[j]["Code"].ToString();
??????????????? string classname1 = dv[j]["ClassName"].ToString();
??????????????? Response.Write("--" + classname1 + "<br/>");
??????????? }
??????? }
----------------------------
導致上面問題本質是因為foreach使用的是IEnumerable 接口,DataView的內部實現如下
IEnumerator GetEnumerator(){DataRowView[] array = DataRowView[.Count];.CopyTo(array, );//復制一個數據負本array.GetEnumerator();}
針對某個DataView設置了多次RowFilter,那么最后一次的設置將生效, 設置RowFilter后使用foreach處理dataview,其實處理的是數據視圖的副本,循環內對DataView的RowFilter再次設置不影響foreach處理的集合副本. 當然也可以使用DataView tDv=new DataView(DataTable);來生成一個新的視圖來避免沖突問題--如果使用這種方式那么就上面情況,內存中將有兩個dataView(對應一個datatable)如果再使用foreach進行集合便歷,那么明顯要多出一個dataview內存需求.

?

?

轉載于:https://www.cnblogs.com/wdfrog/archive/2009/08/31/1557256.html

總結

以上是生活随笔為你收集整理的DataView.RowFilter使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。