DataTableで使用する行(Rows)の操作説明をします。
行を追加します
任意の行に追加する場合はInsertAtを使用します。
Dim tbl As DataTable = New DataTable("table1")
tbl.Columns.Add("Item1")
tbl.Columns.Add("Item2")
tbl.Columns.Add("Item3")
Dim row As DataRow
'1列目
row = tbl.NewRow
row("Item1") = "A1"
row("Item2") = "A2"
row("Item3") = "A3"
tbl.Rows.Add(row)
'2列目
row = tbl.NewRow
row("Item1") = "B1"
row("Item2") = "B2"
row("Item3") = "B3"
tbl.Rows.Add(row)
'途中挿入
row = tbl.NewRow
row("Item1") = "C1"
row("Item2") = "C2"
row("Item3") = "C3"
tbl.Rows.InsertAt(row, 1)
オブジェクトのインデックスを取得します
Dim no As Integer = tbl.Rows.IndexOf(row) MessageBox.Show(no.ToString)
行を削除します
DataRowの削除する方法RemoveとDeleteの二つあります。
RemoveメソッドはDataRowCollectionからDataRowを削除します。
Deleteメソッドは削除対象の行をマークします。(実際に削除しません)
'位置指定による削除 tbl.Rows.RemoveAt(0) 'オブジェクト指定による削除 tbl.Rows.Remove(row) '削除フラグを付ける tbl.Rows(0).Delete()
※DataViewを使用している場合、Deleteにより削除した場合、DataRowCollection.CountとDataView.Countの結果に違いが出ます。
行数を取得する
MessageBox.Show(tbl.Rows.Count.ToString)
行でループ
Dim s As String
For Each drow As DataRow In tbl.Rows
s &= drow("Item1").ToString & System.Environment.NewLine
Next
MessageBox.Show(s)
データを抽出する
抽出にはSelectを使用します。SelectのパラメータはSQL文です。
Dim dr() As DataRow = DataTable.Select(“カラム名 = 値”)
Dim dr() As DataRow = DataTable.Select(“カラム名 = 値”, “カラム名 ASC または カラム名 DESC”)
戻り値は、DataRow型の配列を返します。
'インデックスを作成
tbl.DefaultView.Sort = "Item1"
'データの抽出
Dim dr() As DataRow = tbl.Select("Item1 = 'C1'", "Item1 ASC")
必ずしもインデックスを作成する必要はありません。
インデックスを作成すると抽出速度は上がりますが、インデックスを作成する時間がかかります。
編集処理
DataRowの複数カラムの値を更新する際に、BeginEditとEndEditメソッドで囲むことで速くなります。
Dim tbl As DataTable = New DataTable("table1")
Dim row As DataRow
tbl.Columns.Add("Item1")
tbl.Columns.Add("Item2")
'1列目
row = tbl.NewRow
row("Item1") = "A1"
row("Item2") = "A2"
tbl.Rows.Add(row)
'2列目
row = tbl.NewRow
row("Item1") = "B1"
row("Item2") = "B2"
tbl.Rows.Add(row)
'3列目
row = tbl.NewRow
row("Item1") = "C1"
row("Item2") = "C2"
tbl.Rows.Add(row)
For Each drow As DataRow In tbl.Rows
'オブジェクトの編集開始
drow.BeginEdit()
drow("Item2") = "AAAAA"
'オブジェクトの編集終了
drow.EndEdit()
Next
'変更を反映する
tbl.AcceptChanges()
Dim s As String = ""
For Each drow As DataRow In tbl.Rows
s &= drow("Item2").ToString & System.Environment.NewLine
Next
MessageBox.Show(s)