● DataTableにオートナンバー型の列を追加するサンプル

図 DataTableにオートナンバー型の列を追加するサンプル
このサンプルは、得意先のDataTableを作成して得意先IDをオートナンバー型で定義します。得意先IDは、新規レコードを追加すると自動的に採番されます。DataTableに新規レコードを追加したとき、DataTableの最終ID+1のIDが採番されます。DataTable上で採番された得意先IDは、あくまでも仮のIDですからデータベースに反映させたとき、異なる得意先IDが採番される可能性があります。ここでは、DataTableの仮IDを負の番号として認識させています。
このサンプルでは、以下のノウハウを習得することができます。
▲ DataTableを作成する方法
▲ DataTableにカラム(フィールド)を追加する方法
▲ DataTableのカラムをオートナンバー型にする方法
▲ オートナンバー型のカラムを負の番号で採番する方法
サンプルのPage_Load()イベントでは、DataTableを生成してオートナンバー型のカラムを追加しています。行8では、DataTableを生成しています。行11では、DataTableのColumns.Add()メソッドで得意先IDのカラムを追加しています。Add()メソッドの引数には、カラム名(フィールド名)、データ型を指定しています。行12では、得意先IDのAutoIncrementプロパティにTrueを設定してオートナンバー型にしています。行13-14では、AutoIncrementSeed、AutoIncrementStepプロパティに-1を設定して初期値と増加値を設定しています。これらのプロパティに-1を設定すると、得意先IDには-1, -2, -3…のように負の数が採番されます。行15では、ReadOnlyプロパティにTrueを設定して得意先IDを読み込み専用にしています。オートナンバー型のカラムは、アプリケーションから書き込みできませんので明示的に読み込み専用にすることをお勧めします。
行17-22では、DataTableに得意先名、担当者名、電話番号のカラムを追加しています。行23では、DataTableのPrimaryKeyプロパティにCustomerIDを設定して得意先IDを主キーにしています。
行25では、DataTableのTableNameプロパティに格納されているテーブル名を表示しています。行26では、DataTabeのColumnsコレクションから得意先ID(CustomerID)のDataColumnを取り出しています。行27-32では、得意先IDの各種プロパティを表示しています。
7: Sub Page_Load()
8: Dim dt As New
DataTable("Customers")
9: Dim dc As DataColumn
10:
11: dc = dt.Columns.Add("CustomerID", GetType(Integer))
12: dc.AutoIncrement = True
13: dc.AutoIncrementSeed = -1
14: dc.AutoIncrementStep = -1
15: dc.ReadOnly = True
16:
17: dc =
dt.Columns.Add("CompanyName", GetType(String))
18: dc.MaxLength = 40
19: dc =
dt.Columns.Add("ContactName", GetType(String))
20: dc.MaxLength = 30
21: dc =
dt.Columns.Add("Phone", GetType(String))
22: dc.MaxLength = 24
23: dt.PrimaryKey = New DataColumn()
{dt.Columns("CustomerID")}
24:
25:
Response.Write("<h2>" & dt.TableName &
"</h2>")
26: dc = dt.Columns(0)
27:
Response.Write(String.Format("<b>{0}</b><br>AutoIncrement:
{1}<br>
AutoIncrementSeed:
{2}<br>AutoIncrementStep: {3}<br>ReadOnly: {4}", _
28: dc.ColumnName, _
29: dc.AutoIncrement, _
30: dc.AutoIncrementSeed,
_
31: dc.AutoIncrementStep,
_
32: dc.ReadOnly))
33: End Sub
Tip
|
DataTableに連番を追加してページ単位でレコードを抽出するには 得意先テーブルの得意先IDをオートナンバー型で定義したときは、システムが自動採番しますので連番になります。ところが特定のレコードを削除すると、得意先IDが1, 2, 5,6,…のように不連続になります。得意先テーブルに連番を追加するには、得意先テーブルをDataTableに取り込んでからオートナンバー型のRowIDを追加します。RowIDには、1,2,3,..のように自動的に連続した番号が採番されます。 行29-30では、RowIDを使用して3ページ目に表示するレコードのみ抽出しています。このテクニックを応用すると、DataGridに得意先テーブルを表示するときページング処理を高速化できます。 14:
da.FillSchema(ds, SchemaType.Source, "Customers") 16:
Dim dt As DataTable = ds.Tables("Customers")
図 DataTableに連番を追加してページ単位でレコードを抽出するサンプル |