- PR -

複数の検索フォームとGridView

投稿者投稿内容
moku
会議室デビュー日: 2006/07/17
投稿数: 3
お住まい・勤務地: 千葉県
投稿日時: 2006-07-17 16:09
お世話になります。ASP.NET2.0+C#+SQL2000+VWDにて開発中です。
実装経験に乏しく、開発の最短路線を模索中でアドバイスお願い致します。

複数のTextBoxを各々検索フォームとし、ユーザーが自由に必要な項目のみキーワードとして入力し、検索ボタンを押下、するとRDBにAND条件でクエリが投げられ、GridViewに一覧表示される仕組みを考慮中です。

キーワード項目は、コードや名称、住所、日付などで、RDB側もInt・varchar・Datetimeなどがあります。

そこでお聞きしたいのですが、入力無しの項目については「条件=全てのデータ」としてGridViewから処理させたいのですが、個々のTextBoxの入力値をチェックして条件分岐させるコードを書く以外に、GridViewへの設定のみで実装する方法は無いでしょうか?

ちなみに、varchar型のデータについては「データソースの構成」においてlikeを指定し、既定値を「%」とすることで回避できました。SQL文の工夫による回避含め、アドバイスお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-17 19:19
引用:

個々のTextBoxの入力値をチェックして条件分岐させるコードを書く以外に、GridViewへの設定のみで実装する方法は無いでしょうか?


仰ってる意味がよくわかりませんが、GridView は表示側、つまり Out 側ですよね?
「設定のみ」とはどういった挙動を望んでいるのでしょうか?
_________________
囚人のジレンマな日々
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-17 19:31
> 個々のTextBoxの入力値をチェックして条件分岐させるコードを書く以外に、
> GridViewへの設定のみで実装する方法は無いでしょうか?

プログラムを記述せずに、ウィザードからの設定だけでやりたい、ということですかね?

これ、多分無理です。
ストアドプロシージャをうまくつくればできるかもしれませんが、それでは
コードを記述するのと変わりないでしょうし。

同じような画面がいくつもあって、何人もの人で作業するので設定だけでできるような
形にしたい、というのであれば、専用のクラスを作成してObjectDataSourceを利用する
という手があるかもしれません。
まぁ、だれかがクラスのコードを書く必要はありますが。
masakazu
会議室デビュー日: 2006/02/16
投稿数: 9
投稿日時: 2006-07-17 21:47
質問者の意図通りかどうかは分かりませんし、ちょっとトリッキーな手法かもしれませんが、私がたまにやる手法ではSQLにて
コード:
WHERE foo = NVL(:bar, foo)


といったWHERE句にしておいてテキストボックスが空だったら検索条件に使わないという動作をさせています。SQL Serverなら
コード:
WHERE foo = IsNull(@bar, foo)


といった感じでしょうか。(Sql Serverで試したことはありません。。)
ただ、何でもこれでOKかといわれると、さまざまな入力があるわけですから、DataSourceのSelectingイベントを使ってパラメータを設定するというパターンをとる場合もあります。また、SQL文で工夫した場合のパフォーマンスについての検証は必要でしょうね。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-07-18 06:19
私も、WHERE句にIsNull関数を追加して処理しています。

たとえば、DropDownListから「すべて表示」を選択したときは、
WHERE CategoryID=@CategoryID OR CategoryID = IsNull(@CategoryID, CategoryID)
のようなWHERE句にします。

※IsNullを使用するときは、CancelSelectOnNullParameter="False"を追加することを忘れないでください。


WHERE句にIsNullを使用したサンプル:
http://akiokasai.qsh.eu/Goto.aspx?id=060102-2

_________________
ASP.NET+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2006-07-18 06:25 ]
moku
会議室デビュー日: 2006/07/17
投稿数: 3
お住まい・勤務地: 千葉県
投稿日時: 2006-07-19 01:01
(曖昧な表現となっており申し訳ありませんでした。)
どっとねっとふぁん様の仰るとおりで、GridViewの「データソースの構成」ウィザードのみで(+SQL文くらいで)実装したい、ということです。

「IsNULL」というヒントを得て、以下のように設定してみましたがNGでした。
---------
1.「Selectステートメントの構成」にて「デーブルまたビューから〜」を選択
2.「列」をコード含め幾つかチェック
3.「WHERE句の追加」にて「列」=”コード”、「演算子」=”=”、「ソース」=”Control”、「コントロールID」=”(コード列名)”、「既定値」=”SOME(select StoreCD from Store)”
4.「クエリのテスト」にて「型」のいずれを選択してもエラーの結果となる(エラーの種類はそれぞれ異なる)
 *ちなみに”String”でのエラーは「nvarchar値'SOME(select StoreCD from Store)'からintデータ型に変換できませんでした。」
 *コード列は、intでデータ定義
---------

キャストのコーディングが必要ということなんでしょうか。
今日のところは時間切れのため明日に持越しです。
IsNULLについてはまだ充分にアドバイスを理解し切れていないかも、で、「Selectステートメントの構成」にて”カスタムSQLステートメントまたは〜”にてSQL・SPを書けばイケルのかも、とまだ期待を捨ててはいません。

というわけで、中途報告でした。
皆様、ありがとうございます!

#プロのプログラマでなく、本で独習のレベルです。見当はずれや誤解は充分ありです・・・。忌憚無くご指摘下さい。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-07-19 07:47
得意先テーブルを得意先名で部分一致(ワイルドカード)検索する
サンプルを作成しました。検索条件を空にすると全件表示します。

よろしければ参考にしてください。

得意先名で検索した結果をGridViewに表示:
http://akiokasai.qsh.eu/Goto.aspx?id=060719-1

得意先名で検索した結果をGridViewに表示(Ajax版):
http://akiokasai.qsh.eu/Goto.aspx?id=060719-2

得意先名カナでインタラクティブに検索(Ajax版その2):
http://akiokasai.qsh.eu/Goto.aspx?id=060719-3

Ajax版その2のサンプルは、テキストボックスに検索条件を入力すると
検索結果が瞬時にGridViewに表示されます。検索ボタンをクリックする
必要ありません。

_________________
ASP.NET+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2006-07-19 10:45 ]
moku
会議室デビュー日: 2006/07/17
投稿数: 3
お住まい・勤務地: 千葉県
投稿日時: 2006-08-02 00:32
相当遅いレスで申し訳ありません。

「ISNULL」で試したのですが、クエリのレベルでつまづいています・・・。

【テーブル定義】
[StoreName] varchar
[CityName] varchar

【データ値】
[StoreName],[CityName]
桃太郎,品川区
金太郎,(null)

【SQL文】 *実行後、[CityName]には「null」を指定
SELECT StoreName, CityName
FROM Store
WHERE (CityName = ISNULL(@CityName, CityName)) AND (StoreName LIKE '%')

【実行結果】
「桃太郎」のレコードしか取得されず。
*WHERE句を、「(StoreName LIKE '%')」のみにしたら当然両レコードが取得されます。

基本的なSQL文の理解不十分なのだとは思うのですが、何時間も検討がつかずにおります。大変申し訳けありませんが、心当たりあればご教示お願い致します。

スキルアップ/キャリアアップ(JOB@IT)