none
DropDownListの使い方 RRS feed

  • 質問

  • Gridviewの、A列をDropDownListを使って抽出表示させたいです。

    A列には5種類の項目があり、約3000件が入力されています。

    DropDownListに5種類を表示させ、3000件の中から抽出するにはどうしたらよいでしょうか?

    B列は別のテーブル(項目だけが入力されている)とクエリーエディタを使い結合させて抽出させることはできましたが、

    A列には項目だけが入力されているテーブルがありません。

    どなたかご教授よろしく願いします。


    2011年7月13日 2:27

回答

  • DropDownList をデータバインドするか、ListItem を手動で追加するか、どちらか一
    方のみにすればうまくいくと思います。

    前者は、小野さんが言われたように DISTINCT を使って一意な「費目」データを抽出
    する方法です。以下のような感じです。AccessDataSource は GridView のものとは別
    にします。

    <asp:AccessDataSource ID="AccessDataSource2" runat="server"
        DataFile="~/App_Data/河川工事履歴V6.mdb"
        SelectCommand="SELECT DISTINCT [費目] FROM [工事台帳]">
    </asp:AccessDataSource>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
        DataSourceID="AccessDataSource2" DataTextField="費目" DataValueField="費目">
    </asp:DropDownList>

    後者は以下のような感じです。データバインドはしません(AccessDataSource は使いま
    せん)。

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
        <asp:ListItem>改修</asp:ListItem>
        <asp:ListItem>維持</asp:ListItem>
        <asp:ListItem>災害</asp:ListItem>
    </asp:DropDownList>

    • 回答としてマーク taka_toshi 2011年7月15日 6:15
    2011年7月14日 12:48

すべての返信

  • A列の項目が5種類というのは今後変わる可能性はどれぐらいあるでしょう?
    それほど頻繁には追加等がされないのであれば、DropDownListに直接5種類の項目を記述してしまって、それぞれ選択したときに抽出できるようにすればよいと思います。

    データの追加により、自動的にA列の項目の種類が増えていく、というような場合は、Distinctを使ってA列から一意なデータを取り出すSQL文を作成し、それをDropDownListに追加する、といったプログラムを作ればよいかと。

     


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年7月13日 3:36
  • ありがとうございます。

    項目の追加は当面ありません。

    >DropDownListに直接5種類の項目を記述してしまって、

    これはDropDownListタスクのListItemコレクションエディターで項目を追加するのとは違いますか?

    これはいろいろとやってみましたがうまき行きませんでした。

    コードで直接記入しなければならないとしたら記入例または参照URLを教えていただければ助かります。

    何せ初心者なもので、、、。

    よろしくお願いします。

    2011年7月13日 4:28
  • > これはDropDownListタスクのListItemコレクションエディターで項目を追加するのとは違いますか?
    > これはいろいろとやってみましたがうまき行きませんでした。

    そうです。
    それでうまくいってないということはそこでListItemを作成したあとのプログラムの作り方に問題があると思います。

     


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年7月13日 5:00
  • 差し支えなければ、必要最小限に絞ってコードをアップできませんか? 文章だけでは問題点が分かりませんので。

     

    2011年7月13日 16:05
  • コードは以下のようになっています。

     現在DropDownListをクリックすると、”改修”だけが数千表示されます。

    <ListItemを作成したあとのプログラムの作り方に問題があると思います。

    すみませんお恥ずかしいことにプログラムの作り方自体が分かりません。サイトでいろいろ調べたのですがわかりませんでした。

    よろしくお願いします。

    <body>
        <form id="form1" runat="server">
        <div>   
        </div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            DataKeyNames="工事台帳ID" DataSourceID="AccessDataSource1">
            <Columns>
                <asp:BoundField DataField="工事台帳ID" HeaderText="工事台帳ID" InsertVisible="False"
                    ReadOnly="True" SortExpression="工事台帳ID" />
                <asp:BoundField DataField="費目" HeaderText="費目" SortExpression="費目" />
                <asp:BoundField DataField="工事名称" HeaderText="工事名称" SortExpression="工事名称" />
                <asp:BoundField DataField="工事概要" HeaderText="工事概要" SortExpression="工事概要" />
            </Columns>
        </asp:GridView>
        <asp:AccessDataSource ID="AccessDataSource1" runat="server"
            DataFile="~/App_Data/河川工事履歴V6.mdb"
            SelectCommand="SELECT [工事台帳ID], [費目], [工事名称], [工事概要] FROM [工事台帳] WHERE ([費目] = ?)">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="費目"
                    PropertyName="SelectedValue" Type="String" />
            </SelectParameters>
        </asp:AccessDataSource>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
            DataSourceID="AccessDataSource1" DataTextField="費目" DataValueField="費目">
            <asp:ListItem>改修</asp:ListItem>
            <asp:ListItem>維持</asp:ListItem>
            <asp:ListItem>災害</asp:ListItem>
        </asp:DropDownList>
        </form>
    </body>

    2011年7月14日 1:11
  • DropDownList をデータバインドするか、ListItem を手動で追加するか、どちらか一
    方のみにすればうまくいくと思います。

    前者は、小野さんが言われたように DISTINCT を使って一意な「費目」データを抽出
    する方法です。以下のような感じです。AccessDataSource は GridView のものとは別
    にします。

    <asp:AccessDataSource ID="AccessDataSource2" runat="server"
        DataFile="~/App_Data/河川工事履歴V6.mdb"
        SelectCommand="SELECT DISTINCT [費目] FROM [工事台帳]">
    </asp:AccessDataSource>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
        DataSourceID="AccessDataSource2" DataTextField="費目" DataValueField="費目">
    </asp:DropDownList>

    後者は以下のような感じです。データバインドはしません(AccessDataSource は使いま
    せん)。

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
        <asp:ListItem>改修</asp:ListItem>
        <asp:ListItem>維持</asp:ListItem>
        <asp:ListItem>災害</asp:ListItem>
    </asp:DropDownList>

    • 回答としてマーク taka_toshi 2011年7月15日 6:15
    2011年7月14日 12:48
  • ありがとうございました。無事解決できました。

    御二方とも今後ともよろしくお願いします。

    まだ聞きたいことがありますが別スレで質問させていただきます。

    よろしくお願いします。

    2011年7月15日 6:20