DataTable作成

 今まではDataAdapterオブジェクトを使用してデータテーブルを使ってきました。ここではデータベースと同期をとらずにDataTableオブジェクトを扱う方法を見てみましょう。次の手順でデータテーブルを生成します。

  1. DataTableオブジェクトを生成する
  2. DataTableオブジェクトに列設定を追加する
  3. DataTableオブジェクトより新規行を取得する
  4. 取得した新規行にデータを設定する
  5. 設定した行をDataTableオブジェクトに追加する

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 DataTableCreateTest

サンプルダウンロード

○ プログラム

 Mainメソッドを次のように修正してください。

Module1.vb

  1. Sub Main()
  2.  'DataTableオブジェクトを生成
  3.  Dim dt As New DataTable("Personal")
  4.  'DataTableオブジェクトに列を追加
  5.  dt.Columns.Add("last_name", Type.GetType("System.String"))
  6.  dt.Columns.Add("first_name", Type.GetType("System.String"))
  7.  dt.Columns.Add("age", Type.GetType("System.Int32"))
  8.  'ループ
  9.  While True
  10.   'メニューを表示
  11.   Console.WriteLine("次のメニューから選んでください。")
  12.   Console.Write("1)追加  2)一覧  9)終了:")
  13.   Dim menunum As String = Console.ReadLine()
  14.   'メニューに応じて処理を分岐
  15.   Select Case menunum
  16.    Case "1"
  17.     'データを入力
  18.     Console.Write("姓:")
  19.     Dim lname As String = Console.ReadLine()
  20.     Console.Write("名:")
  21.     Dim fname As String = Console.ReadLine()
  22.     Console.Write("年齢:")
  23.     Dim age As Integer
  24.     Try
  25.      age = Int32.Parse(Console.ReadLine())
  26.     Catch ex As Exception
  27.      Console.WriteLine("年齢は数字を入力してください。")
  28.      Exit Select
  29.     End Try
  30.     'DataTableオブジェクトより新規行を取得
  31.     Dim dr As DataRow = dt.NewRow()
  32.     '取得した行にデータを設定
  33.     dr("last_name") = lname
  34.     dr("first_name") = fname
  35.     dr("age") = age
  36.     '新規行をDataTableオブジェクトに追加
  37.     dt.Rows.Add(dr)
  38.    Case "2"
  39.     '表示するデータがない場合
  40.     If dt.Rows.Count = 0 Then
  41.      Console.WriteLine("表示するデータはありません。")
  42.      Exit Select
  43.     End If
  44.     'DataTableオブジェクトの行を表示
  45.     Console.WriteLine("姓" & vbTab & "名" & vbTab & "年齢")
  46.     For Each dtrow As DataRow In dt.Rows
  47.      Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}", dtrow("last_name"), dtrow("first_name"), dtrow("age"))
  48.     Next
  49.    Case "9"
  50.     Return
  51.    Case Else
  52.     Console.WriteLine("正しい番号を入力してください。")
  53.   End Select
  54.   Console.WriteLine()
  55.  End While
  56. End Sub

○ 実行結果

次のメニューから選んでください。
1)追加  2)一覧  9)終了:2
表示するデータはありません。

次のメニューから選んでください。
1)追加  2)一覧  9)終了:1
姓:佐藤
名:一郎
年齢:22

次のメニューから選んでください。
1)追加  2)一覧  9)終了:2
姓 名 年齢
佐藤 一郎 22

次のメニューから選んでください。
1)追加  2)一覧  9)終了:1
姓:鈴木
名:花子
年齢:a
年齢は数字を入力してください。

次のメニューから選んでください。
1)追加  2)一覧  9)終了:1
姓:鈴木
名:花子
年齢:33

次のメニューから選んでください。
1)追加  2)一覧  9)終了:2
姓 名 年齢
佐藤 一郎 22
鈴木 花子 33

次のメニューから選んでください。
1)追加  2)一覧  9)終了:9
(終了)

○ 解説

 5行目では、DataTableオブジェクトを生成しています。そして8~10行目では列情報を追加しています。ColumnsコレクションンのAddメソッドに列名と、データ型を指定しています。今回は、姓・名・年齢を保存する列を定義しています。

 37行目ではデータを追加するために10行目までで準備したDataTableオブジェクトのNewRowメソッドを使ってDataRowオブジェクトを取得しています。このオブジェクトは行を表すオブジェクトで、姓・名・年齢を格納することができます。40~42行目で各列に入力したデータを設定しています。

 55~57行目では、DataTableオブジェクトの行数だけループします。56行目では取り出した1行のデータを表示しています。

前へ   次へ