DataView 數據篩選

http://blog.csdn.net/han_yankun2009/article/details/19154797?reload



數據篩選,種類無非兩種,篩選有用去除重複或無用。

在以前做項目中遇到一個問題,就是獲取DataTable中某一列的值,因爲從數據庫中檢索數據時,按照2個字段進行分組,而要獲得的那一列剛好在分組這兩列中,所以該列的值必然有重複,於是就想到了去除重複,如何去除重複數據呢。這裏述說下我的學習過程

 

最開始的簡單,只看某一個字段是否有重複的。

一個DataTable,想查看是關鍵字段是否有重複。不想寫循環的語句,如何使用呢。我們首先定義dataView


dataView

表示用於排序、篩選、搜索、編輯和導航的 DataTable 的可綁定數據的自定義視圖。


dataView.RowFilter


設置過濾


RowFilter是一個可讀寫的屬性,用來讀取和設置表過濾的表達式。

你可以用列名,邏輯和數字運算符和常量的任意合法組合組成表達式。以下是一些例子:


dv.RowFilter = "Country = 'USA'";//列名爲County,值爲usa

dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"

dv.RowFilter = "Description LIKE '*product*'"

 

dataTable.DefaultView


DefaultView 屬性返回可用於排序、篩選和搜索 DataTable  DataView


看實例代碼


要篩選出 datatable中列 Type palte都是1的數據

  1. DataTable dt1;  
  2. DataView dv = new DataView(dt1);  
  3. dv.RowFilter = "palte='1' AND Type='1'";  
  4. DataTable dt_New = dv.ToTable();  

 注意思考:這個方法作用不僅在於次,而且還在於可以切分表,將一個表的數據切分多個數據,這在一些場合還是很有作用的。

但是這種方式比較固定和死板,所以並不能適應所有的類型。如何能更好的適應任意的類型呢。

請繼續看下面代碼


適合任意列的數據對比


若是符合所有的任務列,就需要獲取所有的列名。運用dataviewdatatable數據篩選方法。

 

 datatable的篩選方法

 

                   

  1.  ////判斷是否有相同的行  
  2.                     DataView dvStudent = newDataView(dt);  
  3.                     //去除重複的行  
  4.                     string[] straColumn = newstring[dt.Columns.Count];  
  5. //獲取所有列名  
  6.                     for (int LoopIndex = 0;LoopIndex < dt.Columns.Count; LoopIndex++)  
  7.                     {  
  8.                         straColumn[LoopIndex] =dt.Columns[LoopIndex].ColumnName;  
  9.                     }  
  10. //調用篩選去除重複數據方法  
  11.                     DataTable dtGrid =dt.DefaultView.ToTable(true, straColumn);  


這裏是將列名使用了數組的方式進行的封裝,還可以直接將數據寫在裏面,


  1. dv.ToTable(true, newstring[] { "columnA,columnF,columnC" });  
  2. DataTable newTable4 =dv.ToTable("NewTableName",truenew string[] { "columnA,columnF,columnC" });  

具體說明,請查看msdn


選擇DataTable中的唯一值

在.NETFramework2.0中,選擇DataTable等數據源中的唯一值(類似SQL中Distinct的返回結果)非常簡單,如下即可:

DataTabled = dataSetName.dataTableName.DefaultView.ToTable(true, new string[] {"ColumnName" });

http://msdn.microsoft.com/zh-cn/library/system.data.datatable.defaultview(VS.80).aspx

 

通過幾次簡單的對比了解,發現方法還是有的,只是自己不知道或是根本沒聽過,所以還是說不怕不知道就怕不知道。這裏的點滴積累希望多對家有用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章