C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: GridViewへのコントロールからのパラメータの指定


(過去ログ 136 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■80186 / inTopicNo.1)  GridViewへのコントロールからのパラメータの指定
  
□投稿者/ mura (1回)-(2016/06/20(Mon) 09:49:24)

分類:[ASP.NET (VB)] 

GridViewで、パラメータにコントロールの内容をWHERE条件に設定することができますが、
コントロールの内容によってWHERE条件を使わないということはできるのでしょうか。


以下のような「売上テーブル(URIAGE)」があり、GridViewを使用してテーブルの内容を表示するASPページを
作成しようとしています。

[TENPOCD],[NENGETU],[KINGAKU]
A01,201604,100
A01,201605,150
B12,201604,120
B12,201605,140
C33,201604,130
C33,201605,160

ASPページには
店舗選択のドロップダウンリスト(TENPODDL)
年月入力のテキストボックス(NENGETUTXT)を配置し、
店舗選択ドロップダウンは以下のListItemを設定して選択できるようにしています。
ListItem("すべて","*")
ListItem("店舗A","A01")
ListItem("店舗B","B12")
ListItem("店舗C","C33")

GridViewの「データソースの構成」から、以下のようなSQLを指定しています
SELECT * FROM URIAGE
WHERE TENPOCD = @TENPODDL
AND NENGETU = @NENGETUTXT
パラメータは、@TENPODDLを店舗ドロップダウンリスト、@NENGETUTXTを年月テキストをソースとしています。

実現したいこととしては、以下となります。
・店舗選択ドロップダウンで「すべて」が選択されている場合は、店舗コードに関わらずSELECTする
・年月テキストボックスが空の場合は、年月に関わらずSELECTする

現在は、コマンドボタンを用意して、ボタンクリックイベント内で
・ドロップダウンの内容とテキストボックスの内容をチェックして、その内容によってSELECT文を組み立てる
 →ドロップダウンが「すべて」だったら、WHERE文はNENGETUだけにする。
  年月が空だったらWHERE文はTENPOCDだけにする。
  「すべて」かつ年月が空だったら、WHERE文無しにする。
・組み立てたSELECT文をGridViewのDataSourceにセットする
・GridView.DataBindする
ということで実現していますが、これだと、ASPページのソースにもボタンクリックイベントのソースにも
SQLが記述されることになるので、あまり望ましくない感じがします。

できればボタンクリックを使わずに実現したいのですが、よい方法がありましたら教えていただけると幸いです。
よろしくおねがいします。

引用返信 編集キー/
■80187 / inTopicNo.2)  Re[1]: GridViewへのコントロールからのパラメータの指定
□投稿者/ PANG2 (120回)-(2016/06/20(Mon) 10:16:48)
No80186 (mura さん) に返信
> 実現したいこととしては、以下となります。
> ・店舗選択ドロップダウンで「すべて」が選択されている場合は、店舗コードに関わらずSELECTする
> ・年月テキストボックスが空の場合は、年月に関わらずSELECTする

SELECT * FROM URIAGE
WHERE (@TENPODDL = '*' OR TENPOCD = @TENPODDL)
AND (@NENGETUTXT = '' OR NENGETU = @NENGETUTXT)
引用返信 編集キー/
■80188 / inTopicNo.3)  Re[1]: GridViewへのコントロールからのパラメータの指定
□投稿者/ WebSurfer (945回)-(2016/06/20(Mon) 10:45:59)
No80186 (mura さん) に返信

以下の記事の応用でできると思います。

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

上の記事は、マイクロソフトが無償で提供している Northwind サンプルデータベースの
Orders テーブルから Customer と Employee を抽出条件にして、両方とも DropDownList
を使ってユーザーに絞込みをさせています。

これの Employee 選択用の DropDownList を TextBox に代えて、EmployeeID の抽出条件
を、

(@EmployeeID='' OR e.EmployeeID=@EmployeeID)

のように変更(0 でなく '' を全件抽出条件にする)すれば望むことができるのではない
かと思います。検討してみてください。


なお、NULL が許可されている場合は更なる配慮が必要です。

DropDownList での NULL の処置
http://surferonwww.info/BlogEngine/post/2015/10/23/dropdpwnlist-handling-null-in-database.aspx

もう一つ、今回の質問とは直接関係ないことですが(でもこれが一番重要なことかも)、
TextBox のようなユーザー入力文字列でクエリを組み立てる場合は、入力の検証およびパ
ラメータ化による SQL インジェクションの防止は必須ですので、ご注意ください。
引用返信 編集キー/
■80189 / inTopicNo.4)  Re[1]: GridViewへのコントロールからのパラメータの指定
□投稿者/ WebSurfer (946回)-(2016/06/20(Mon) 10:51:00)
No80186 (mura さん) に返信

【追伸】

先の私のレスで、

> なお、NULL が許可されている場合は更なる配慮が必要です。

と書きましたけど、今回のケースでは関係なかったようです。そこのところのレスはスルーして
ください。
引用返信 編集キー/
■80192 / inTopicNo.5)  Re[2]: GridViewへのコントロールからのパラメータの指定
□投稿者/ mura (2回)-(2016/06/20(Mon) 13:42:40)
教えていただいた方法をやってみたところうまくいきました。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -