QA@IT
«回答へ戻る

追伸追加

1183
 http://surferonwww.info/BlogEngine/post/2011/07/17/Showing-records-selected-by-DropDownLists-into-GridView.aspx
 
 不明点があれば質問してください。
+
+【2016/11/4 13:45 追伸】
+
+追加質問に対して以下にレスします。
+
+まず、先のレスの (@市区町村="全て" OR [市区町村]=@市区町村) は (@市区町村='全て' OR [市区町村]=@市区町村) の間違いでした(リテラルはデフォルトで 単一引用符)。すみません。
+
+> 【1】は
+> WHERE [都道府県] = '大阪府' AND [市区町村] = '全て'
+> 【2】は
+> WHERE [都道府県] = '大阪府' AND [市区町村] LIKE '%大阪%'
+
+LIKE 句を使うのであれば以下のようにして試してみてください。
+
+WHERE ([都道府県]=@都道府県)
+AND (@市区町村='全て' OR [市区町村] LIKE N'%' + @市区町村 + N'%')
+
+> 【1】【2】を満たせるようなWhere句が
+> WHERE ([都道府県]=@都道府県)
+> AND (@市区町村="全て" OR [市区町村]=@市区町村)
+> である、という理解で問題ないでしょうか?
+
+上に書いたように違います。LIKE 句を使いたいならそれをクエリに含めないと。
+
+ところで、(@市区町村='全て' OR [市区町村]=@市区町村) の意味は理解されているでしょうか?
+
+パラメータ @市区町村 には TextBox の Text プロパティの値が代入されるように設定します。
+
+なので、TextBox が "全て" になっていると、(@市区町村='全て' OR [市区町村]=@市区町村) は常に true になり、WHERE ① AND ② は WHERE ① と同じになります。
+
+ユーザーが TextBox に入力して "全て" を例えば "大阪" に変更した場合、(@市区町村='全て' OR [市区町村]=@市区町村) で二つ目の条件 [市区町村]='大阪' だけが有効になります。結果、WHERE ① AND ② で(② に LIKE 句を使うならそのように)検索できます。
+
+> もし「実行時にTextBox内にすでに文字が入力されている状態になる」のでしたら、それは避けたいので、"全て"にするにはどうすればいいのだろうかと悩んでおります。
+
+質問の意味が分かりません。TextBox の初期値は空白にしておきたいと言うことですか? であれば、以下のようにして試して見てはいかがですか? ただし、空白でうまく動くかどうかは分かりません。ご自分で十分検証してください。
+
+WHERE ([都道府県]=@都道府県)
+AND (@市区町村='' OR [市区町村] LIKE N'%' + @市区町村 + N'%')
+
+#個人的には TextBox が空白で全件表示されるのはユーザーにとってはどうかと思うのですが。

質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? WPF? その他?)、ご自分の環境(OS, VS のバージョンだけではなく .NET のバージョン、DB サーバーとそのバージョン、ブラウザを使っているなら何かなど)に関する情報を書いてください。

たぶん ASP.NET Web Forms アプリの質問であろうと想像してレスします。

②を入力しなくても(都道府県だけ選んでボタンを押しても)GridViewに表示できるようにするには、

その時表示するのは Where ① という条件だけで選択した全レコードを表示するということでいいのですよね?

であれば、以下のいずれかで可能だと思います。(2) がオススメです。

(1) SqlDataSource の SelectCommand を切り替える。具体例は以下の記事を見てください。

SelectCommand の切り替え
http://surferonwww.info/Test/01_Test.aspx

(2) WHERE 句を以下のようにしておき、市区町村 TextBox の初期値を "全て"(別のものでもいいですが WHERE 句と合わせてください)とし、ユーザーが初期値を変えなければ WHERE 句の (@市区町村="全て" OR [市区町村]=@市区町村) は true になるようにする。

WHERE ([都道府県]=@都道府県)
AND (@市区町村="全て" OR [市区町村]=@市区町村)

具体例は、①, ② とも DropDownList の例ですが、以下の記事を見てください。

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

不明点があれば質問してください。

【2016/11/4 13:45 追伸】

追加質問に対して以下にレスします。

