none
DataBindingしたコンボボックスについて RRS feed

  • 質問

  • 初歩的なことなのですが、コンボボックスにデータバインド項目を使用して表示しています。(データソースにはDBからデータを取得したものを使っています)

    動作自体はきちんと動いているのですが、

    一番上の部分に「選択して下さい」といった文言を入れる場合はどのようにすればよいでしょうか?

    データテーブルの内容は

    テーブル1というテーブルから

    idとnameを取得しています。 

     

    以下、コンボボックスの設定です。

    メンバの表示 name

    値のメンバ id

    選択された値 (なし)

    選択された値を変更して書けないかと思って、試してみたのですが挫折しました。

     

    すみませんが、問題の解決法、ヒントがあればどなたか教えていただけませんか?

    2012年1月25日 7:46

回答

  • いくつか方法があると思います。データベースから読んできたデータテーブルに「選択して下さい」という行を追加する方法、SQLで「選択して下さい」という行を作成してしまう方法などです。後者が簡単だと思います。例えば以下のようにします。

    select name, id from テーブル
    union all
    select '「選択して下さい」', 0
    order by id

    「選択して下さい」の行はidを0にしていますが、適当に変更して下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク tanaka0011 2012年1月25日 13:24
    2012年1月25日 8:50
    モデレータ
  • 愚直にDBのデータ取得とバインドの間に一枚層を設けて、 そこで未選択をデータを追加するのが潰しがきくとおもいます。 (データが選択されたら、未選択を示すデータは消すとか)
    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/
    • 回答としてマーク tanaka0011 2012年1月25日 13:33
    2012年1月25日 9:21

すべての返信

  • いくつか方法があると思います。データベースから読んできたデータテーブルに「選択して下さい」という行を追加する方法、SQLで「選択して下さい」という行を作成してしまう方法などです。後者が簡単だと思います。例えば以下のようにします。

    select name, id from テーブル
    union all
    select '「選択して下さい」', 0
    order by id

    「選択して下さい」の行はidを0にしていますが、適当に変更して下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク tanaka0011 2012年1月25日 13:24
    2012年1月25日 8:50
    モデレータ
  • 愚直にDBのデータ取得とバインドの間に一枚層を設けて、 そこで未選択をデータを追加するのが潰しがきくとおもいます。 (データが選択されたら、未選択を示すデータは消すとか)
    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/
    • 回答としてマーク tanaka0011 2012年1月25日 13:33
    2012年1月25日 9:21
  • trapemiyaさん、かずき_okazukiさん

    返信ありがとうございます。

    さっそくtrapemiyaさんの方法を採用した所、途中エラーが発生してしまいました。

    原因はまだ解析中なのですが、分かり次第書き込みをしたいと思います。

     

    かずき_okazukiさんの書かれた、

    DBのデータ取得とバインドの間に一枚層を設ける

    というのはどういうことなのでしょうか?

    すみませんC#始めたばかりで書かれたことをちゃんと理解できていません。

    その辺を参考書等でもう少し調べてみます。

    ありがとうございました。


    2012年1月25日 13:40
  • みなさん汎用的な話を書かれているのですが、使われている Visual Studio や、プロジェクトの設定の .NET Framework のバージョン、

    コンボボックスと書かれていますが、

    System.Windows.Controls.ComboBox なのか
    System.Web.UI.WebControl.DropdownList なのか
    System.Windows.Forms.ComboBox なのか
    (ないと思いますが、Microsoft.Office.Tools.Controls.ComboBox とか)

    たとえば、System.Windows.Forms.ComboBox ならば ComboBoxStyle は何を使用しているのか。

    といったことを書かれると、よりよい回答が得られるかもしれません。

     

    2012年1月26日 0:42
  • さっそくtrapemiyaさんの方法を採用した所、途中エラーが発生してしまいました。

    どのようなエラーが発生しているのでしょうか? union allで追加した行のidが重複しており、ユニークエラーが発生しているのかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2012年1月26日 1:24
    モデレータ
  • みなさん汎用的な話を書かれているのですが、使われている Visual Studio や、プロジェクトの設定の .NET Framework のバージョン、

    コンボボックスと書かれていますが、

    System.Windows.Controls.ComboBox なのか
    System.Web.UI.WebControl.DropdownList なのか
    System.Windows.Forms.ComboBox なのか
    (ないと思いますが、Microsoft.Office.Tools.Controls.ComboBox とか)

    たとえば、System.Windows.Forms.ComboBox ならば ComboBoxStyle は何を使用しているのか。

    といったことを書かれると、よりよい回答が得られるかもしれません。

     

    使っているVisualStudioはVisualStudio2005proffessionalです。C#でWindowsアプリケーションを作っています。

    コンボボックスは、System.Windows.Forms.ComboBoxです。

    書いている情報が少なかったですね。すみません。

     

     

    2012年1月26日 5:52