質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • C#

    9665questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    645questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

C# ASP.NETでのドロップダウンリスト・テキストボックスでの絞り込み検索について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,145

mogumogu

score 10

C#初心者です。
ASP.NETを使い、物件の検索をドロップダウンリストから選択した内容に応じて行いたいです。
チーム名のドロップダウンを選択して検索ボタンを押したら、選択したチーム名に応じた検索結果を表示。
テキストボックスに文字列を入力して検索ボタンを押したら、入力文字列に応じた検索結果を表示するようにしたいと考えています。

現在、ドロップダウンリストのデータバインドとGridViewのデータソース構成はできたのですが、
ページをロードすると常にGridViewの表がすべて出てしまいます。
ドロップダウンを選択もしくは文字列入力して検索ボタンを押したときだけ、データを表示したいです。どのようにロジックを組めば良いでしょうか?
ご教示のほど、よろしくお願いいたします。

デザイン部分

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>物件検索</title>
    <style type="text/css">
        .auto-style1 {
            width: 180px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="index.aspx" >プロジェクト管理</asp:HyperLink><asp:LoginName ID="loginName" runat="server" />   <asp:LoginStatus ID="loginStatus" runat="server" />    
         
        <asp:HyperLink ID="p_input" runat="server" NavigateUrl="pinput.aspx" >物件入力</asp:HyperLink> 
        <asp:HyperLink ID="p_update" runat="server" NavigateUrl="pupdate.aspx" >物件更新</asp:HyperLink> 
    </div><br />
        物件検索 
        <br />
        <div>
            <table style="width: 100%;">
                <tr>
                    <td class="auto-style1">チーム名:</td>
                    <td>
                        <asp:DropDownList ID="Team" runat="server" DataSourceID="SqlDataSource1" DataTextField="NAME" DataValueField="NAME" OnSelectedIndexChanged="Team_SelectedIndexChanged" AutoPostBack="True" AppendDataBoundItems="True">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectManagementConnectionString %>" SelectCommand="SELECT [NAME] FROM [MTEAM]"></asp:SqlDataSource>
                    </td>

                </tr>
                <tr>
                    <td class="auto-style1">顧客名:</td>
                    <td>
                        <asp:DropDownList ID="Customer" runat="server" DataSourceID="SqlDataSource2" DataTextField="NAME" DataValueField="NAME" AutoPostBack="True" OnSelectedIndexChanged="Customer_SelectedIndexChanged" AppendDataBoundItems="True">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectManagementConnectionString %>" SelectCommand="SELECT [NAME] FROM [MCUSTOMER]"></asp:SqlDataSource>
                    </td>

                </tr>
                <tr>
                    <td class="auto-style1">プロジェクト責任者:</td>
                    <td>
                        <asp:DropDownList ID="Rpsn" runat="server" DataSourceID="SqlDataSource3" DataTextField="NAME" DataValueField="NAME" AutoPostBack="True" OnSelectedIndexChanged="Rpsn_SelectedIndexChanged" AppendDataBoundItems="True">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectManagementConnectionString %>" SelectCommand="SELECT [NAME] FROM [MRES]"></asp:SqlDataSource>
                    </td>

                </tr>
                <tr>
                    <td class="auto-style1">プロセス状況:</td>
                    <td>
                        <asp:DropDownList ID="Prcs" runat="server" DataSourceID="SqlDataSource4" DataTextField="NAME" DataValueField="NAME" AutoPostBack="True" OnSelectedIndexChanged="Prcs_SelectedIndexChanged" AppendDataBoundItems="True">
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectManagementConnectionString %>" SelectCommand="SELECT [NAME] FROM [MPRCS]"></asp:SqlDataSource>
                    </td>

                </tr>
                <tr>
                    <td class="auto-style1">物件コード(部分一致):</td>
                    <td>
                        <asp:TextBox ID="Pcinput" runat="server"></asp:TextBox></td>

                </tr>
                <tr>
                    <td class="auto-style1">物件名(部分一致):</td>
                    <td>
                        <asp:TextBox ID="Pninput" runat="server"></asp:TextBox> <input id="Search" type="button" value="検索" /></td>

                </tr>
                <tr>
                    <td colspan="2">

                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="976px" DataKeyNames="物件コード,顧客名" DataSourceID="SqlDataSource6" CellPadding="4" ForeColor="#333333" GridLines="None">
                            <AlternatingRowStyle BackColor="White" />
                            <Columns>
                                <asp:BoundField datafield="物件コード" ReadOnly="true" HeaderText="物件コード" SortExpression="物件コード"/>
                                <asp:BoundField datafield="物件名" HeaderText="物件名" SortExpression="物件名"/>
                                <asp:BoundField datafield="顧客名" ReadOnly="True" HeaderText="顧客名" SortExpression="顧客名"/>
                                <asp:BoundField datafield="チーム名" HeaderText="チーム名" SortExpression="チーム名"/>
                                <asp:BoundField datafield="プロジェクト責任者" HeaderText="プロジェクト責任者" SortExpression="プロジェクト責任者"/>
                                <asp:BoundField DataField="プロセス状況" HeaderText="プロセス状況" SortExpression="プロセス状況" />
                            </Columns>

                            <EditRowStyle BackColor="#2461BF" />
                            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                            <RowStyle BackColor="#EFF3FB" />
                            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                            <SortedAscendingCellStyle BackColor="#F5F7FB" />
                            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                            <SortedDescendingCellStyle BackColor="#E9EBEF" />
                            <SortedDescendingHeaderStyle BackColor="#4870BE" />

                        </asp:GridView>
                        <asp:SqlDataSource ID="SqlDataSource6" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectManagementConnectionString %>" SelectCommand="SELECT TPROJECT.PCODE AS 物件コード, TPROJECT.NAME AS 物件名, MCUSTOMER.NAME AS 顧客名, TPROJECT.TEAM AS チーム名, TPROJECT.RPSN AS プロジェクト責任者, TPROJECT.PRCSNAME AS プロセス状況 FROM TPROJECT INNER JOIN MCUSTOMER ON TPROJECT.CCODE = MCUSTOMER.CCODE"></asp:SqlDataSource>
                        <asp:SqlDataSource ID="SqlDataSource5" runat="server"></asp:SqlDataSource>
                    </td>


                </tr>
            </table>

        </div>
    </form>
</body>
</html>

コード

ロジック部分

using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace LoginTest
{
    public partial class Psearch : System.Web.UI.Page
    {
        //ページロード時の処理
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Team.Text == "チーム名を選択" && Customer.Text == "顧客名を選択" && Rpsn.Text == "プロジェクト責任者を選択" && Prcs.Text == "プロセス状況を選択")
            {

            }


    }

        //チーム名のドロップダウンリストの値を取得
        protected void Team_SelectedIndexChanged(object sender, EventArgs e)
        {
            var team = (DropDownList)sender;
            team.Text = team.SelectedValue;


        }

        //顧客名のドロップダウンリストの値を取得
        protected void Customer_SelectedIndexChanged(object sender, EventArgs e)
        {

            var customer = (DropDownList)sender;
            customer.Text = customer.SelectedValue;
        }

        //プロジェクト責任者のドロップダウンリストの値を取得
        protected void Rpsn_SelectedIndexChanged(object sender, EventArgs e)
        {

            var rpsn = (DropDownList)sender;
            rpsn.Text = rpsn.SelectedValue;
        }

        //プロセス状況のドロップダウンリストの値を取得
        protected void Prcs_SelectedIndexChanged(object sender, EventArgs e)
        {

            var prcs = (DropDownList)sender;
            prcs.Text = prcs.SelectedValue;
        }


        //検索ボタンをクリックした時の処理
        protected void Search_Click(object sender, EventArgs e)
        {
            //データベース接続を確立する。
            string sConnectionString;
            sConnectionString = @"Data Source=(localdb)\ProjectsV13;Initial Catalog=ProjectManagement;Integrated Security=True";
            SqlConnection objConn = new SqlConnection(sConnectionString);
            objConn.Open();

            string sqlall = "SELECT TPROJECT.PCODE AS 物件コード, TPROJECT.NAME AS 物件名, MCUSTOMER.CCODE AS 顧客名, TPROJECT.TEAM AS チーム名, TPROJECT.RPSN AS プロジェクト責任者, TPROJECT.PRCSNAME AS プロセス状況 FROM TPROJECT INNER JOIN MCUSTOMER ON TPROJECT.CCODE = MCUSTOMER.CCODE";
            SqlCommand com = new SqlCommand(sqlall, objConn);

            SqlDataReader sdr = com.ExecuteReader();
            while (sdr.Read() == true)
            {


            }

            objConn.Close();
            }

    }



    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

