トップ回答者
GridViewのPage$Lastの値

質問
-
お世話になっております。
win2008r2で、.net framework4.0の場合は
Page$Lastの値が正しく最終ページのインデックスが設定されていたのですが
.net framework4.5にアップデートしたら
Page$Lastの値が-1になるようになってしまいました。
同じような現象が発生された方はございますでしょうか?
仕様が変わったのかプログラムの書き方が悪いのか。
ソースの抜粋は下記になります。
aspxファイル
<asp:GridView ID="grdList" runat="server" AllowPaging="True"
AllowCustomPaging="true"
AutoGenerateColumns="False"
onpageindexchanging="grdList_PageIndexChanging"
PageSize="20"
style="text-align: center" CssClass="grid_style" DataKeyNames="Mkrid"
DataSourceID="FileDataSource" onprerender="grdList_PreRender"><PagerSettings Position="TopAndBottom" Mode="NumericFirstLast" />
</asp:GridView>
csファイル
protected void grdList_PageIndexChanging(object sender, GridViewPageEventArgs e)
で、e.NewPageIndexの値が"-1”になってしまいます。
回答
-
> プログラムを書き換えたりはしておりません。
最初の質問にアップされていたコードには AllowCustomPaging="true" と書いてあります。
今までは ASP.NET 4 の GridView ということですが、ASP.NET 4 の GridView には AllowCustomPaging プロパティというのは存在しません。どういうことでしょう? それを利用してのカスタムページングは ASP.NET 4.5 からの新機能です。そのことは理解されてますか?
想像ですが、以前から AllowCustomPaging="true" というコードが紛れ込んでいたが、ASP.NET 4 では意味をなさないので何の影響もなかった。しかし、Framework を ASP.NET 4.5 にアップデートしたらその影響が出て動かなくなったということではないですか?
その想像が当たっていれば、AllowCustomPaging="true" というコードを削除すれば元通り動くようになるのではないかと思います。
- 回答としてマーク kaz0923 2014年11月9日 23:48
すべての返信
-
自分は .NET4.5 の GridView を検証できる環境は持ってないのでハズレかもしれませんが・・・
> .net framework4.5にアップデートしたら
その意味は、ASP.NET 4.5 GridView の新機能カスタムページングを利用できるようにコードを書き換えたんですよね? (それは「.net framework4.5にアップデートした」とは言わないのでは?)
GridView.AllowCustomPaging プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.allowcustompaging(v=vs.110).aspx上のページに以下のように書いてあります。
"PageIndexChanging のイベントのハンドラーで、PageIndex のプロパティを新しいページ インデックス値に設定し、データ ソースの項目の総数に VirtualItemCount のプロパティを設定し、現在のページに必要な行だけを返すようにデータ ソースを設定します。DataBind のメソッドを呼び出します。"
カスタムページングを利用しているのに、上記の設定をせずに、.NET 4 以前と同じようなことしているから期待通りに行かないのではないですか?
ハズレだったらすみません。
【追伸】
ググって調べてみました。
ASP.NET 4.5 の Custom Paging の設定については以下の記事が参考になると思います。
Custom Paging With GridView in ASP.NET 4.5
http://www.c-sharpcorner.com/UploadFile/99bb20/custom-paging-with-gridview-control-in-Asp-Net-4-5/.NET 4 以前で普通にページングを実装する時のように、Visual Studio のデザイン画面で SqlDataSource と GridView を Page に貼り付け、それらのプロパティをウィザードベースでチョコチョコっと設定すれば終わりというわけには行かないようです。
ちなみに、同等なページングの機能は、ASP.NET 2.0 以降で利用できる ObjectDataSource でも実現できます。ご参考まで。
ObjectDataSource でページング
http://surferonwww.info/BlogEngine/post/2010/08/26/Paging-with-ObjectDataSource.aspx
【追伸2】
> Page$Lastの値が-1になるようになってしまいました。
そのあたり勘違いがありませんか?
Page$Last というのは、ページャー中の最終ページ遷移するためのハイパーリンクで以下のように設定されているものですよね。
<a href="javascript:__doPostBack('GridView1','Page$Last')">>></a>
そうであればそれが -1 になるなどということはありませんし、そもそもプログラマが参照したり設定したるするものではありません。- 編集済み SurferOnWww 2014年11月7日 4:54 追伸2追加
-
> プログラムを書き換えたりはしておりません。
最初の質問にアップされていたコードには AllowCustomPaging="true" と書いてあります。
今までは ASP.NET 4 の GridView ということですが、ASP.NET 4 の GridView には AllowCustomPaging プロパティというのは存在しません。どういうことでしょう? それを利用してのカスタムページングは ASP.NET 4.5 からの新機能です。そのことは理解されてますか?
想像ですが、以前から AllowCustomPaging="true" というコードが紛れ込んでいたが、ASP.NET 4 では意味をなさないので何の影響もなかった。しかし、Framework を ASP.NET 4.5 にアップデートしたらその影響が出て動かなくなったということではないですか?
その想像が当たっていれば、AllowCustomPaging="true" というコードを削除すれば元通り動くようになるのではないかと思います。
- 回答としてマーク kaz0923 2014年11月9日 23:48