Skip to content

資料表 Data Table

Tom edited this page Dec 22, 2020 · 8 revisions

假設 dt_DataTable 變數為下列資料表:

Column1 Column2 Column3
B 3 True
A 2 True
E 2 False
C 4 True
D 5 True
A 1 False
  • 取得資料表的欄位名稱 Get the column names of DataTable

e.g. 取得上列 dt_DataTable 的欄位名稱:

arr_ColumnNames = (From dc In dt_DataTable.Columns.Cast(Of DataColumn) Select dc.ColumnName).ToArray

  • 變更資料表的欄位名稱 Rename a column name of DataTable

e.g. 將上列 dt_DataTable 的 "Column1" 欄位變更欄名成 "Name":

dt_DataTable.Columns("Column1").ColumnName = "Name"

Name Column2 Column3
B 3 True
A 2 True
E 2 False
C 4 True
D 5 True
A 1 False
  • 取得資料表的第一筆資料 Get the first row in the DataTable

e.g. 取得上列 dt_DataTable 的第一筆資料:

dr_FirstRow = dt_DataTable.Rows(0)
arr_FirstRow = dr_FirstRow.ItemArray
註 : dr_FirstRow 的資料型態為 DataRow,透過 .ItemArray 轉換成陣列。

  • 取得資料表中某一個欄位的資料 Get one column in DataTable and convert it to Array

e.g. 取得上列 dt_DataTable 中 "Column1" 欄位資料且轉成陣列型態:

arr_ColumnData = dt_DataTable.AsEnumerable().Select( Function(x) x.Field(Of String)("Column1").ToString ).ToArray

arr_ColumnData = string[6] { "B", "A", "E", "C", "D", "A" }

  • 取得資料表中部份欄位的資料 Get the partial columns in DataTable

e.g. 取得上列 dt_DataTable 中 "Column1" 及 "Column3" 欄位中的資料:

dt_Subtable = New DataView( dt_DataTable ).ToTable( False, {"Column3","Column1"} )

dt_Subtable =

Column3 Column1
True B
True A
False E
True C
True D
False A
  • 濾出資料表中滿足特定條件的資料 Filter DataTable

e.g. 篩選出 dt_DataTable 中 "Column2" 欄位大於 3 的資料:

dt_FilterData = dt_DataTable.AsEnumerable().Where( function(r) Convert.ToInt32(r("Column2")) > 3 ).CopyToDataTable

dt_FilterData =

Column1 Column2 Column3
C 4 True
D 5 True
  • 特定欄位排序 Sort the DataTable based on specific column

e.g. 對 dt_DataTable 中的 "Column1" 欄位進行排序(由小到大):

dt_SortData = (From row In dt_DataTable.Select Order By row("Column1") Select row).ToArray.CopyToDatatable
dt_SortData = New DataView( dt_DataTable, "True", "Column1 asc", DataViewRowState.CurrentRows ).ToTable

dt_SortData =

Column1 Column2 Column3
A 2 True
A 1 False
B 3 True
C 4 True
D 5 True
E 2 False

e.g. 對 dt_DataTable 中的 "Column2" 欄位進行排序(由小到大):

dt_SortData = (From row In dt_DataTable.Select Order By row("Column2") Select row).ToArray.CopyToDatatable
dt_SortData = New DataView( dt_DataTable, "True", "Column2 asc", DataViewRowState.CurrentRows ).ToTable

dt_SortData =

Column1 Column2 Column3
A 1 False
A 2 True
E 2 False
B 3 True
C 4 True
D 5 True

e.g. 對 dt_DataTable 中的 "Column2" 欄位進行排序(由小到大)後,且僅取出 "Column1" 的資料:

dt_SortData = New DataView( dt_DataTable, "True", "Column2 asc", DataViewRowState.CurrentRows ).ToTable( False, {"Column1"} )

dt_SortData =

Column1
A
A
E
B
C
D

若須排除重覆的資料
dt_SortData = New DataView( dt_DataTable, "True", "Column2 asc", DataViewRowState.CurrentRows ).ToTable( True, {"Column1"} )

dt_SortData =

Column1
A
E
B
C
D

e.g. 先對 dt_DataTable 中的 "Column1" 欄位進行排序(由小到大),再對 "Column2" 欄位進行排序(由大到小):

dt_SortData = (From row In dt_DataTable.AsEnumerable() Order By row("Column1"), row("Column2") Descending Select row).CopyToDataTable
dt_SortData = New DataView( dt_DataTable, "True", "Column1 asc, Column2 desc", DataViewRowState.CurrentRows ).ToTable

dt_SortData =

Column1 Column2 Column3
A 2 True
A 1 False
B 3 True
C 4 True
D 5 True
E 2 False

References