一、 設定索引和試圖
DataTable的Select方法可以對一個表進行篩選和查詢,傳回的是資料表中可用行的一個子集,這樣本來是很友善的,但是如果資料表比較大,而且需要重複對這個表進行相同的查詢,那麼資源的使用效率就無法達到最佳,另外Select方法傳回的是DataRow數組,而不是一個DataTable,是以一些需要一張完整表才能處理的工具就不能對傳回的資料行數組進行處理了。
為了客服上面這些問題,ADO.NET中有DataView類。
1、建立DataView對象
它的構造函數有以下三個版本
public DataView();
publicDataView(DataTable table);
publicDataView(DataTable table, string RowFilter, string Sort, DataViewRowState RowState);
預設情況下是把一個表中的所有資料行都映射到了視圖中,但是有時候并不需要,我們隻需要我們需要的行,并對他排序。下面這兩種構造方法是等價的
(1) DataView view=newDataView(table,”體重=150”,”身高DESC”,DataViewRowState.None);
//直接在構造函數裡面就實作删選和排序
(2) DataView view=newDataView(table);
view.RowFilter=”體重=150”;
view.Sort=”身高 DESC”;
//通過設定相關的屬性來實作篩選和排序
注意:這裡面的删選表達式和排序表達式和前面講解table.Select方法時是一樣的。
最後一個參數是一個DataViewRowState枚舉類型。
2、DataView類的三個布爾屬性
這三個布爾屬性決定了限制通過這個視圖能夠針對資料行執行的操作。
AllowNew 允許或禁止建立行
AllowEdit 允許或禁止更改行
AllowDelete 允許或禁止删除行
3、DataView的常見使用
(1) 檢視視圖中有多少行:Count屬性 如:
Console.WriteLine($"該視圖具有的行數為 {view.Count}");
(2) 查找視圖中相應的行:Find()和FindRows()方法,但是在使用這兩個方法之前,有一個必須要注意的點,那就是必須在建立DataView對象時指定了相關的排序表達式,即前面的Sort屬性,如下所示:
view.Sort = "體重 DESC"; //必須制定排序規則,如果不指定,下面的那條語句會出錯
DataRowView[]rowView = view.FindRows(100); //這裡的100是體重那一列中的某一個值,即必須指定前面的排序規則才行
foreach (var item in rowView)
{
Console.WriteLine($"{item[0]} {item[1]} {item[2]}");
}
(3) 将視圖轉化成一個新的表:ToTable()方法如
DataTable t = view.ToTable();
4、 資料表與表視圖的補充
事實上,除了為一個表建立自定義的視圖對象,即DataView對象以外,每一個表DataTable它本身已經預設了有一個視圖的存在,可以通過它的一個屬性去擷取,即DefaultView屬性
如:
DataView v =table.DefaultView;