本文旨在討論使用DataColumn.Expression屬性定製列,高手繞過。sql
這裏只介紹兩個經典的場景,拋磚引玉其餘更多功能待各位讀者本身發現吧!數據庫
場景一:express
DataTable裏有兩個列分別爲每種商品的[price]單價和[Num]數量,如今須要獲得每種商品的總價值:spa
方法一(不推薦):.net
增長一列[Value],遍歷DataTable用每一行的[price]*[num]獲得價值,而後賦給列[value],代碼以下:code
dt.Columns.Add("value");//增長新列value存儲總價值 foreach(DataRow dr in dt.Rows)//遍歷計算每種商品總值並存儲到列[value]中{ dr["value"] = dr["price"]*dr["num"]; }
以後就能夠進行常規的綁定展現操做。blog
方法二(推薦):資源
增長一列[Value],使用該列的Expression屬性定製此列,代碼以下:字符串
dt.Columns.Add("value"); dt.Columns["value"].Expression = "price * num";
這樣就行了,以後就能夠進行常規的綁定展現操做,由於Expression表達式是延遲執行的,即綁定時才執行,因此沒有綁定的狀況下,看到的DataTable內容仍是不變的,若是要獲得在此表達式做用下的表請使用方法:toTable();get
以下:
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