DataViewRowStateを条件指定して行の状態で行を抽出します。
DataViewRowStateのメンバー(詳細は
MSDN DataViewRowState列挙体を参照してください)
| | |
| メンバー名 | 説明 |
| Added | 新しい行。 |
| Deleted | 削除された行。 |
| ModifiedCurrent | 変更された元のデータの現在のバージョン(ModifiedOriginalを参照)。 |
| ModifiedOriginal | 変更されたデータの元のバージョン(データは変更されても、ModifiedCurrentとして利用可能です)。 |
| Unchanged | 変更されていない行。 |
DataTable.Selectメッソドでの使用例
Module Module1
Sub main()
'サンプルデータテーブル
Dim sampleTable As New DataTable
sampleTable.TableName = "SampleTable"
sampleTable.Columns.Add("ItemCD", Type.GetType("System.String"))
sampleTable.Columns.Add("ItemName", Type.GetType("System.String"))
sampleTable.Columns.Add("Price", Type.GetType("System.Double"))
sampleTable.Rows.Add("001", "商品001", 110)
sampleTable.Rows.Add("002", "商品002", 120)
sampleTable.Rows.Add("003", "商品003", 130)
sampleTable.Rows.Add("004", "商品004", 140)
sampleTable.Rows.Add("005", "商品005", 150)
sampleTable.Rows.Add("006", "商品006", 160)
sampleTable.Rows.Add("007", "商品007", 170)
sampleTable.Rows.Add("008", "商品008", 180)
sampleTable.Rows.Add("009", "商品009", 190)
'テーブルの変更をコミット‥DataRowをAdded→Modifiedへ
sampleTable.AcceptChanges()
'データを変更
sampleTable.Rows(0)("Price") = 510
sampleTable.Rows(3)("Price") = 530
'データを削除
sampleTable.Rows(1).Delete()
sampleTable.Rows(4).Delete()
'データを追加
sampleTable.Rows.Add("010", "商品020", 200)
sampleTable.Rows.Add("011", "商品020", 210)
'変更された行
Console.WriteLine("--- 変更された行 ---")
Dim rws() As DataRow = sampleTable.Select(Nothing, Nothing, DataViewRowState.ModifiedCurrent)
For i = 0 To rws.Length - 1
Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
Next
'変更された行の元の値
Console.WriteLine("--- 変更された行の元の値 ---")
rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.ModifiedOriginal)
For i = 0 To rws.Length - 1
Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
Next
'削除された行の元の値
Console.WriteLine("--- 削除された行の元の値 ---")
rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
For i = 0 To rws.Length - 1
Console.WriteLine(rws(i)("ItemCD", DataRowVersion.Original).ToString & " " & _
rws(i)("ItemName", DataRowVersion.Original).ToString & " " & rws(i)("Price", DataRowVersion.Original).ToString)
Next
'追加された行
Console.WriteLine("--- 追加された行の表示 ---")
rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Added)
For i = 0 To rws.Length - 1
Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
Next
'変更されてない行
Console.WriteLine("--- 変更されてない行 ---")
rws = sampleTable.Select(Nothing, Nothing, DataViewRowState.Unchanged)
For i = 0 To rws.Length - 1
Console.WriteLine(rws(i)("ItemCD").ToString & " " & rws(i)("ItemName").ToString & " " & rws(i)("Price").ToString)
Next
End Sub
End Module
|
実行結果 |
※DataTable.SelectメソッドでのModifiedOriginalは変更後の値が表示されるようです。
DataViewでの使用例
Module Module1
Sub Main()
'サンプルデータテーブル
Dim sampleTable As New DataTable
sampleTable.TableName = "SampleTable"
sampleTable.Columns.Add("ItemCD", Type.GetType("System.String"))
sampleTable.Columns.Add("ItemName", Type.GetType("System.String"))
sampleTable.Columns.Add("Price", Type.GetType("System.Double"))
sampleTable.Rows.Add("001", "商品001", 110)
sampleTable.Rows.Add("002", "商品002", 120)
sampleTable.Rows.Add("003", "商品003", 130)
sampleTable.Rows.Add("004", "商品004", 140)
sampleTable.Rows.Add("005", "商品005", 150)
sampleTable.Rows.Add("006", "商品006", 160)
sampleTable.Rows.Add("007", "商品007", 170)
sampleTable.Rows.Add("008", "商品008", 180)
sampleTable.Rows.Add("009", "商品009", 190)
'テーブルの変更をコミット‥DataRowをAdded→Modifiedへ
sampleTable.AcceptChanges()
'データを変更
sampleTable.Rows(0)("Price") = 510
sampleTable.Rows(3)("Price") = 530
'データを削除
sampleTable.Rows(1).Delete()
sampleTable.Rows(4).Delete()
'データを追加
sampleTable.Rows.Add("010", "商品020", 200)
sampleTable.Rows.Add("011", "商品020", 210)
'変更された行
Console.WriteLine("--- 変更された行 ---")
Dim dv As New DataView(sampleTable)
dv.RowStateFilter = DataViewRowState.ModifiedCurrent
For i = 0 To dv.Count - 1
Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
Next
'変更された行の元の値
Console.WriteLine("--- 変更された行の元の値 ---")
dv.RowStateFilter = DataViewRowState.ModifiedOriginal
For i = 0 To dv.Count - 1
Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
Next
'削除された行の元の値
Console.WriteLine("--- 削除された行の元の値 ---")
dv.RowStateFilter = DataViewRowState.Deleted
For i = 0 To dv.Count - 1
Console.WriteLine(dv(i)("ItemCD").ToString & " " & _
dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
Next
'追加された行
Console.WriteLine("--- 追加された行の表示 ---")
dv.RowStateFilter = DataViewRowState.Added
For i = 0 To dv.Count - 1
Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
Next
'変更されてない行
Console.WriteLine("--- 変更されてない行 ---")
dv.RowStateFilter = DataViewRowState.Unchanged
For i = 0 To dv.Count - 1
Console.WriteLine(dv(i)("ItemCD").ToString & " " & dv(i)("ItemName").ToString & " " & dv(i)("Price").ToString)
Next
End Sub
End Module
|
実行結果 |
使用例はコンソールアプリケーションです。
VisualStudioの「新しいプロジェクト」から「コンソールアプリケーション」を選択しMain関数内にコードを記述します。
Ctrl+F5キーで実行します。