- - PR -
DataGridのCurrentPageIndexについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-12 22:58
DataGridで複数のDataGridItemを選択し、一括で削除しています。
たとえば、2ページ分のDataGridItemがあり(PageCount=2)、 2ページ目を表示しています(CurrentPageIndex=2)。 2ページ目のDataGridItemをすべて選択し、削除すると、 CurrentPageIndex=2なのに、バインド後のPageCount=1になり、 エラーが発生します。 この問題を解決するためにはどうすればよいのでしょうか? ---------------- DataView dv = new DataView(dt); dv.Sort = "ID"; for (int n = 0; n < id.Length; n++) { int idx = dv.Find(int.Parse(id[n].ToString())); dv.Delete(idx); } this.DataGrid.DataSource = dv; this.DataGrid.DataKeyField = "ID"; this.DataGrid.DataBind(); ←ここでエラー ------------------ <エラーメッセージ> CurrentPageIndex 値が無効です。 値は 0 以上で PageCount より小さくなければなりません。 | ||||||||||||
|
投稿日時: 2006-10-13 06:40
削除したときは、 CurrentPageIndexを「1」に初期化して 先頭ページにリセットしたらどうでしょうか。 this.DataGrid.CurrentPageIndex = 1; this.DataGrid.DataBind(); _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||||||||||
|
投稿日時: 2006-10-13 09:43
先頭ページという事だと、0にする必要があったと思います。 どちらにしろ、 エラーメッセージ
にあるとおり、範囲内の値にする必要があるという事ですね。 | ||||||||||||
|
投稿日時: 2006-10-13 11:45
>先頭ページにリセットしたらどうでしょうか。
私もはじめはそう考えました。 しかし、それじゃ親切じゃないなぁと思いまして。。。 何とかして前ページに移動したいのですが、 バインド後にしかエラーが発生しないので、 バインド前に毎回、DataViewのアイテム数より、 ページ数を計算するしかないのかなぁと思っています。 他に何か他に良い方法などありましたら、教えていただけないでしょうか? | ||||||||||||
|
投稿日時: 2006-10-13 13:40
PageSizeを利用して、これを行うのが現実的な解かもしれませんね。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2006-10-13 13:41 ] | ||||||||||||
|
投稿日時: 2006-10-14 06:01
NAL-6295さんご指摘ありがとうございます。 CurrentPageIndexは先頭が0から開始されます。 DataGridから1件ずつレコードを削除するときは以下のような処理で可能かと・・・ 同時に複数のレコードを削除するときは If dgrdCustomers.Items.Count = 1 Then の箇所を変更してください。
すべてのソースコードは↓を参照してください http://www.friendlysw.com/aspnet/Articles/Goto.aspx?id=030526-1 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |
1