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

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

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

ASP.netのListViewについての疑問

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

■87576 / inTopicNo.1)  ASP.netのListViewについての疑問
  
□投稿者/ ねこ (1回)-(2018/06/07(Thu) 20:37:33)

分類:[ASP.NET (C#)] 

こんにちは。
初めて投稿させていただきます。

開発環境
Visual Studio 2015 Community
C#

現在、DropDownListとListViewとButtunを使用して検索結果を出力するサイトを作成しています。
ListViewは下記サイトを参考にして作成しました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/913aspnetlistvwcust/aspnetlistvwcust.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/918aspnetlistvwpager/aspnetlistvwpager.html

疑問1.
DropDownListにキーワードが格納されていてキーワードを選択して検索ボタンを押すとListViewに紐付けているSqlDataSourceのSelectCommandを切り替えるという仕組みです。(例えば、SELECT COL1, COL2, COL3 FROM TABLE1 WHERE COL1 = [DropDownListのキーワード])
その際、DropDownListに何も選択していなかったら全検索する為にSqlDataSourceを作成した時に設定したSQL文(例えば、SELECT COL1, COL2, COL3 FROM TABLE1)と同じSelectCommandを指定しているのですがListViewの表示が切り替わりません。
仕方がないので全検索するときのSelectCommandには「WHERE 1 = 1」を追加して全検索しているのですがListViewの仕様でしょうか?

疑問2.
上記仕組みにはページャーを設定しているのですが他のページをクリックしてもページングされないのでPagePropertiesChangedイベント時に再度SelectCommandを設定しています。これもListViewの仕様でしょうか?

ご存知の方がいらっしゃったらご教示いただけないかと思い質問させていただきました。
よろしくお願いいたします。
引用返信 編集キー/
■87577 / inTopicNo.2)  Re[1]: ASP.netのListViewについての疑問
□投稿者/ WebSurfer (1510回)-(2018/06/07(Thu) 21:28:20)
No87576 (ねこ さん) に返信

> ListViewの仕様でしょうか?

参考にされているサイトは読んでませんし(それを読めというの自分には負担が大きすぎますので)、
質問者さんがどういうコードを書いているかが全く分かりませんんけど、普通に考えてそれはないと
思います。

問題を再現できる必要最低限のコードをアップできませんか? そうしていただけるとお役に立てる
かもしれません。

なお、その際は、あなたの開発環境(OS, .NET, IIS のバージョン、テンプレートは何かなど)を書
いていただくようお願いします。
引用返信 編集キー/
■87578 / inTopicNo.3)  Re[1]: ASP.netのListViewについての疑問
□投稿者/ WebSurfer (1511回)-(2018/06/08(Fri) 12:40:46)
No87576 (ねこ さん) に返信

いろいろ不明ですが、できる方法を紹介しておきます。

ASP.NET 3.5 の ListView や DapaPager にはいろいろ不具合があるのですが、.NET 4.5.2
以降を使っているなら以下に紹介する方法で問題ないでしょう。多分

もし、UpdatePanel を使っているなら非同期ポストバックのトリガとなるコントロールの
ClientIDMode プロパティはデフォルトではなく AutoID にしておくことをお勧めします。

#だから開発環境を書いてくれと言っているわけで、意味もなく聞いているわけではない
 のですよ。

> SqlDataSourceのSelectCommandを切り替えるという仕組みです。

そういう方法ではなくて、WHERE 句は以下のように固定しておいて、

SELECT COL1, COL2, COL3
FROM TABLE1
WHERE @COL1 = 'ALL' OR COL1 = @COL1

DropDownList の SelectedValue プロパティの値をパラメータ @COL1 に代入して、全件抽出と
条件抽出の両方に対応できるようにするという方法ではいかがですか?

以下の記事は ListView ではなく GridView を使った場合ですが、GridView を ListView に置
き換えても同じことはでき、これで「疑問1.」は解決するはずです。

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

デザイナでページングを有効にすれば DataPager が自動的に配置されてページングは可能にな
り「疑問2.」も解決できると思います。

ただし、 DataPager を配置してページングを行う場合、例えば、全件抽出してから別のページ
に移動したあと、そのページで条件抽出を行った場合、何ページかという情報は保持されていて、
「そのページ」を表示しようとします。