では最初は GridView は非表示にして[検索ボタン]クリックでポストバックしたら、そのイベントハンドラで表示するようにすればよさそうですが。

【追伸】

コメント欄に書いたつもりでしたが間違って回答欄に書いてしまいました。すみません。

ところで、初期画面で GridView を非表示にする以外は全て期待通り動いていると理解していますが、その理解でいいのですよね? その理解が正しければ上に述べた手段で解決できると思うのですが・・・

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/22 10:23

    ありがとうございます。
    grid viewを非表示にして、検索ボタンクリックでポストバックしたら結果表示する流れで合っています。

    いいえ、検索の機能は全然実装できていません。選択したドロップダウンリストから値を取得してその値で検索するには、取得した値をどうやって検索クエリに渡せば良いのでしょうか?

    キャンセル

  • 2016/09/22 10:42

    DropDownList を 2 つ使って絞り込むサンプルが以下の記事にありますが、これは参考にならないでしょうか?

    DropDownList を使って絞込み
    http://surferonwww.info/BlogEngine/post/2011/07/17/Showing-records-selected-by-DropDownLists-into-GridView.aspx

    キャンセル

  • 2016/09/23 11:34

    ありがとうございます。ドロップダウンリストの絞り込みをご紹介いただいたリンクで実装できそうです!
    参考にして作ってみます。

    キャンセル

0

コードは読んでなくてすみませんが、その前に確認させてください。

ドロップダウンを選択もしくは文字列入力して検索ボタンを押したときだけ、データを表示したいです。

ちょっと安易な方法かも知れませんが、初期画面では Control.Visible プロパティ を false にしておき、ドロップダウンを選択もしくは文字列入力して検索ボタンを押しポストバックされた時に GridView.Visible を true にするというのはどうでしょう?

それがダメなら、どういうところが問題か書いてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/21 20:44

    はい。初期状態でgridviewは非表示で、ドロップダウンもしくは文字列入力後に検索ボタンクリックされたらgridviewの表示をさせるという処理で問題ありません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9665questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    645questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。