連載:Windowsフォーム開発入門【Visual Studio 2010対応】

Windowsフォームにおける「データ・バインディング」

初音 玲
2010/11/16
Page1 Page2 Page3

(3)データ・バインディングで「選択候補としてデータを表示」

 Windowsフォームで使うコントロールの中には、ComboBoxコントロールのDropDownListスタイル(=テキストボックス部分が編集できないComboBoxコントロール。参考:「.NET TIPS:コンボボックス(ComboBoxコントロール)を読み取り専用にするには?」)やListBoxコントロールのように、複数の候補からデータを選択するUI(ユーザー・インターフェイス)を実現するものがある。このようなコントロールの場合、2つのデータ・バインディングを使って効率的にデータセットと連携させることができる。

 今回のサンプル・プログラムでは、XMLファイルから読み込んだデータを、DropDownListスタイルのComboBoxコントロールに表示する。また同時に、ComboBoxコントロールでの選択結果もデータ・バインディングされる(前述の「(2)現在行のデータを表示」と同じ仕組み)。この2つのデータ・バインディングの仕組みは、図8を参考にしてほしい。

図8 DropDownListスタイルのComboBoxコントロールに対する2つのデータ・バインディング
ComboBoxコントロールのDataSourceプロパティにより、「データセットのデータテーブルA」と「一覧表示」がデータ・バインディングされる。
さらに、ComboBoxコントロールのDataBindingsコレクション・プロパティにより、「(データセットのデータテーブルBとデータ・バインディングされた)BindingSourceコンポーネント」と「選択結果」がバインディングされる。

 ComboBoxコントロールのDataSourceプロパティに設定したデータテーブルは、選択一覧のデータとして利用する。そして選択した値は、DataBindingsコレクション・プロパティを通して、(BindingSourceコンポーネントとデータ・バインディングされた)別のデータテーブルの現在行の指定列と連携している。

 今回作成したサンプルは、下記のリンクからダウンロードできる。

 以上のデータ・バインディング処理は、下記のように、Windowsフォーム画面のShownイベント・プロシージャ内に実装している。

Private Sub Me_Shown(ByVal sender As Object, _
           ByVal e As EventArgs) _
         Handles Me.Shown
  Me.Cursor = Cursors.WaitCursor
  Me.Refresh()

  Try
    Ds.Tables.Clear()

    ' XMLファイルからデータセットに読み込み
    Ds.ReadXml(DataFileName)
    Ds.Tables("data").AcceptChanges()

    ' 選択結果のデータ・バインディング
    Me.XML_BindingSource.DataSource = Ds.Tables("data")
    Me.Title_ComboBox.DataBindings.Add(New Binding( _
                             "TexT", _
                             Me.XML_BindingSource, _
                             "タイトル", _
                             True))

    ' 選択一覧のデータ・バインディング
    Me.Title_ComboBox.DataSource = Ds.Tables("data")
    Me.Title_ComboBox.DisplayMember = "タイトル"
    Me.Title_ComboBox.ValueMember = "日付"
  Catch ex As Exception
    MessageBox.Show(ex.Message, Me.Text)
  Finally
    Me.Cursor = Cursors.Default
  End Try
End Sub
private void Me_Shown(object sender, EventArgs e)
{
  this.Cursor = Cursors.WaitCursor;
  try
  {
    Ds.Tables.Clear();

    // XMLファイルからデータセットに読み込み
    Ds.ReadXml(DataFileName);
    Ds.Tables["data"].AcceptChanges();

    // 選択結果のデータ・バインディング
    this.XML_BindingSource.DataSource = Ds.Tables["data"];
    this.Title_ComboBox.DataBindings.Add(new Binding(
                             "TexT",
                             this.XML_BindingSource,
                             "タイトル",
                             true));

    // 選択一覧のデータ・バインディング
    this.Title_ComboBox.DataSource = Ds.Tables["data"];
    this.Title_ComboBox.DisplayMember = "タイトル";
    this.Title_ComboBox.ValueMember = "日付";
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, this.Text);
  }
  finally
  {
    this.Cursor = Cursors.Default;
  }
}
リスト6 2つのデータバインドを活用するコード(上:VB、下:C#)

 サンプル・コードでは、ComboBoxコントロールのDisplayMemberプロパティとValueMemberプロパティの使い方にも注目してほしい。

 例えば、「エンド・ユーザーから都道府県名が指定されると、都道府県コードを取得したい」ような場合には、DisplayMemberプロパティに「都道府県名」、ValueMemberプロパティに「都道府県コード」を指定しておく。こうしておけば、Windowsフォーム画面のComboBoxコントロールで「都道府県名」を選択すると、SelectedValueプロパティに対応する値をValueMemberプロパティに指定した列(この場合「都道府県コード」)から取得できる。

まとめ

 データ・バインディングの基礎的な部分を中心に説明してきたが、「New Binding」でプロパティと列名を結び付けるのが煩雑に感じられたのではないだろうか。

 この連携部分は、Visual Studioで型付きデータセットを作成すれば、コントロールの[プロパティ]ウィンドウで設定できるようになる。型付きデータセットは後々紹介する予定だが、そこで生成されるコードは今回紹介したサンプル・コードの「New Binding」と類似のコードになるので、型付きデータセットを使ったケースでも、デバッグなどを行う場合に、今回得た知識は役に立つと思う。end of article


 INDEX
  [連載]Windowsフォーム開発入門【Visual Studio 2010対応】
  Windowsフォームにおける「データ・バインディング」
    1.データ・バインディングで「複数行のデータを表示」
    2.データ・バインディングで「現在行のデータを表示」
  3.データ・バインディングで「選択候補としてデータを表示」

インデックス・ページヘ  「Windowsフォーム開発入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH