none
検索機能 RRS feed

  • 質問

  •  

    ユーザーがテキストボックスに顧客番号と名前、または顧客名だけか名前だけを入力してしても検索できるようにしたいのですが、そのコードの書き方が分かりません。

    検索項目が1つだけの場合のコードの書き方は http://asp.net/guidedtour2/s9.aspx を読んで分かったのですが。。。

    誰か検索項目が複数でも1つでも検索できるコードの書き方やサンプルコード公開のサイトを知りませんか?

    宜しくおねがいします。

    2006年7月23日 9:30

回答

  • lypusさん、進みましたか? 最初の取っ掛かりとして、サンプルコードを掲載します。Button1_Clickでも、Button2_Clickでも同じ動きをします。文字列連結はStringBuilderを使うのが基本ですが(パフォーマンスの理由で)、Button2_Clickの方がわかりやすいと思います。これぐらいのコードなら、パフォーマンスに差も出ないと思いますし。言語はわからなかったのでC#で書いてます。ロジック的には難しくないので、VBに置き換えるのも、そう難しくはないと思います。
    そのものずばりのサンプルコードはなかなか見つかるものではありませんので、参考になるコードやヒントを探すことになります。あとは何かの入門の本を読まれたら良いと思います。
    protected void Button1_Click(object sender, EventArgs e)
    {
    StringBuilder sqlwk = new StringBuilder("select testid, test2id from test");
    StringBuilder sb = new StringBuilder();

    if (TextBox1.Text != string.Empty)
    sb.Append("TESTID=").Append(TextBox1.Text).Append(" or ");

    if (TextBox2.Text != string.Empty)
    sb.Append("TEST2ID=").Append(TextBox2.Text).Append(" or ");

    if (sb.Length > 0)
    {
    sb.Insert(0, " where ");
    string wherewk = sb.ToString().Substring(0, sb.Length - 4); //最後の「 or 」を除く
    sqlwk.Append(wherewk);
    }

    SqlDataSource1.SelectCommand = sqlwk.ToString();
    GridView1.DataBind();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
    string wherewk = "";

    if (TextBox1.Text != "")
    wherewk += "TESTID=" + TextBox1.Text + " or ";

    if (TextBox2.Text != "")
    wherewk += "TEST2ID=" + TextBox2.Text + " or ";

    if (wherewk != "")
    wherewk = " where " + wherewk.Substring(0, wherewk.Length - 4); //最後の「 or 」を除く

    string sqlwk = "select testid, test2id from test" + wherewk;

    SqlDataSource1.SelectCommand = sqlwk;
    GridView1.DataBind();
    }
    2006年7月25日 3:08
    モデレータ

すべての返信

  • lyplus さん、こんにちは。

     lyplus さんからの引用
    ユーザーがテキストボックスに顧客番号と名前、または顧客名だけか名前だけを入力してしても検索できるようにしたいのですが、そのコードの書き方が分かりません。誰か検索項目が複数でも1つでも検索できるコードの書き方やサンプルコード公開のサイトを知りませんか?

    うーん、ちょっと整理させてください。

    検索項目が 1 つというよりは、検索項目が不完全な状態...
    たとえば、'あ' で検索すると、「あべ」 と 「あいざわ」 などがヒットする。
    同時に、検索結果が 1 つ以上になる場合、という意味ではないのでしょうか?

    であれば、ワイルドカード、パターンマッチ、正規表現、などを検索すると良いでしょう。
    検索相手は、データベースですよね。(どの、DBMS を使われているかわかりませんが)

    2006年7月23日 10:24
  • 名前と顧客名のテキストボックスをそれぞれ用意します。
    ユーザーが検索ボタンを押したら、入力されている状況に応じて、動的にselect文を作成します。
    作成したら、例えば、

    SqlDataSource1.SelectCommand = 動的に作成したSQL文;
    GridView1.DataBind();

    のようにします。

    以上が簡単な流れです。

    じゃんぬさんが言われるようなワイルドカードを組み込む場合は、「語頭一致」や「含む」というラジオボタンを用意し、それをユーザーに選択させるのが普通です。

    2006年7月23日 15:38
    モデレータ
  • じゃんぬねっとさん

    タイプミスをしてしまいました。

    ユーザーがテキストボックスに顧客番号と名前、または顧客番号だけか名前だけを入力してしても検索できるようにしたいのですが、そのコードの書き方が分かりません。

    データベースはVisual Web Developer Express で作りました。 

    trapemiyaさん

    ビギナーなので具体的にコードを見ないとよく分からないのですが、どこかサンプルコードを乗せているサイトを知っていたら教えて下さい。

    2006年7月23日 18:22
  • lyplus さん、こんにちは。

     lyplus さんからの引用
    ビギナーなので具体的にコードを見ないとよく分からないのですが、どこかサンプルコードを乗せているサイトを知っていたら教えて下さい。

    Visual Web Developer Express Edition フォーラム にご投稿されていますが、
    lyplus さんがご不明な部分というのは、SQL コマンドなのでしょうか?

    Framework サイドのソースは trapemiya さんの書かれた内容から十分追える
    (追う == メソッドなどの意味がわからければ、リファレンスを見るなど)
    ことができるかと思います。

    2006年7月24日 0:30
  • lypusさん、進みましたか? 最初の取っ掛かりとして、サンプルコードを掲載します。Button1_Clickでも、Button2_Clickでも同じ動きをします。文字列連結はStringBuilderを使うのが基本ですが(パフォーマンスの理由で)、Button2_Clickの方がわかりやすいと思います。これぐらいのコードなら、パフォーマンスに差も出ないと思いますし。言語はわからなかったのでC#で書いてます。ロジック的には難しくないので、VBに置き換えるのも、そう難しくはないと思います。
    そのものずばりのサンプルコードはなかなか見つかるものではありませんので、参考になるコードやヒントを探すことになります。あとは何かの入門の本を読まれたら良いと思います。
    protected void Button1_Click(object sender, EventArgs e)
    {
    StringBuilder sqlwk = new StringBuilder("select testid, test2id from test");
    StringBuilder sb = new StringBuilder();

    if (TextBox1.Text != string.Empty)
    sb.Append("TESTID=").Append(TextBox1.Text).Append(" or ");

    if (TextBox2.Text != string.Empty)
    sb.Append("TEST2ID=").Append(TextBox2.Text).Append(" or ");

    if (sb.Length > 0)
    {
    sb.Insert(0, " where ");
    string wherewk = sb.ToString().Substring(0, sb.Length - 4); //最後の「 or 」を除く
    sqlwk.Append(wherewk);
    }

    SqlDataSource1.SelectCommand = sqlwk.ToString();
    GridView1.DataBind();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
    string wherewk = "";

    if (TextBox1.Text != "")
    wherewk += "TESTID=" + TextBox1.Text + " or ";

    if (TextBox2.Text != "")
    wherewk += "TEST2ID=" + TextBox2.Text + " or ";

    if (wherewk != "")
    wherewk = " where " + wherewk.Substring(0, wherewk.Length - 4); //最後の「 or 」を除く

    string sqlwk = "select testid, test2id from test" + wherewk;

    SqlDataSource1.SelectCommand = sqlwk;
    GridView1.DataBind();
    }
    2006年7月25日 3:08
    モデレータ
  • trapemiya さん

    サンプルコードありがとうございます。すごいですね、大変参考になります。

    VBでコーディングしてるんですが、trapemiyaさんのC#のコードを本を見てVBに置き換えて見ます。

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

     

     

    2006年7月27日 23:36