- PR -

DataGridのページングについて

投稿者投稿内容
いていて。
会議室デビュー日: 2004/05/10
投稿数: 11
投稿日時: 2004-05-17 17:27
皆様、お世話になっております。

Sub dgSKJisseki_PageIndexChanged( 〜 ) Handles dgSKJisseki.PageIndexChanged
イベントには、飛ぶ様になりました。

しかしながら、問題があります。
条件が可変するSQLをFiLLし、任意で作成したTableに入れる為、
dgSKJisseki.AutoGenerateColumns = False としていました。
これを、Trueにすることによって、イベント認識はするようになりましたが、
Falseを解除してしまった為、DataGridに同じデータが2つ分の表示されてしまいました。
Falseにしていたのは、Table作成時に項目幅等を設定したかった為です。

dgSKJisseki.AutoGenerateColumns = False のままで、イベントを
取れるように出来る方法はあるのでしょうか?


He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-18 01:13
引用:

Private関数にしていると、 〜略〜 エラーになります。


前にも書きましたが、コードビハインド側でイベントをハンドルしているのであれば、
<asp:datagrid 〜 OnPageIndexChanged="dgSKJisseki_PageIndexChanged">
とする必要はありません。

PostBack後にグリッドが描画されないのは、ViewStateを無効にしているためです。
(『EnableViewState="False"』としているから。)
前出の.NET Tipsはご覧になりましたか?

ViewStateが無効になっていると、
DataSourceの内容や、現在のページ番号などが、自動的には保存されなくなります。
そのため、自前でその辺の処理を記述する必要があるのです。

ViewStateについては、以下も参考になります。
参考:[ASP.NET]ビューステートに保存されるものは?
いていて。
会議室デビュー日: 2004/05/10
投稿数: 11
投稿日時: 2004-05-18 09:07
ページング処理が上手く出来ましたので、ご報告したします。

HTML部分にダミーのTemplateColumnsを追加
<asp:DataGrid id="grdXXX" runat = "server" OnPageIndexChanged="grdXXXChanged">
<Columns>
<asp:TemplateColumn></asp:TemplateColumn>
</Columns>
</asp:DataGrid>

コード部分
grdXXX.Columns.Clear()を追加

これにより、AutoGenerateColumns=Falseでも問題ありませんでした。

皆様方、色々と教えていただきありがとうございました。
wakaba
会議室デビュー日: 2004/04/16
投稿数: 6
投稿日時: 2004-05-18 10:34
Heさんもおっしゃっていましたが、、、
<asp:DataGrid ・・・ OnPageIndexChanged="grdXXXChanged">
の記述はしなければならないんでしょうか?
ハンドルしたほうが楽な気もするんですが。

私も以前、同様のことをしてみたことがありますが、
そのときは以下のように記述しました。
Public Sub grdXXXChanged _
(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)

grdXXX.CurrentPageIndex = e.NewPageIndex

また、EnableViewState=Falseにしたときも、
表示させるページのインデックスを自分で保持しておいて、
Page_LoadイベントでIsPostBackのときに
グリッドへのデータバインドとページインデックスの指定をしてました。

いつもAutoGenerateColumns=Falseにしてますけど、
特に問題ありませんでしたよ。
ダミーの記述もしたことないです。
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-19 19:48
おそらくGotDotNetからの情報だと思います。
DataGridに列を動的に追加(DataGrid1.Columns.Add(column))しているときのお話です。

列を動的に追加していなければ、wakabaさんがおっしゃっているやり方でページングできます。
いていて。
会議室デビュー日: 2004/05/10
投稿数: 11
投稿日時: 2004-05-20 00:00
こんばんわ。
Heさんの推測とおりGotDotNetからの情報です。
DataGridに列を動的に設定していました。
まだ、.NETを始めてあまり経ってなくどの部分を
皆様に提示するとよいのかすらつかんでない状態です。

皆様方、色々と教えていただきありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)