DataTable數據進行排序、檢索、合併、分頁、統計

在作程序時常常遇到要將反覆對數據進行篩選、求和、排序、分頁等的狀況。每次的數據操做都要去訪問數據庫很明顯是不合理的!固然須要實時數據的狀況除外,不作討論哈。今天無心間在網上看到了這篇文章,挺實用的,拿來記憶一下
1、排序
1 獲取DataTable的默認視圖
2 對視圖設置排序表達式
3 用排序後的視圖導出的新DataTable替換就DataTable
(Asc升序可省略,多列排序用","隔開)
DataView dv = dt.DefaultView;
dv.Sort = "id Asc,name Desc";
dt = dv.ToTable();
2、檢索
1 設置查詢字符串
2 使用Select方法獲取到全部知足條件的數據行對象數組
(多項查詢條件間,用and隔開.模糊查詢使用 like %)
DataRow[] matches = dt.Select("(id>=20) and (title='會議') and (yearstr like ' 07%')");
string strName = matches[0]["name"].ToString();
另外也能夠用下面這種方法,將檢索出來的新表綁定到GridView
DataView dv = dt.DefaultView;
dv.RowFilter = "id>=2";
this.GridView1.DataSource = dv;
this.GridView1.DataBind();
3、合併
假定有2個DataTable:Dt1 , Dt2。表結構同樣
將Dt2接在Dt1後可採用此方法
dt1.Merge(dt2);
4、分頁
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.DataSource = dvIntegralExpense;
pds.AllowPaging = true;
pds.PageSize = pager.PageSize;
pds.CurrentPageIndex = pager.PageIndex;
rptIntegralExpense.DataSource = pds;
rptIntegralExpense.DataBind();
五: 咱們在使用Sql Server這些數據庫時,能夠輕鬆的經過Sum、Aver、Count等統計出相關結果,那麼,在已經把數據檢索出來的DataSet(DataTable)中呢?特別是經過Web Service得到了DataSet,這個時候,但是沒有辦法回頭去修改Select語句來獲取這些統計了。那麼在DataSet/DataTable中是否能夠進行統計呢?答案是確定的。
在MSDN中,有一篇MS推薦的統計方法,就是逐行對數據進行求和統計,這個方法,其實有等於無(或許這個方法只是針對於DataGrid求取小計用吧),由於這個方法中採用的是DataGrid的ItemDataBind事件來對數據進行累加,同咱們手動寫代碼統計沒有什麼區別。
本文介紹一個簡單的方法,不須要逐條記錄進行計算就能夠輕鬆的得到DataTable中的記錄統計結果。這個簡單的方法就是調用功能強大的DataTable的函數Compute。
1、調用說明(僅以C#爲例,下同):
  public object Compute(string strExpression,string strFilter)
  參數:
  strExpression:要計算的表達式字符串,基本上相似於Sql Server中的統計表達式
  strFilter:統計的過濾字符串,只有知足這個過濾條件的記錄纔會被統計
2、調用舉例:
  如下示例,假設一個產品銷售表table,描述某商場中各促銷員銷售的實際記錄,包含字段爲:姓名(Name)、性別(Sex,0爲女,1爲男)、生日(Birthday)、銷售產品的代碼(ProID)、銷售的數量(Quantity)、銷售價格(Price)。
  1.統計全部性別爲女的銷售員的數量:
  table.Compute("Count(*)","Sex=0");
  2.統計全部銷售員中年齡大於20歲的
  table.Compute("Count(*)","Birthday<'"+today);//today爲今天的日期字符串
  3.統計銷售產品的平均價格
  table.Compute("Aver(Price)","true");
  4.統計產品代碼爲1的產品銷售數量:
  table.Compute("Sum(Quantity)","ProID=1");
  5.統計全部產品的銷售總金額:
  要統計總銷售金額,因爲table中不存在某項產品某個促銷員銷售的金額數據,但咱們能夠經過Quantity*Price來得到。好比:
  table.Compute("Sum(Quantity*Price)","true");
  這裏一個問題是:DataTable的統計功能沒有SqlServer強,這個統計是錯誤的,由於Compute的統計不具有Sum(Quantity*Price)這樣數據的功能。那怎麼辦呢?對於這樣複雜數據的統計,咱們能夠在DataTable中建立一個新的字段來完成,好比Amount,同時設置該字段的Expression爲Quantity*Price,這樣咱們就可使用統計功能了:table.Compute("Sum(Amount)","true");數據庫

相關文章
相關標籤/搜索