您好,登錄后才能下訂單哦!
1 DataColumn 的DataType可以是任一數據類型,包括自義定類和結構.
DataTable dt = new DataTable("Product"); dt.Columns.Add("ProductId",typeof(int)); dt.Columns.Add("ProductProperty", typeof(ProductProperty)); DataRow r1 = dt.NewRow(); r1["ProductId"] = 1; r1["ProductProperty"] = new ProductProperty() { ProductionDate = DateTime.Now, Desc = "牛奶糖" }; dt.Rows.Add(r1); foreach(DataRow dr in dt.Rows) { Console.WriteLine("productId {0};ProductionDate:{1};Desc:{2};", dr["ProductId"].ToString(), (dr["ProductProperty"] as ProductProperty).ProductionDate.ToString(), (dr["ProductProperty"] as ProductProperty).Desc); }
2 Unique屬性標記為True 的DataColumn 不請允許有NULL值.
3 判斷DataRow中某個列是否已經修改
//oneRow.DataRowState=DataRowState.Changed,否則可能沒有Original版本 if(oneRow.HasVersion(DataRowVersion.Proposed)) { if(oneRow["Salary",DataRowVersion.Original]!=oneRow["Salary",DataRowVersion.Proposed]) { //salary field has changed } }
4 使用DataRow.BeginEdit() DataRow.EndEdit() 延遲數據驗證,同時減少RowChanged事件觸發次數
oneRow.BeginEdit(); oneRow["ProductName"]="ColaVeryGood";//ProductName MaxLength 為10 oneRow["UnitPrice"]=12.4;//UnitPrice 最大值為 10.0 oneRow.EndEdit();//直到此時才發生數據驗證異常,如果沒有異常,則發生RowChanged事件,而不會觸發兩次事件.
5 基于驗證的錯誤
利用DataColumnChanging,DataRowChanging,可以修改的數據進行驗證,防止不符合驗證程序的數據輸入到列字段或提示出數據不合法.
private void app_ColumnChanging(object sender,DataColumnChangeEventArgs e) { if(e.Column.ColumnName=="Age") { if((int)e.ProposedValue>120) e.Row.SetColumnError(e.Column,"Human can't live that long"); } }
6 列級別的錯誤
public void ShowFirstRowError(DataRow row) { string errorText = "No error!"; DataColumn[] errorColumns = row.GetColumnsInError(); if(errorColumns.Count>0) { errorText= row.GetColumnError(errorColumns[0]); } else if(row.RowError.Length>0) { errorText = row.RowError; } // show errorText }
7 按主鍵搜索行
DataRow matchRow = someTable.Rows.Find(searchValue);//single-part key DataRow matchRow = someTable.Rows.Find(new object[]{value1,value2})//multi-Part key; //如果未找到行,返回null
8 用搜索條件選擇行及排序
//匹配字條串時區分大小寫 //someTable.CaseSensitive=True;//默認不區分大小寫 DataRow[] matchRows = someTable.Select(filterCriteria,sortRules); //filterCriteria 過濾表達式參考 DataColumn.Expression 很強大 //sortRules OrderDate DESC,CustomerName ASC,ASC是默認排序,可省略.
9 產生單一聚合
產生單一聚合是指使用聚合方法計算某個表的字段,但不作為一個表的計算列,例如:
decimal averageSalary = (decimal)employeeTable.Compute("Avg(Salary)",filterExpression); //其他"Avg(Salary)"是計算表達式,如計算列的計算表達式一樣 //filterExpression 是過濾表達式,和DataTable.Selete()方法的過濾表達式一樣.
10 DataView
DataView是DataTable的視圖,是對表的列的一個索引,并不直接包含具體的列.被包含的列仍然屬于原來的DataTable.
DataView 有三個重要的屬性.
RowFilter:列過濾表達式,與DataTable的表達式一樣
Sort:排序表達式
RowStateFilter:根據DataRow的 RowState屬性過濾列,并且可以指定要顯示的數據的版本.比如DataRowViewState.ModifiedOriginal 顯示RowState為Changed的列的原始版本的數據.
每次設置三個屬性之一都會重建其對底層DataTable的索引,為減少重建次數,應該盡量在 DataView()構造方法中設置好這三個屬性.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。