まず、先のレスの (@市区町村="全て" OR [市区町村]=@市区町村) は (@市区町村='全て' OR [市区町村]=@市区町村) の間違いでした(リテラルはデフォルトで 単一引用符)。すみません。

【1】は
WHERE [都道府県] = '大阪府' AND [市区町村] = '全て'
【2】は
WHERE [都道府県] = '大阪府' AND [市区町村] LIKE '%大阪%'

LIKE 句を使うのであれば以下のようにして試してみてください。

WHERE ([都道府県]=@都道府県)
AND (@市区町村='全て' OR [市区町村] LIKE N'%' + @市区町村 + N'%')

【1】【2】を満たせるようなWhere句が
WHERE ([都道府県]=@都道府県)
AND (@市区町村="全て" OR [市区町村]=@市区町村)
である、という理解で問題ないでしょうか?

上に書いたように違います。LIKE 句を使いたいならそれをクエリに含めないと。

ところで、(@市区町村='全て' OR [市区町村]=@市区町村) の意味は理解されているでしょうか?

パラメータ @市区町村 には TextBox の Text プロパティの値が代入されるように設定します。

なので、TextBox が "全て" になっていると、(@市区町村='全て' OR [市区町村]=@市区町村) は常に true になり、WHERE ① AND ② は WHERE ① と同じになります。

ユーザーが TextBox に入力して "全て" を例えば "大阪" に変更した場合、(@市区町村='全て' OR [市区町村]=@市区町村) で二つ目の条件 [市区町村]='大阪' だけが有効になります。結果、WHERE ① AND ② で(② に LIKE 句を使うならそのように)検索できます。

もし「実行時にTextBox内にすでに文字が入力されている状態になる」のでしたら、それは避けたいので、"全て"にするにはどうすればいいのだろうかと悩んでおります。

質問の意味が分かりません。TextBox の初期値は空白にしておきたいと言うことですか? であれば、以下のようにして試して見てはいかがですか? ただし、空白でうまく動くかどうかは分かりません。ご自分で十分検証してください。

WHERE ([都道府県]=@都道府県)
AND (@市区町村='' OR [市区町村] LIKE N'%' + @市区町村 + N'%')

#個人的には TextBox が空白で全件表示されるのはユーザーにとってはどうかと思うのですが。

質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? WPF? その他?)、ご自分の環境(OS, VS のバージョンだけではなく .NET のバージョン、DB サーバーとそのバージョン、ブラウザを使っているなら何かなど)に関する情報を書いてください。

たぶん ASP.NET Web Forms アプリの質問であろうと想像してレスします。

> ②を入力しなくても(都道府県だけ選んでボタンを押しても)GridViewに表示できるようにするには、

その時表示するのは Where ① という条件だけで選択した全レコードを表示するということでいいのですよね?

であれば、以下のいずれかで可能だと思います。(2) がオススメです。

(1) SqlDataSource の SelectCommand を切り替える。具体例は以下の記事を見てください。

SelectCommand の切り替え
http://surferonwww.info/Test/01_Test.aspx

(2) WHERE 句を以下のようにしておき、市区町村 TextBox の初期値を "全て"(別のものでもいいですが WHERE 句と合わせてください)とし、ユーザーが初期値を変えなければ WHERE 句の (@市区町村="全て" OR [市区町村]=@市区町村) は true になるようにする。

WHERE ([都道府県]=@都道府県) 
  AND (@市区町村="全て" OR [市区町村]=@市区町村)

具体例は、①, ② とも DropDownList の例ですが、以下の記事を見てください。

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

不明点があれば質問してください。

【2016/11/4 13:45 追伸】

追加質問に対して以下にレスします。

まず、先のレスの (@市区町村="全て" OR [市区町村]=@市区町村) は (@市区町村='全て' OR [市区町村]=@市区町村) の間違いでした(リテラルはデフォルトで 単一引用符)。すみません。

> 【1】は
> WHERE [都道府県] = '大阪府' AND [市区町村] = '全て'
> 【2】は
> WHERE [都道府県] = '大阪府' AND [市区町村] LIKE '%大阪%'

LIKE 句を使うのであれば以下のようにして試してみてください。

WHERE ([都道府県]=@都道府県)
AND (@市区町村='全て' OR [市区町村] LIKE N'%' + @市区町村 + N'%')

