記事内に広告が含まれています。

Windows Forms:ComboBox に DataTable をバインドする(実行可能サンプルあり)

2024年3月31日

Windows Forms(.NET 8)で提供されている ComboBox に、DataTable をバインドする方法を紹介します。実行可能サンプルも公開しますので、ダウンロードしていただき、すぐに動作を確認することができます。

フォーム上に ComboBox を配置する

フォームデザイナを利用し、ComboBox と Button コントロールを配置しておきます。

DataTable を用意する

続いて、ComboBox にバインドする DataTable を用意します。コードの詳細は、コメントを参照ください。

private DataTable getData()
{
    //DataTable オブジェクトの作成
    DataTable dt = new DataTable();
    //主キーオブジェクトの作成
    DataColumn[] primaryColumn = new DataColumn[1];

    //列の定義
    primaryColumn[0] = dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    //主キーの設定
    dt.PrimaryKey = primaryColumn;

    //ダミーデータの作成
    dt.Rows.Add(1, "りんご");
    dt.Rows.Add(2, "ぶどう");
    dt.Rows.Add(3, "いちご");
    return dt;
}

ComboBox に DataTable をバインドする

フォームのロードタイミングで ComboBox に DataTable をバインドし、ComboBox 各項目の値と DataTable 列のマッピング、ComboBox 各項目の表示テキストと DataTable 列のマッピングをそれぞれ行います。

private void Form1_Load(object sender, EventArgs e)
{
    this.comboBox1.DataSource = getData();  //ComboBox に DataTable をバインド
    this.comboBox1.ValueMember = "Id";      //ComboBox の値プロパティ
    this.comboBox1.DisplayMember = "Name";  //ComboBox の表示プロパティ
}

ComboBox の選択項目の値を取得する

アプリケーション実行時の、ComboBox の選択項目の値や表示テキストを取得する実装を行います。ボタンクリック時のイベントに、下記を実装します。

private void button1_Click(object sender, EventArgs e)
{
    //ComboBox の選択項目の取得
    var item = this.comboBox1.SelectedItem;
    //選択項目の Id 列の値
    Debug.WriteLine((item as DataRowView)?.Row.ItemArray[0]);
    //選択項目の Name 列の値(表示値)
    Debug.WriteLine((item as DataRowView)?.Row.ItemArray[1]);
}

実行結果

ボタンクリック時に、SelectedItem に含まれる行の項目を Debug.WriteLite で出力ウィンドウに表示できていることがわかります。

サンプルアプリケーション

サンプルアプリケーションは、下記からダウンロードすることができます。

-Windows Forms