DataTable作成

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

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

○ プロジェクト

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

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

サンプルダウンロード

○ プログラム

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

Program.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Data;
  7. namespace DataTableCreateTest
  8. {
  9.  class Program
  10.  {
  11.   static void Main(string[] args)
  12.   {
  13.    //DataTableオブジェクトを生成
  14.    DataTable dt = new DataTable("Personal");
  15.    //DataTableオブジェクトに列を追加
  16.    dt.Columns.Add("last_name", Type.GetType("System.String"));
  17.    dt.Columns.Add("first_name", Type.GetType("System.String"));
  18.    dt.Columns.Add("age", Type.GetType("System.Int32"));
  19.    //ループ
  20.    while (true)
  21.    {
  22.     //メニューを表示
  23.     Console.WriteLine("次のメニューから選んでください。");
  24.     Console.Write("1)追加  2)一覧  9)終了:");
  25.     string menunum = Console.ReadLine();
  26.     //メニューに応じて処理を分岐
  27.     switch (menunum)
  28.     {
  29.      case "1":
  30.       //データを入力
  31.       Console.Write("姓:");
  32.       string lname = Console.ReadLine();
  33.       Console.Write("名:");
  34.       string fname = Console.ReadLine();
  35.       Console.Write("年齢:");
  36.       int age;
  37.       try
  38.       {
  39.        age = Int32.Parse(Console.ReadLine());
  40.       }
  41.       catch(FormatException e)
  42.       {
  43.        Console.WriteLine("年齢は数字を入力してください。");
  44.        break;
  45.       }
  46.       //DataTableオブジェクトより新規行を取得
  47.       DataRow dr = dt.NewRow();
  48.       //取得した行にデータを設定
  49.       dr["last_name"] = lname;
  50.       dr["first_name"] = fname;
  51.       dr["age"] = age;
  52.       //新規行をDataTableオブジェクトに追加
  53.       dt.Rows.Add(dr);
  54.       break;
  55.      case "2":
  56.       //表示するデータがない場合
  57.       if(dt.Rows.Count == 0)
  58.       {
  59.        Console.WriteLine("表示するデータはありません。");
  60.        break;
  61.       }
  62.       //DataTableオブジェクトの行を表示
  63.       Console.WriteLine("姓¥t名¥t年齢");
  64.       foreach(DataRow dtrow in dt.Rows)
  65.       {
  66.        Console.WriteLine("{0}¥t{1}¥t{2}", dtrow["last_name"], dtrow["first_name"], dtrow["age"]);
  67.       }
  68.       break;
  69.      case "9":
  70.       return;
  71.      default:
  72.       Console.WriteLine("正しい番号を入力してください。");
  73.       break;
  74.     }
  75.     Console.WriteLine();
  76.    }
  77.   }
  78.  }
  79. }

○ 実行結果

次のメニューから選んでください。
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
(終了)

○ 解説

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

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

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

前へ   次へ