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)