トップ回答者
GridViewのページ送りで表示されない。

質問
-
GridViewでページ送りを押すと、表が表示されなくなります。
PageIndexChangingイベントとPageIndexChangedイベントが発生いたしません。
AllowPaigingはTrueにしてます。
データーもカラムもaspx.vbで動的に設定してます。
Code SnippetPrivate Sub GridDspTest()
Dim wktbl As New DataTable()
Dim wkrow As DataRow
'型割名
Dim wsKtwr As String = ""
'ワークインデックス
Dim wiIdx As String = ""'データーカラムコレクション
Dim columns As DataColumnCollection
'データーカラム
Dim column As DataColumn
wktbl.Columns.Add("y/x")
wktbl.Columns.Add("x1.min~x1.max")
wktbl.Columns.Add("x2.min~x2.max")
wktbl.Columns.Add("x3.min~x3.max")
wktbl.Columns.Add("x4.min~x4.max")
wkrow = wktbl.NewRow
wkrow.Item("y/x") = "y1.min~y1.max"wkrow.Item("x1.min~x1.max") = "100"
wkrow.Item("x2.min~x2.max") = "110"
wkrow.Item("x3.min~x3.max") = "110"
wkrow.Item("x4.min~x4.max") = "120"
wktbl.Rows.Add(wkrow)wkrow = wktbl.NewRow
wkrow.Item("y/x") = "y2.min~y2.max"wkrow.Item("x1.min~x1.max") = "100"
wkrow.Item("x2.min~x2.max") = "200"
wkrow.Item("x3.min~x3.max") = "300"
wkrow.Item("x4.min~x4.max") = "400"
wktbl.Rows.Add(wkrow)wkrow = wktbl.NewRow
wkrow.Item("y/x") = "y3.min~y3.max"wkrow.Item("x1.min~x1.max") = "100"
wkrow.Item("x2.min~x2.max") = "150"
wkrow.Item("x3.min~x3.max") = "300"
wkrow.Item("x4.min~x4.max") = "400"
wktbl.Rows.Add(wkrow)
wkrow = wktbl.NewRow
wkrow.Item("y/x") = "y4.min~y4.max"wkrow.Item("x1.min~x1.max") = "100"
wkrow.Item("x2.min~x2.max") = "200"
wkrow.Item("x3.min~x3.max") = "300"
wkrow.Item("x4.min~x4.max") = "400"
wktbl.Rows.Add(wkrow)
wkrow = wktbl.NewRow
wkrow.Item("y/x") = "y5.min~y5.max"wkrow.Item("x1.min~x1.max") = "300"
wkrow.Item("x2.min~x2.max") = "200"
wkrow.Item("x3.min~x3.max") = "300"
wkrow.Item("x4.min~x4.max") = "400"
wktbl.Rows.Add(wkrow)
columns = wktbl.Columns
For Each column In columns
Dim wbtn1 As ButtonField = New ButtonField'ヘッダーテキスト取得
wbtn1.ButtonType = ButtonType.Button
wbtn1.HeaderText = column.Caption
wbtn1.DataTextField = column.ColumnName
wbtn1.CommandName = column.Ordinal.ToString()
GridView1.Columns.Add(wbtn1)
Next columnGridView1.DataSource = wktbl
GridView1.DataBind()End Sub
Page_Initで毎回DataBindすれば表示するのですが、それはちょっと、関係ないコントロールのポストバックでも走るので、
ちゃんとPageIndexChangingイベントかPageIndexChangedのイベントの中で、DataBindしなおしたいのです。
他にもいい方法もあるかもしれませんが、御助言よろしくお願いします。
回答
すべての返信
-
> GridViewでページ送りを押すと、表が表示されなくなります。
「ページ送り」って何ですか?
GridView.PageIndexChanging, GridView.PageIndexChanged イベントは GridView の
ページャボタンをクリックしたとき発生しますが、そもそも、このコード例では1ページのみしかないのでページングは不要ですし、AllowPaiging="True" にしてもページャボタンは
表示されないはずですが。
何か考え違いがあるような気がします・・・
一体何をしたいのか良くわかりません。そのあたりをもう少し詳しく説明してもらえると、お
役に立てるかもしれません。
-
説明不足ですみません。実際セットするデーターは、たくさんあるのですが、サンプルには公開できないので固定値でセットの
ロジックですが、本来は18行くらいあります。
PageButtonCount="5"にしてるので、3頁あるのですが。GridViewの最下位のページャーを押したら、表の表示がなくなります。
毎回Page_Initでバインドすると表示されるのですが、ページャーを押した時は表示して、条件指定のDropDownListを変更したときは、GridViewはクリアーされていいのですが。
切り分けをGridView.PageIndexChanging, GridView.PageIndexChangedでひろって、バインドしなおせば、ページングのときだけ
表示できるかなとかんがえたのですが、イベント自体が発生しないです。
なにか、いい方法ありませんでしょうか?
-
先のスレッド「GridViewのセル選択イベント取得方法」で書いた "方法1" の場合は、
DataTable を作成するメソッドと GridView の間を ObjectDataSource で仲介してや
れば簡単に Paging が実装できるのですが、"方法2" ではその手は使えないようです。
単に GridView のプロパティで AllowPaging="True" としただけでは、エラーになる
はずですが、TAKAPI さんのやり方では何故かうまくいったとのことで、どこか根本
的に違うのかもしれませんね。
ところで、RowCommand で取得できる行の Index は、ページングした場合、例え
ば1ページ目の n 行と、2ページ目の n 行とで同じになりますが、その点は理解さ
れているでしょうか?