条件抽出でレコード数が減ると当然全ページ数は減りますが、「そのページ」にはレコードがない
場合 DataPager を含めて何も表示されないという結果になります。

なので、DropDownList の選択が変更されたら最初のページを表示するようなコートを追加する必
要があります。

デザイナを使った場合、DataPager フィールドにデフォルトで NextPreviousPagerField が設定
されると思いますが、それではページ指定の制御ができないのでNumericPagerField を実装し、
その HandleEvent メソッドを利用します。

具体例は以下の記事を見てください。

ListView でページ指定
http://surferonwww.info/BlogEngine/post/2010/11/13/Show-specified-page-of-ListView-programmatically.aspx

引用返信 編集キー/
■87579 / inTopicNo.4)  Re[2]: ASP.netのListViewについての疑問
□投稿者/ ねこ (2回)-(2018/06/08(Fri) 19:31:02)
No87578 (WebSurfer さん) に返信
> ■No87576 (ねこ さん) に返信

WebSurfer様

ご返信ありがとうございます。

まずは、開発環境です。
OS           Windows7
.NET         4.0
IIS          10.0 Express
テンプレート 使っていません

投稿後に冷静になるとこんな仕様ではないはず、、、と思いまして、それでどちらかというと同じような症状の方がいないかな、位の気持ちになっています。
わけのわからない投稿にこんなにご丁寧にご回答いただきましてありがとうございます。

> 
> いろいろ不明ですが、できる方法を紹介しておきます。
> 
> ASP.NET 3.5 の ListView や DapaPager にはいろいろ不具合があるのですが、.NET 4.5.2 
> 以降を使っているなら以下に紹介する方法で問題ないでしょう。多分

4.0だと微妙ですかね。

> もし、UpdatePanel を使っているなら非同期ポストバックのトリガとなるコントロールの
> ClientIDMode プロパティはデフォルトではなく AutoID にしておくことをお勧めします。

UpdatePanelは使用していません。

> #だから開発環境を書いてくれと言っているわけで、意味もなく聞いているわけではない
>  のですよ。

開発環境というとVisual Studioのことかと思い、.NET Frameworkのことを失念しておりました。

>>SqlDataSourceのSelectCommandを切り替えるという仕組みです。
> 
> そういう方法ではなくて、WHERE 句は以下のように固定しておいて、
> 
> SELECT COL1, COL2, COL3 
> FROM TABLE1 
> WHERE @COL1 = 'ALL' OR COL1 = @COL1
> 
> DropDownList の SelectedValue プロパティの値をパラメータ @COL1 に代入して、全件抽出と
> 条件抽出の両方に対応できるようにするという方法ではいかがですか?
> 
> 以下の記事は ListView ではなく GridView を使った場合ですが、GridView を ListView に置
> き換えても同じことはでき、これで「疑問1.」は解決するはずです。
> 
> DropDownList を使って絞込み
> http://surferonwww.info/BlogEngine/post/2011/07/17/Showing-records-selected-by-DropDownLists-into-GridView.aspx

WebSurfer様のページはいつも見させていただいております。
今回もこちらのページを見させていただいたのですが、ALLという選択肢を相手(と言っても社内)が望まず断念しておりました。

> デザイナでページングを有効にすれば DataPager が自動的に配置されてページングは可能にな
> り「疑問2.」も解決できると思います。

デザイナでページングを有効にしたのですがページをクリックしても表示が変わらずネットで色々調べて(その後そのサイトが見つからずリンクを貼れないのですが)PagePropertiesChangedイベントでSelectCommandを再設定すればいいとあり設定しました。
一応動いているのですが疑問に思いまして。

> ただし、 DataPager を配置してページングを行う場合、例えば、全件抽出してから別のページ
> に移動したあと、そのページで条件抽出を行った場合、何ページかという情報は保持されていて、
> 「そのページ」を表示しようとします。
> 
> 条件抽出でレコード数が減ると当然全ページ数は減りますが、「そのページ」にはレコードがない
> 場合 DataPager を含めて何も表示されないという結果になります。
> 
> なので、DropDownList の選択が変更されたら最初のページを表示するようなコートを追加する必
> 要があります。
> 
> デザイナを使った場合、DataPager フィールドにデフォルトで NextPreviousPagerField が設定
> されると思いますが、それではページ指定の制御ができないのでNumericPagerField を実装し、
> その HandleEvent メソッドを利用します。
> 
> 具体例は以下の記事を見てください。
> 
> ListView でページ指定
> http://surferonwww.info/BlogEngine/post/2010/11/13/Show-specified-page-of-ListView-programmatically.aspx

この件は、検索ボタンを押した時の処理に以下のコードを書いて対応しています。
DataPager dp = (DataPager)ListView1.FindControl("DataPager1");
dp.SetPageProperties(0, 20, false);

同じような症状の方がいらっしゃるかこの土日待ってみてから解決済みにします。

引用返信 編集キー/
■87580 / inTopicNo.5)  Re[3]: ASP.netのListViewについての疑問
□投稿者/ WebSurfer (1512回)-(2018/06/08(Fri) 20:13:41)
No87579 (ねこ さん) に返信

一番最初の私のレスで、

> 問題を再現できる必要最低限のコードをアップできませんか? そうしていただけるとお役に立てる
> かもしれません。

・・・と書きましたけどそれはやる気なしですか?

とにかく、SELECT クエリを切り替えても表示が変わらないとか、ページャーが働かないということの
原因が ListView の仕様ということはありえません。

質問者さんのやり方の問題でしょうから、そのやり方がどうなっているか、ここで得られる情報以外は
知り得ない第三者に分かるようにしていただかないと、質問者さんが期待する情報は出てこないと思う
のですが・・・

引用返信 編集キー/
■87581 / inTopicNo.6)  Re[4]: ASP.netのListViewについての疑問
□投稿者/ ねこ (3回)-(2018/06/08(Fri) 21:17:19)
No87580 (WebSurfer さん) に返信
> ■No87579 (ねこ さん) に返信
>
> 一番最初の私のレスで、
>
>>問題を再現できる必要最低限のコードをアップできませんか? そうしていただけるとお役に立てる
>>かもしれません。
>
> ・・・と書きましたけどそれはやる気なしですか?
>
> とにかく、SELECT クエリを切り替えても表示が変わらないとか、ページャーが働かないということの
> 原因が ListView の仕様ということはありえません。
>
> 質問者さんのやり方の問題でしょうから、そのやり方がどうなっているか、ここで得られる情報以外は
> 知り得ない第三者に分かるようにしていただかないと、質問者さんが期待する情報は出てこないと思う
> のですが・・・
>

WebSurfer様

すみません。
セキュリティ上会社からコードを投稿出来ませんでしたので自宅で環境が整えば投稿します。
遅くなりそうでしたら一旦解決済みにしようと思います。
引用返信 編集キー/
■87583 / inTopicNo.7)  Re[5]: ASP.netのListViewについての疑問
□投稿者/ ねこ (4回)-(2018/06/10(Sun) 13:06:21)
No87581 (ねこ さん) に返信
> ■No87580 (WebSurfer さん) に返信
>>■No87579 (ねこ さん) に返信
>>
>>一番最初の私のレスで、
>>
> >>問題を再現できる必要最低限のコードをアップできませんか? そうしていただけるとお役に立てる
> >>かもしれません。
>>
>>・・・と書きましたけどそれはやる気なしですか?
>>
>>とにかく、SELECT クエリを切り替えても表示が変わらないとか、ページャーが働かないということの
>>原因が ListView の仕様ということはありえません。
>>
>>質問者さんのやり方の問題でしょうから、そのやり方がどうなっているか、ここで得られる情報以外は
>>知り得ない第三者に分かるようにしていただかないと、質問者さんが期待する情報は出てこないと思う
>>のですが・・・
>>
>
> WebSurfer様
>
> すみません。
> セキュリティ上会社からコードを投稿出来ませんでしたので自宅で環境が整えば投稿します。
> 遅くなりそうでしたら一旦解決済みにしようと思います。

WebSurfer様

自宅でテストプロジェクトを作成しましたが、疑問1. 疑問2. 共再現しませんでした。
お騒がせして申し訳ございません。
明日もう一度会社のコードを見直してみます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