●
DataViewをレコードのステータスで絞り込むサンプル

図 DataViewをレコードのステータスで絞り込むサンプル
このサンプルは、DataViewから追加、変更、削除されたレコードを絞り込んで表示します。DataViewから追加、変更、削除されたレコードを絞り込むには、DataViewのRo
このサンプルでは、以下のノウハウを取得することができます。
▲ 得意先テーブルをDataTableに取り込む方法
▲ DataTableからDataViewを作成する方法
▲ レコードのステータスを指定してレコードを絞り込む方法
▲ 追加したレコードを絞り込む方法
▲ 変更したレコードを絞り込む方法
▲ 削除したレコードを絞り込む方法
▲ 絞り込んだレコードの件数を取得する方法
サンプルのPage_Load()イベントでは、DataViewから追加、変更、削除されたレコードを絞り込んで表示しています。行8-9では、得意先テーブルからレコードを抽出するSQLを生成しています。行10-13では、OleDbConnection、OleDbDataAdapter、DataTableを生成しています。
行15では、OleDbDataAdapterのFill()メソッドで得意先テーブルをDataTableに取り込んでいます。行20では、DataTableからDataViewを生成しています。
7: Sub Page_Load()
8: Dim strSQL As String =
"Select CustomerID, CompanyName, " & _
9: "ContactName,
Phone From Customers"
10: Dim con As New OleDbConnection( _
11: ConfigurationSettings.AppSettings("conStringNw"))
12: Dim da As New
OleDbDataAdapter(strSQL, con)
13: Dim dt As New
DataTable("Customers")
14:
15: da.Fill(dt)
20: Dim dv As New DataView(dt)
:::
49: End Sub
行23-27では、DataViewに新規レコードを追加しています。行23では、DataViewのAddNew()メソッドでDataRowViewを生成しています。行24-26では、DataRowViewの得意先名、担当者名、電話番号のカラムに値を設定しています。行27では、DataViewのEndEdit()メソッドで編集を完了させています。
23:
Dim drv As DataRowView = dv.AddNew()
24: drv("CompanyName") =
"フレンドリーソフト"
25: drv("ContactName") =
"葛西 秋雄"
26: drv("Phone") =
"(0480)99-9999"
27: drv.EndEdit()
行30-33では、DataViewの1番目のレコードを取得して得意先名を変更しています。行30では、DataViewから1番目のレコードを取得してDataRowViewを生成しています。行32では、DataRowViewの得意先名に「※」を追加しています。行30と行32を結合させて、次のように記述することもできます。
dv(0)(“CompanyName”) &= “※”
行31、33のBeginEdit()、EndEdit()メソッドは、特に必要ありません。BeginEdit()は、CancelEdit()メソッドで変更したレコードを復元するときに使用します。
30: drv = dv(0)
31: drv.BeginEdit()
32: drv("CompanyName")
&= "※"
33: drv.EndEdit()
行36-37では、DataViewから2番目のレコードを取得して削除しています。行36-37を結合させて、次のように記述することもできます。
dv(1).Delete()
36:
drv = dv(1)
37: drv.Delete()
行39-48では、DataViewから追加、変更、削除されたレコードを絞り込んで表示します。行39-42では、DataViewRo
行46-48では、DataViewからDataRowViewを取り出してSub DisplayRow()に渡しています。DisplayRow()では、DataRowViewのすべてのカラム名とカラム値を表示します。
39:
Dim dvrs As DataViewRo
40: DataViewRo
41: Or DataViewRo
42: Or DataViewRo
43: dv.Ro
44: Dim intRow As Integer
45:
Response.Write("<h2>DataView.Ro
46: For intRow = 0 To dv.Count - 1
47: DisplayRow(dv(intRow))
48: Next
Sub DisplayRow()の行52では、DataRowViewのRow.TableプロパティからDataTableを取得しています。行53では、DataRowViewのRowプロパティからDataRowを取得しています。行55-58のFor Each…Nextでは、DataTableのColumnsコレクションからDataColumnを取り出しています。Response.Write()メソッドでは、カラム名、カラム値、そしてレコードのステータスを表示しています。レコードのステータスは、GetRo
51: Sub DisplayRow(drv As DataRowView)
52: Dim dt As DataTable =
drv.Row.Table
53: Dim dr As DataRow = drv.Row
54: Dim dc As DataColumn
55: For Each dc In dt.Columns
56:
Response.Write(String.Format("<b>{0}</b>: {1}
<b>{2}</b><br>", _
57: dc.ColumnName,
drv(dc.ColumnName), GetRo
58: Next
59:
Response.Write("<hr>")
60: End Sub
GetRo
62: Function GetRo
63: Dim strRo
64: If dc.ColumnName =
"CompanyName" Then
65: If dr.Ro
66: strRo
67: ElseIf dr.Ro
68: strRo
69: ElseIf dr.Ro
70: strRo
71: End If
72: End If
73: Return strRo
74: End Function