本文旨在討論使用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