> 【1】【2】を満たせるようなWhere句が
> WHERE ([都道府県]=@都道府県)
> AND (@市区町村="全て" OR [市区町村]=@市区町村)
> である、という理解で問題ないでしょうか?

上に書いたように違います。LIKE 句を使いたいならそれをクエリに含めないと。

ところで、(@市区町村='全て' OR [市区町村]=@市区町村) の意味は理解されているでしょうか?

パラメータ @市区町村 には TextBox の Text プロパティの値が代入されるように設定します。

なので、TextBox が "全て" になっていると、(@市区町村='全て' OR [市区町村]=@市区町村) は常に true になり、WHERE ① AND ② は WHERE ① と同じになります。

ユーザーが TextBox に入力して "全て" を例えば "大阪" に変更した場合、(@市区町村='全て' OR [市区町村]=@市区町村) で二つ目の条件 [市区町村]='大阪' だけが有効になります。結果、WHERE ① AND ② で(② に LIKE 句を使うならそのように)検索できます。

> もし「実行時にTextBox内にすでに文字が入力されている状態になる」のでしたら、それは避けたいので、"全て"にするにはどうすればいいのだろうかと悩んでおります。

質問の意味が分かりません。TextBox の初期値は空白にしておきたいと言うことですか? であれば、以下のようにして試して見てはいかがですか? ただし、空白でうまく動くかどうかは分かりません。ご自分で十分検証してください。

WHERE ([都道府県]=@都道府県)
AND (@市区町村='' OR [市区町村] LIKE N'%' + @市区町村 + N'%')

#個人的には TextBox が空白で全件表示されるのはユーザーにとってはどうかと思うのですが。

回答を投稿

質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? WPF? その他?)、ご自分の環境(OS, VS のバージョンだけではなく .NET のバージョン、DB サーバーとそのバージョン、ブラウザを使っているなら何かなど)に関する情報を書いてください。

たぶん ASP.NET Web Forms アプリの質問であろうと想像してレスします。

②を入力しなくても(都道府県だけ選んでボタンを押しても)GridViewに表示できるようにするには、

その時表示するのは Where ① という条件だけで選択した全レコードを表示するということでいいのですよね?

であれば、以下のいずれかで可能だと思います。(2) がオススメです。

(1) SqlDataSource の SelectCommand を切り替える。具体例は以下の記事を見てください。

SelectCommand の切り替え
http://surferonwww.info/Test/01_Test.aspx

(2) WHERE 句を以下のようにしておき、市区町村 TextBox の初期値を "全て"(別のものでもいいですが WHERE 句と合わせてください)とし、ユーザーが初期値を変えなければ WHERE 句の (@市区町村="全て" OR [市区町村]=@市区町村) は true になるようにする。

WHERE ([都道府県]=@都道府県)
AND (@市区町村="全て" OR [市区町村]=@市区町村)

具体例は、①, ② とも DropDownList の例ですが、以下の記事を見てください。

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

不明点があれば質問してください。

質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? WPF? その他?)、ご自分の環境(OS, VS のバージョンだけではなく .NET のバージョン、DB サーバーとそのバージョン、ブラウザを使っているなら何かなど)に関する情報を書いてください。

たぶん ASP.NET Web Forms アプリの質問であろうと想像してレスします。

> ②を入力しなくても(都道府県だけ選んでボタンを押しても)GridViewに表示できるようにするには、

その時表示するのは Where ① という条件だけで選択した全レコードを表示するということでいいのですよね?

であれば、以下のいずれかで可能だと思います。(2) がオススメです。

(1) SqlDataSource の SelectCommand を切り替える。具体例は以下の記事を見てください。

SelectCommand の切り替え
http://surferonwww.info/Test/01_Test.aspx

(2) WHERE 句を以下のようにしておき、市区町村 TextBox の初期値を "全て"(別のものでもいいですが WHERE 句と合わせてください)とし、ユーザーが初期値を変えなければ WHERE 句の (@市区町村="全て" OR [市区町村]=@市区町村) は true になるようにする。

WHERE ([都道府県]=@都道府県) 
  AND (@市区町村="全て" OR [市区町村]=@市区町村)

具体例は、①, ② とも DropDownList の例ですが、以下の記事を見てください。

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

不明点があれば質問してください。