DataTable快速定制之Expression屬性表達式


本文旨在討論使用DataColumn.Expression屬性定制列,高手繞過。

這里只介紹兩個經典的場景,拋磚引玉其他更多功能待各位讀者自己發現吧!

場景一:

DataTable里有兩個列分別為每種商品的[price]單價和[Num]數量,現在需要得到每種商品的總價值:

方法一(不推薦):

增加一列[Value],遍歷DataTable用每一行的[price]*[num]得到價值,然后賦給列[value],代碼如下:

dt.Columns.Add("value");//增加新列value存儲總價值
foreach(DataRow dr in dt.Rows)//遍歷計算每種商品總值並存儲到列[value]中{
    dr["value"] = dr["price"]*dr["num"];
}

之后就可以進行常規的綁定展示操作。

方法二(推薦):

增加一列[Value],使用該列的Expression屬性定制此列,代碼如下:

dt.Columns.Add("value");
dt.Columns["value"].Expression = "price * num";

這樣就好了,之后就可以進行常規的綁定展示操作,因為Expression表達式是延遲執行的,即綁定時才執行,所以沒有綁定的情況下,看到的DataTable內容還是不變的,如果要得到在此表達式作用下的表請使用方法:toTable();

如下:

DataTable newTable = dt.DefaultView.ToTable();

這里只介紹了數學表達式的用法,類似的加減除法都可以這樣實現,如果是要連接字符串怎么辦呢?請見下面的例子:

場景二:

比如:DataTable中有兩列分別是[Name]部門名稱和[DepartId]部門ID,現在需要一個部門和ID連接在一起的列用來展示比如:人力資源部-010怎么做呢?方法同上,這里就要用到字符串連接表達式了,見代碼:

dt.Columns["NameAndId"].Expression = "name+'-'+departid";

這里的“+”用作連接字符串的作用,再也不用一個個遍歷的方法來實現類似的功能了,當然Expression表達式可以發揮的作用遠不止這些,詳見:http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx

不止列可以定制,我們也可以像使用sql操作數據庫那樣操作DataTable的行,此時要用到DataTable.DefaultView.RowFilter屬性。下次再介紹吧有興趣的可以自己搜索一下。

出處:http://blog.csdn.net/jacky4955/article/details/7282678


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM