Home [ADO.NET] DataView 物件
Post
Cancel

[ADO.NET] DataView 物件

如果以資料庫來打比方,
DataSet 就是一個功能簡單的資料庫,
DataSet 是多個表(DataTable)的集合,
DataTable 就是對應數(對應資料庫中的資料表)
DataView 則對應資料庫中的視圖(View)。


DataSet 可以理解為是個資料庫。 DataTable 可以理解為是個資料表。 DataView 可以理解為是資料表的檢視圖。

dataset 數據集合可以包含多個 datatable,而 datatable 可以聲明多個 dataview。
dataview 是個虛擬的視圖,用於數據展示層,可以通過對它的 RowFilter、Sort屬性的設置,控制輸出想要的數據集合。


從資料來源擷取資料並將資料填入 DataTable 後,您可能想要排序、篩選,或限制所傳回的資料,而不想再次擷取該資料。 DataView 類別使這成為可行。 此外,如果您需要從 DataView 建立新的 DataTable,則可使用 ToTable 方法,將所有資料列和資料行,或資料的子集複製到新的 DataTable。 ToTable 方法提供多載,以進行下列作業:

  • 建立含有資料行的 DataTable,其中的資料行是 DataView 之資料行的子集。
  • 建立 DataTable,其內含的資料列都與 DataView 的資料列不同,此功能類似於 Transact-SQL 的 DISTINCT 關鍵字。

DataView 過濾 和 排序

DataView 可以用來排序和過濾 DataTable 內的資料。

  • DataTable.DefaultView 即是一個 DataView。

過濾

1
2
3
4
5
6
//CustomerID是B開頭的資料
dv.RowFilter = "CustomerID like 'B%'";
//CustomerID是ROMEY
dv.RowFilter = "CustomerID='ROMEY'";
//Region欄位值是 null
dv.RowFilter = "Region is null";

排序

  • 可以指定 DataView.Sort 的欄位名稱,根據欄位進行排序。
1
2
3
4
5
6
//DataTable轉成一個DataView
DataView dv = dt.DefaultView;
//資料依ContactName排序
dv.Sort = "ContactName";
//重新轉化為 新DataTable
DataTable dtNew = dv.ToTable();

範例

從資料庫將資料填入DataTable,再將DataTable轉成DataView,並找出CustomerID是B開頭的資料,將結果輸出到控制台上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string connString = "Data Source=.;Initial catalog=Northwind;User id=riva;Password=1234;Encrypt=true;Trust Server Certificate=True";

SqlConnection conn = new(connString);
SqlDataAdapter da = new("select * from Customers", conn);
DataTable dt = new();
da.Fill(dt);

//DataTable轉成一個DataView
DataView dv = dt.DefaultView;

//加上過濾條件: CustomerID是B開頭的資料
dv.RowFilter = "CustomerID like 'B%'";

//重新轉化為 新DataTable
DataTable dtNew = dv.ToTable();

//將資料輸出到控制台
foreach (DataRow row in dtNew.Rows)
{
    Console.WriteLine($"客戶編號: {row[0]}, 公司名稱: {row[1]}, 聯絡人: {row[2]}");
}

da.Dispose();//釋放SqlDataAdapter資源

執行結果:

1
2
3
4
5
6
7
客戶編號: BERGS, 公司名稱: Berglunds snabbkop, 聯絡人: Christina Berglund
客戶編號: BLAUS, 公司名稱: Blauer See Delikatessen, 聯絡人: Hanna Moos
客戶編號: BLONP, 公司名稱: Blondesddsl pere et fils, 聯絡人: Frederique Citeaux
客戶編號: BOLID, 公司名稱: Bolido Comidas preparadas, 聯絡人: Martin Sommer
客戶編號: BONAP, 公司名稱: Bon app', 聯絡人: Laurence Lebihan
客戶編號: BOTTM, 公司名稱: Bottom-Dollar Markets, 聯絡人: Elizabeth Lincoln
客戶編號: BSBEV, 公司名稱: B's Beverages, 聯絡人: Victoria Ashworth

MSDN - 建立 DataView
MSDN - DataView
MSDN - 從 DataView 建立 DataTable
MSDN - 排序及篩選資料

This post is licensed under CC BY 4.0 by the author.