none
DataGrid内のDropDownListにバインドする方法 RRS feed

  • 質問

  • C#,Visual Studio2003を使用してWebフォームを作成しておりますが、
    マスタメンテナンス画面にてDataGridの中でDropDownListにて値を変更できるようにしたいと思っています。

    そこで、該当ColumnsのItemTemplateにDropDownListを配置し、
    あらかじめ用意しておいたDataTableBの内容をバインドしたいのですが、
    うまくいきません。(何もバインドされない状態です。)

    DataTableA(DataGridにバインド)
    +----+----+
    |品目|区分|
    +----+----+
    | A   | 1   |
    +----+----+
    | B   | 2   |
    +----+----+
    | C   | 1   |
    +----+----+

    DataTableB(DropDownListにバインド)
    +----+---------+
    |区分| 区分名   |
    +----+---------+
    | 1   | リスト1   |
    +----+---------+
    | 2   | リスト2   |
    +----+---------+

    同じDropDownListをDataGridの外に配置した場合は正常にバインドできています。
    バインドの方法は、DropDownListのプロパティ設定で、DataSourceにDataTableBを含むデータセット、
    Datamemberに"DataTableB"、DataTextFieldに"区分名"、
    DataValueFieldに"区分"を設定しています。

    DataGridの中にDropDownListを配置する場合のバインド方法が違うのではないかと思うのですが、
    何かご存知の方がいらっしゃいましたら教えて頂けないでしょうか?

    2009年2月27日 1:28

回答

  • こんにちは!(^^)!ふ~です。

    ◇ご参照資料です。

    DropDownListについて

    • 回答としてマーク sk7474 2009年3月5日 2:16
    2009年2月27日 1:52
  • こんにちは!(^^)!ふ~です。

    >何かのタイミングで再度バインドし直さなければならないという事でしょうか?

    この場合は、動的に、バインドされています。

    <asp:TemplateField   
       SortExpression="割引内容" 
         HeaderText="割引内容">  
     
      <ItemTemplate> 
        <asp:DropDownList  
          ID="DropDownList1"   
            Runat="server" 
             DataSourceID="SqlDataSource_割引内容" 
               DataTextField="割引内容" 
                 DataValueField="DrpNo" 
                   Width="100px" 
                    SelectedValue='<%# Eval("割引内容No") %>'>   
     
        </asp:DropDownList> 
      </ItemTemplate> 
    </asp:TemplateField> 

    この中で、<asp:DropDownList....>のようにDropDownListコントロールのインスタンスが生成されております。
    生成したばかりですので、何も値が入っておりません。
    そこで、DataSourceID、SelectedValueを設定して動的に値を格納しております。

     

    • 回答としてマーク sk7474 2009年3月5日 2:16
    2009年2月27日 4:17

すべての返信

  • こんにちは!(^^)!ふ~です。

    ◇ご参照資料です。

    DropDownListについて

    • 回答としてマーク sk7474 2009年3月5日 2:16
    2009年2月27日 1:52
  •  !(^^)!ふ~様、情報ありがとうございます。

    申し訳ない事に、私の知識レベルが低くて理解しきれていないのですが、
    DataGridの中にバインドする場合は、DropDownListのプロパティを予め設定しておくだけでは駄目で、
    何かのタイミングで再度バインドし直さなければならないという事でしょうか?

    2009年2月27日 2:16
  • こんにちは!(^^)!ふ~です。

    >何かのタイミングで再度バインドし直さなければならないという事でしょうか?

    この場合は、動的に、バインドされています。

    <asp:TemplateField   
       SortExpression="割引内容" 
         HeaderText="割引内容">  
     
      <ItemTemplate> 
        <asp:DropDownList  
          ID="DropDownList1"   
            Runat="server" 
             DataSourceID="SqlDataSource_割引内容" 
               DataTextField="割引内容" 
                 DataValueField="DrpNo" 
                   Width="100px" 
                    SelectedValue='<%# Eval("割引内容No") %>'>   
     
        </asp:DropDownList> 
      </ItemTemplate> 
    </asp:TemplateField> 

    この中で、<asp:DropDownList....>のようにDropDownListコントロールのインスタンスが生成されております。
    生成したばかりですので、何も値が入っておりません。
    そこで、DataSourceID、SelectedValueを設定して動的に値を格納しております。

     

    • 回答としてマーク sk7474 2009年3月5日 2:16
    2009年2月27日 4:17
  • !(^^)!ふ~様、何度も申し訳ないです。 

    私の方で作成したソースは以下のようになっています。
    上記で教えて頂いたものと異なる点は、SelectedValueの指定がないというところぐらいかと思うのですが、
    SelectdValueを記述しようとしたところそのような属性が存在せずエラーになってしまいました・・・。

    <asp:TemplateColumn HeaderText="区分">
       <ItemTemplate>
           <FONT face="MS UI Gothic">
           <asp:DropDownList id=ddl_ArepCd runat="server" Width="142px" DataSource="<%# dataSet1 %>" DataMember="DataTableB" DataTextField="区分名" DataValueField="区分">
           </asp:DropDownList></FONT>
       </ItemTemplate>
    </asp:TemplateColumn>

    何か根本的に間違えているのでしょうか・・・。

    2009年2月27日 4:40
  • こんにちは!(^^)!ふ~です。

    そもそも、VS2005のWeb開発で、GredViewにDropDownListを張り付けた場合と、Visual Studio2003のWeb開発でDataGridにDropDownListを張り付けた違いが有りました。

    ◆ご参考資料です。
    DataGridのカラムにCheckBox/DropDownList/Imageを表示するには 

    以上

     

     

    2009年2月27日 5:03
  •  !(^^)!ふ~様、ありがとうございます!
    解決しました!!

    バインドのタイミングが違っていたようで、
    DataGridのデータが生成された時、
    DataBindingイベントでDropDownListにバインドするように変更したところ
    正常に動作しました。

    何度も繰り返し質問してしまい、お手数をお掛けしました。
    いろいろとヒントを頂けて大変助かりました。
    今後とも宜しくお願い致します。

    2009年2月27日 6:32
  • こんにちは。中川俊輔 です。

    ふ~さん、回答ありがとうございます。

    koro123さん、フォーラムのご利用ありがとうございます。
    有用な情報と思われたため、ふ~さんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年3月5日 2:18