none
データベースからDropDownListへデータの表示方法 RRS feed

  • 質問

  • こんばんは
    Webアプリケーションを作成し始めた初心者です。
    いろいろと勉強させていただいていますが壁にぶつかってばかりで思うように行きません。
    今週は下記内容の回避策を探し回っていたんですがどうにも解らず申し訳ありませんが
    お助けください。
    ・DropDownList1:「項目の編集」でListItemに書き込みをしております、
     textに部署名、Valueに部署番号
    ・DropDownList2Tongue TiedQLデータベースのテーブルをDropDownList1の部署番号で
     バインドして部署所属の社員名を表示させる
    上記List1,List2で選択した部署名と社員名を「登録テーブル」へ保管。
    「新規登録」時は問題ないのですが「更新」をする為に書いた内容を再表示しようとすると
    DropDownList2に名前があがってきません。
    DropDownList1.SelectedItem.Text=(dv(0)("部署名")).Tostring
    DropDownList2.SelectedItem.Text=(dv(0)("担当者")).Tostring

    でList1には表示されますが同じ書式ではList2は{””}の状態です。
    ただのTextBoxにすれば表示されます。
    何か方法があるのでしょうが今の私にはなすすべがありません。
    ご指導よろしくお願いいたします。

    2007年8月18日 13:32

すべての返信

  • バインドされているので、SelectedValueに値をセットしてみて下さい。

    2007年8月23日 8:25
    モデレータ
  • 回答ありがとうございます。

    あきらめていたので感激です。

     

    DropDownList2.SelectedValue=(dv(0)(”担当者”)).Tostring

    と変更したところ下記エラー表示となります。

     

    '/WebDD1' アプリケーションでサーバー エラーが発生しました。
    --------------------------------------------------------------------------------

    項目一覧に存在しないため、'DropDownList2' に SelectedValue を指定することは無効です。
    パラメータ名: value

     

    現在はDropDownListの脇にLabelを追加して変更の場合はLabelにバインドデータを

    貼り付けています。書き込み時はLabelの内容を書き込みするようにしています。

    当然、DropDownListの内容も常に確認し、””でなければLabelへ書き込みをするようにしてます。

    簡単に出来るようになっているんでしょうが私の頭ではこんな程度しか思いつきません。

    DropDownList脇に同じ名前がのって来るため目ざわりです。何とか消したいと思っています

    よろしくお願いいたします。

    2007年8月28日 5:19
  •  ranbol さんからの引用

    項目一覧に存在しないため、'DropDownList2' に SelectedValue を指定することは無効です。

     

    このメッセージの通りなのですが、選択すべき値がDropDownListのリスト中にないために発生しているエラーです。

     

    アプリケーションの仕様がはっきりわからないのですが、登録時にはDropDownListから選択するだけではないのでしょうか?

    それとも、登録時にDropDownListのリストに無い値は、追加できるような仕様なのでしょうか?

     

    いずれにしてもエラーメッセージが示している通り、DropDownListのリストにない値を選択することはできません。

    2007年8月29日 2:40
    モデレータ
  • お世話様です

    いろいろと調べてみました。下記が現状プログラムです

    <tr>
                <td style="width: 131px">
                    担当者名:</td>
                <td style="width: 100px">
                    &nbsp;<aspBig SmileropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
                        <asp:ListItem></asp:ListItem>
                        <asp:ListItem Value="12">営業部</asp:ListItem>
                        <asp:ListItem Value="151">生産管理部 資材課</asp:ListItem>
                        <asp:ListItem Value="152">生産管理部 企画課</asp:ListItem>
                        <asp:ListItem Value="161">設計部 特許課</asp:ListItem>
                        <asp:ListItem Value="162">設計部 電気課</asp:ListItem>
                        <asp:ListItem Value="163">設計部 設計課</asp:ListItem>
                    </aspBig SmileropDownList>
                    <aspBig SmileropDownList ID="DropDownList2" runat="server" Width="108px" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="name" AutoPostBack="True">
                    </aspBig SmileropDownList><aspTongue TiedqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStringsBig SmileBConnectionString %>"
                        SelectCommand="SELECT [name] FROM [Tbl_name] WHERE ([Category] = @Category)">
                        <SelectParameters>
                            <asp:ControlParameter ControlID="DropDownList1" Name="Category" PropertyName="SelectedValue"
                                Type="String" />
                        </SelectParameters>
                    </aspTongue TiedqlDataSource>
                </td>
            </tr>

    DoropDownList1の選択項目に応じてデータベーステーブルから担当者名をDropDownList2へ拾い出しています。

    上記プログラムのDoropDownList1 ListItenの書き込みでValue数値をTextと同じにしたところ、問題なく更新時

    表示があがってくるようになりました。エラーも出ません。

    変更内容はこのようになっていました。

             <asp:ListItem>営業部</asp:ListItem>
                        <asp:ListItem>生産管理部 資材課</asp:ListItem>
                        <asp:ListItem>生産管理部 企画課</asp:ListItem>
                        <asp:ListItem>設計部 特許課</asp:ListItem>
                        <asp:ListItem>設計部 電気課</asp:ListItem>
                        <asp:ListItem>設計部 設計課</asp:ListItem>

    ただ、数値も必要なのでどうしたものか思案中です。何か設定方法(読み出しの)があるのでしょうか?

    別に数値を拾えるようにしたほうが簡単ですか?

    お手数をおかけいたしますがよろしくお願いいたします。

    2007年9月1日 9:29
  • Textで検索したい場合は、DropDownListのItemsコレクションにFindByTextがありますので、これを使って検索し、見つかったListItemのSelectedプロパティをtrueにセットすれば良いでしょう。

    しかし、一般的にはプログラムはコードで、つまりvalueで操作するように組むべきでしょう。コードであれば自動採番させて一意性を保つことも楽にできます。Textはあくまで人間に見せるためのものと考えておいた方が融通が利きます。人間に見せるものなので、変更しなければならないケースも有り得ます。このようにTextとValueにはそれぞれ役割があります。
    以上は一般論です。

    2007年9月1日 15:44
    モデレータ
  • お世話さまです

    DropDownListのItemsコレクションでのFindByの使い方がわからず悩みましたが

    こういった使い方もできる事が解り良い勉強になりました。

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

     

     

    2007年9月5日 1:22