- - PR -
Live Demo:DataListにページング機能を追加するには
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-08-27 15:39
View a live demo をクリックすると
DataListにページング機能を付加したサンプルがご覧頂けます。 このサンプルは、DataListに<<, < , >, >>の4種類のナビゲーションボタン を表示させてページングさせています。 DataGridのページングでは、データベースの先頭(<<), 最終(>>)レコードに 移動する機能がありませんが、このサンプルでは、先頭、最終レコードにも 移動できます。 また、DataGridのページング機能は、カレントページ以外の余分なレコードも データベースから読み込まれますが、このサンプルではカレントページに 表示されるレコードのみ読み込んで高速化しています。 ページング機能は、DataAdapterのFill()メソッドを使用すれば 簡単に実現することができます。 mySqlDataAdapter.Fill(DataSet, startRecord, maxRecords, srcTable) ところが、この手法を採用するとカレントページ以外の余分なレコードがテーブル から読み込まれます。 カレントページに表示するレコードのみ読み込むには、SELECTのTopオプション を使用します。たとえばページサイズが10レコードのときは、以下のような SQLを使用します。 次頁に移動するときのSQL: Select top 10 * From Customers Where CustomerID > @LastID Order by CustomerID Asc" 前頁に移動するときのSQL: Select * From (Select top 10 * From Customers Where CustomerID < @FirstID Order by CustomerID Desc) As Customer1 Order by CustomerID Asc Happy Programming! Akio Kasai | ||||
|
投稿日時: 2002-11-07 12:05
こんにちは Hiroです。
いつも勉強させていただいています。 DataListのページング機能について教えてください。 Dr ADO.NETさんのデモのようにDataListのフッダーに ページング機能を持たせようとしているのですが デモのようにページの先頭行,最後の行の時 移動ボタンを無効にする方法がわかりません。 DataList内のボタンプロパティの操作はどのように すればよいのでしょうか 御教示願います。 | ||||
|
投稿日時: 2002-11-08 10:02
ButtonコントロールのEnabledプロパティにFalseを設定します。
Happy Programming! Akio Kasai | ||||
|
投稿日時: 2002-11-08 16:26
こんにちは Hiroです。
レスありがとうございます。 私の質問の仕方がまずかったのですが、 DBGridのページングのように DataListのFooterTemplateにID=Button1,Button2という Buttonコントロールを作成してページングを実現したいです。 DataListの外にページングのボタンを配置すればボタンのプロパティ は取れますが、DataList内のFooterTemplateに作成されたボタンコントロール のプロパティを取るにはどのようにすればよいのでしょうか。 御教示お願いします。 | ||||
|
投稿日時: 2002-11-09 00:03
DataListのFooterTemplateにButtonを配置するときは
DataListのOnItemDataBoundイベントでButtonのEnabledプロパティを 書き換えます。
Happy Programming! Akio Kasai | ||||
|
投稿日時: 2002-11-12 23:46
こんにちは、Dr ADO.NET。
DataListでのページング処理コーディング例を拝見させていただきました。 ちょっと質問させてください。 まず、今回提示してくださいましたサンプルでは簡単にページング処理が実現できていますが 以下のようなデータ条件の元では実現できるのでしょうか? ***テーブルデータ*** ID 社員名 部ID 部署名 1 Dさん 1 X部署 2 Bさん 1 X部署 3 Cさん 2 Y部署 4 Aさん 3 Z部署 ***全社員を取得&社員名でソートして画面表示*** ID 社員名 部ID 部署名 4 Aさん 3 Z部署 2 Bさん 1 X部署 3 Cさん 2 Y部署 1 Dさん 1 X部署 ************************* このようなデータ表現の場合、Dr ADO.NETさんが書かれているSQL条件では うまくページングが実現できませんよね? このような場合、1ページあたりの行数を「2」と仮定して、 SQLDataAdapter.Fillで全行返せば勝手にAdapterが指定レコード範囲を返してくれると 思います。 mySqlDataAdapter.Fill(DataSet, 3, 4, srcTable) 3 Cさん 2 Y部署 1 Dさん 1 X部署 しかしこれでは常に全行を引っ張ってしまうので高速化が図れません。 検索&ソート結果をTempテーブルに格納してそのテーブルにはさらにユニークなID列 を作成してそのID列を元にDr ADO.NETさんのSQLで取得は可能となりますが、 果たしてこれが現実的な回答なのでしょうか? .NETというよりはSQLの世界かもしれませんが、何かよいアドバイスを 頂ければ幸いです。 | ||||
|
投稿日時: 2002-11-12 23:48
Dr ADO.NETさん。
上記スレッドで「さん」が付いてなく、呼び捨てになっていること お詫びいたします。 | ||||
|
投稿日時: 2002-11-13 09:33
DataListに並べ替えとページング機能を組み込むときは、
DataAdapterのFill()メソッドを採用すべきでは? 操作性より性能を優先するなら、DataListをPrimaryKey(主キー)の順に 並べ替えて高速化します。 性能と操作性が要求されるWebサイトを構築するときは、データベースのテーブルを DataSetに格納してWebサーバのメモリ上にCacheする方法もあります。 DataSetからDataTable/DataViewを作成すれば、並べ替えをメモリ上で行って DataListにバインドできます。ページがポストバックされたときも、Cacheされた DataSetを再利用できます。 データベースが更新されたとき、Cacheを自動的に無効にすることも できます。 Happy Programming! Akio Kasai |