VB.NET Grid Viewで並び替えを行ったとき、急にエラーが発生するようになったときの対処

Grid Viewで並び替えを行ったときに、急にエラーが発生するようになったときは、
Grid Viewで一度に表示させる行が1,000を超えていないか確認する。
標準の設定では、Grid Viewで一度に扱える値は1,000まで。
1,000を超えたときに並び変え等を行うと、値を扱えずにエラーが発生してしまう。
なお、ページ設定を行い、一度に表示させる件数を制限(1,000以下)している場合は、
この問題は発生しない。

この問題が発生したときは、Web.configで一度に扱える数を変更することで、対応できる。
ただし、リソースの問題はあるので、一度に扱う数を押さえるほうが望ましいだろう。

■出力されたエラーメッセージ

2013-02-19 10:36:43,881 ERROR :  - Global_asax.Application_Error[38] :
   場所 System.Web.HttpRequest.FillInFormCollection()
   場所 System.Web.HttpRequest.get_Form()
   場所 System.Web.HttpRequest.get_HasForm()
   場所 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
   場所 System.Web.UI.Page.DeterminePostBackMode()
   場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

■原因

ASP.NETのGrid Viewで(実際には、Grid Viewだけではなく、フォームキーなども)扱う行数がデフォルト 1000 になっている。
そのため、1000 を超えた行数のデータに対して、並び替え等を行うと、値を扱うことができず、エラーが発生する。

■対処

Web.config の appSettings に下記の行を追加し、行(項目)の数を指定する。
当然、行数(項目数)を増やせば、それだけリソースを消費するので、
大規模システムや動作の重いシステムの場合には注意が必要。
行数を増やすのではなく、一度に表示させる件数を絞り込むなどの対応をするほうが堅実的だろう。

 <add key="aspnet:MaxHttpCollectionKeys" value="行(項目)の数" />

設定例: 行数を2000行にする

   <appSettings>
     <add key="aspnet:MaxHttpCollectionKeys" value="2000" />
   </appSettings>

なお、この方法で対応できるのは、ASP.NET の2以降。
1.1系の場合は、別の方法になるので注意すること。

■参考URL

多くのフォーム キー、ファイル、または JSON ペイロード メンバーを含む ASP.NET 要求が例外が発生して失敗する
http://support.microsoft.com/kb/2661403/ja

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする