DataTableに新規レコードを追加するサンプル

DataTableに新規レコードを追加するサンプル

 

このサンプルは、得意先テーブルをDataTableに取り込んで新規レコードを追加します。新規レコードを追加するには、DataTableNewRow()メソッドでDataRowを生成してRows.Add()メソッドで追加します。実行結果としてDataTableに新規登録したレコードを表示します。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  得意先テーブルをDataTableに取り込む方法

  DataTableに新規レコードを追加する方法

  DataTableNewRow()メソッドの使い方

  DataTableRows.Add()メソッドの使い方

  DataTableSelect()メソッドの使い方

  DataTableから新規登録したレコードのみ抽出する方法

 

サンプルのPage_Load()イベントでは、得意先テーブルをDataTableに取り込んで新規レコードを追加しています。行8-9では、得意先テーブルのレコードを抽出するSQLを生成しています。行10-13では、OleDbConnectionOleDbDataAdapterDataTableのインスタンスを生成しています。

 

15では、OleDbDataAdapterFill()メソッドで得意先テーブルをDataTableに取り込んでいます。行16では、DataTableの得意先IDをオートナンバー型にしています。また、得意先ID-1,-2,-3…のように負の数で採番されるようにしています。

 

21では、DataTableNewRow()メソッドでDataRowを生成しています。行22-23では、DataRowに得意先名と担当者名を設定しています。行24では、DataTableRows.Add()メソッドでDataRowを追加しています。Add()メソッドの引数には、DataRowを指定します。このサンプルでは、3件のレコードを追加しています。

 

34では、DataViewRowStateAddedを設定しています。ここで設定したDataViewRowStateは、DataTableSelect()メソッドで使用します。行35では、DataTableSelect()メソッドで新規登録したレコードを抽出してarrRowsコレクションに格納しています。Select()メソッドの引数には、filterExpressionsortrecordStatesを指定しています。filterExpressionには、空白を指定していますのですべてのレコードが対象になります。sortには、空白を指定していますので並べ替えされません。recordStatesには、行34で生成したDataViewRowStateを指定しています。このDataViewRowStateには、Addedが設定されていますので新規登録したレコードのみが抽出されます。

 

37-39For Each…NextarrRowsコレクションからDataRowを取り出してSub DisplayRow()に渡しています。DisplayRow()では、DataRowのすべてのカラム名とカラム値を表示します。レコードが新規登録されたときは、得意先名に「(追加)」を付加します。

 

 

  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)
 16:   Dim dc As DataColumn = dt.Columns("CustomerID")
 17:   dc.AutoIncrement = True
 18:   dc.AutoIncrementSeed = -1
 19:   dc.AutoIncrementStep = -1
 20:
 21:   Dim dr As DataRow = dt.NewRow
 22:   dr("CompanyName") = "
フレンドリーソフト1"
 23:   dr("ContactName") = "
葛西 千春"
 24:   dt.Rows.Add(dr)
       :::
 34:   Dim dvrs As DataViewRowState = DataViewRowState.Added
 35:   Dim arrRows As DataRow() = dt.Select("", "", dvrs)
 36:   Response.Write("<h2>DataTable.NewRow</h2>")
 37:   For Each dr In arrRows
 38:     DisplayRow(dr)
 39:   Next
 40: End Sub

 

Sub DisplayRow()では、DataRowのすべてのカラム名とカラム値を表示します。行43では、DataRowTableプロパティからDataTableを生成しています。行45-62For Each…Nextでは、DataTableColumnsコレクションからDataColumnを取り出しています。行47-49は、DataRowRowStateが追加(Added)のとき実行されます。Response.Write()メソッドでは、カレントのカラム名とカラム値を表示しています。カラム名が得意先名のときは、得意先名の右に「(追加)」を付加します。行63では、DataRowのすべてのカラムを表示した後にHTML<hr>タグを表示しています。

 

42: Sub DisplayRow(dr As DataRow)
 43:   Dim dt As DataTable = dr.Table
 44:   Dim dc As DataColumn
 45:   For Each dc In dt.Columns
 46:     If dr.RowState = DataRowState.Added Then
 47:       Response.Write(String.Format("<b>{0}</b>: {1} <b>{2}</b><br>", _
 48:         dc.ColumnName, dr(dc.ColumnName, DataRowVersion.Current), _
 49:         Iif(dc.ColumnName="CompanyName","(
追加)","")))
 50:     ElseIf dr.RowState = DataRowState.Modified Then
 54:     ElseIf dr.RowState = DataRowState.Deleted Then
 58:     Else
 61:     End If
 62:   Next
 63:   Response.Write("<hr>")
 64: End Sub