一、排序
1 獲取DataTable的默認視圖
2 對視圖設置排序表達式
3 用排序後的視圖導出的新DataTable替換就DataTable
(Asc升序可省略,多列排序用","隔開)
DataView dv = dt.DefaultView;
dv.Sort = "id Asc,name Desc";
dt = dv.ToTable();
二、檢索
1 設置查詢字符串
2 使用Select方法獲取到所有滿足條件的數據行對像數組
(多項查詢條件間,用and隔開.模糊查詢使用 like %)
DataRow[] matches = dt.Select("(id<'003') and (name='名字11') and (number like '%2007%')");
string strName = matches[0]["name"].ToString();
三、合併
假定有2個DataTable:Dt1 , Dt2。表結構一樣
將Dt2接在Dt1後可採用此方法
dt1.Merge(dt2);
四、分頁
略
五:如SQL數據庫般操作datatable
我們在使用Sql Server這些數據庫時,可以輕鬆的通過Sum、Aver、Count等統計出相關結
果,那麼,在已經把數據檢索出來的DataSet(DataTable)中呢?這個時候,可是沒有辦法回頭去修改Select語句來獲取這些統計了。那麼在DataSe
t/DataTable中是否可以進行統計呢?答案是肯定的。
在MSDN中,有一篇MS推薦的統計方法,就是逐行對數據進行求和統計,這個方法,其實有
等於無(或許這個方法只是針對於DataGrid求取小計用吧),因為這個方法中採用的是DataGri
d的ItemDataBind事件來對數據進行累加,同我們手動寫代碼統計沒有什麼區別。
本文介紹一個簡單的方法,不需要逐條記錄進行計算就可以輕鬆的獲得DataTable中的記錄
統計結果。這個簡單的方法就是調用功能強大的DataTable的函數Compute。
一、調用說明(僅以C#為例,下同):
public object Compute(string strExpression,string strFilter)
參數:
strExpression:要計算的表達式字符串,基本上類似於Sql Server中的統計表達式
strFilter:統計的過濾字符串,只有滿足這個過濾條件的記錄才會被統計
二、調用舉例:
以下示例,假設一個產品銷售表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強,這個統計是錯誤的,因為Compu
te的統計不具備Sum(Quantity*Price)這樣數據的功能。那怎麼辦呢?
對於這樣複雜數據的統計,我們可以在DataTable中創建一個新的字段來完成,比如Amount
,同時設置該字段的Expression為Quantity*Price,這樣我們就可以使用統計功能了:
table.Compute("Sum(Amount)","true");