DataList または Repeater コントロールのレポート データをページングする (C#)
DataList と Repeater はどちらも自動ページングまたは並べ替えのサポートを提供しませんが、このチュートリアルでは、DataList または Repeater にページング サポートを追加する方法について説明します。これにより、より柔軟なページングとデータ表示インターフェイスが可能になります。
はじめに
ページングと並べ替えは、オンライン アプリケーションでデータを表示する場合の 2 つの非常に一般的な機能です。 たとえば、オンライン書店で ASP.NET 書籍を検索する場合、そのような書籍は数百冊ある可能性がありますが、検索結果を一覧表示するレポートには 1 ページあたり 10 個の一致しか表示されません。 さらに、結果はタイトル、価格、ページ数、作成者名などによって並べ替えることができます。 「レポート データのページングと並べ替え」チュートリアルで説明したように、GridView、DetailsView、および FormView コントロールはすべて、チェックボックスのチェック ボックスで有効にできる組み込みのページング サポートを提供します。 GridView には、並べ替えのサポートも含まれています。
残念ながら、DataList と Repeater のどちらも、自動ページングまたは並べ替えのサポートを提供しません。 このチュートリアルでは、DataList または Repeater にページング サポートを追加する方法について説明します。 ページング インターフェイスを手動で作成し、レコードの適切なページを表示し、ポストバック間でアクセスされているページを思い出す必要があります。 これには GridView、DetailsView、または FormView よりも時間とコードが必要ですが、DataList と Repeater を使用すると、より柔軟なページングとデータ表示インターフェイスが可能になります。
注意
このチュートリアルでは、ページングのみに重点を置いています。 次のチュートリアルでは、並べ替え機能の追加に注目します。
手順 1: ページングと並べ替えのチュートリアル Web ページの追加
このチュートリアルを開始する前に、まず、このチュートリアルと次のページに必要な ASP.NET ページを追加してみましょう。 まず、 という名前 PagingSortingDataListRepeater
のプロジェクトに新しいフォルダーを作成します。 次に、次の 5 つの ASP.NET ページをこのフォルダーに追加し、マスター ページを使用するようにすべてのページ Site.master
を構成します。
Default.aspx
Paging.aspx
Sorting.aspx
SortingWithDefaultPaging.aspx
SortingWithCustomPaging.aspx
図 1: フォルダーを PagingSortingDataListRepeater
作成し、チュートリアル ASP.NET ページを追加する
次に、ページをDefault.aspx
開き、ユーザー コントロールをSectionLevelTutorialListing.ascx
UserControls
フォルダーからデザイン画面にドラッグします。 マスター ページとサイト ナビゲーションのチュートリアルで作成したこのユーザー コントロールは、サイト マップを列挙し、箇条書きの現在のセクションにこれらのチュートリアルを表示します。
図 2: ユーザー コントロールを SectionLevelTutorialListing.ascx
に追加する Default.aspx
(クリックするとフルサイズの画像が表示されます)
箇条書きに作成するページングと並べ替えのチュートリアルを表示するには、サイト マップに追加する必要があります。 ファイルを Web.sitemap
開き、DataList サイト マップ ノード マークアップを使用して編集と削除の後に次のマークアップを追加します。
<siteMapNode
url="~/PagingSortingDataListRepeater/Default.aspx"
title="Paging and Sorting with the DataList and Repeater"
description="Paging and Sorting the Data in the DataList and Repeater Controls">
<siteMapNode
url="~/PagingSortingDataListRepeater/Paging.aspx"
title="Paging"
description="Learn how to page through the data shown
in the DataList and Repeater controls." />
<siteMapNode
url="~/PagingSortingDataListRepeater/Sorting.aspx"
title="Sorting"
description="Sort the data displayed in a DataList or
Repeater control." />
<siteMapNode
url="~/PagingSortingDataListRepeater/SortingWithDefaultPaging.aspx"
title="Sorting with Default Paging"
description="Create a DataList or Repeater control that is paged using
default paging and can be sorted." />
<siteMapNode
url="~/PagingSortingDataListRepeater/SortingWithCustomPaging.aspx"
title="Sorting with Custom Paging"
description="Learn how to sort the data displayed in a DataList or
Repeater control that uses custom paging." />
</siteMapNode>
図 3: 新しい ASP.NET ページを含むようにサイト マップを更新する
ページングのレビュー
前のチュートリアルでは、GridView、DetailsView、および FormView コントロールのデータをページングする方法について説明しました。 これら 3 つのコントロールは、コントロールのスマート タグで [ページングを有効にする] オプションをオンにするだけで実装できる 、既定のページング と呼ばれる単純な形式のページングを提供します。 既定のページングでは、データのページが最初のページにアクセスするか、ユーザーが別のページのデータに移動するたびに、GridView、DetailsView、または FormView コントロールによって ObjectDataSource からすべての データが再要求されます。 次に、要求されたページ インデックスとページごとに表示するレコードの数を指定して、表示する特定のレコード セットを切り取ります。 既定のページングについては、「レポート データのページング と並べ替え 」チュートリアルで詳しく説明しました。
既定のページングでは各ページのすべてのレコードが再要求されるため、十分に大量のデータをページングする場合は実用的ではありません。 たとえば、ページ サイズが 10 の 50,000 レコードをページングするとします。 ユーザーが新しいページに移動するたびに、50,000 個のレコードがすべてデータベースから取得される必要があります。ただし、表示されるレコードは 10 個のみです。
カスタム ページング では、要求されたページに表示するレコードの正確なサブセットのみを取得することで、既定のページングのパフォーマンスの問題を解決します。 カスタム ページングを実装する場合は、正しいレコードのセットだけを効率的に返す SQL クエリを記述する必要があります。 2005 年SQL Server新しいROW_NUMBER()
キーワード (keyword)を使用してこのようなクエリを作成する方法については、「大量のデータを効率的にページングする」チュートリアルを参照してください。
DataList コントロールまたは Repeater コントロールに既定のページングを実装するには、 クラスをPagedDataSource
、そのコンテンツがページングされる をProductsDataTable
囲むラッパーとして使用できます。 PagedDataSource
クラスには、DataSource
列挙可能なオブジェクトに割り当てることができるプロパティと、ページごとに表示するレコード数とPageSize
CurrentPageIndex
現在のページ インデックスを示すプロパティがあります。 これらのプロパティを設定すると、 を PagedDataSource
任意のデータ Web コントロールのデータ ソースとして使用できます。 PagedDataSource
を列挙すると、 プロパティと CurrentPageIndex
プロパティに基づいてPageSize
、その内部DataSource
レコードの適切なサブセットのみが返されます。 図 4 は、 クラスの機能を PagedDataSource
示しています。
図 4: PagedDataSource
ページング可能なインターフェイスを使用して列挙可能なオブジェクトをラップする
オブジェクトは PagedDataSource
、ビジネス ロジック レイヤーから直接作成および構成し、ObjectDataSource を介して DataList または Repeater にバインドすることも、ASP.NET ページの分離コード クラスで直接作成および構成することもできます。 後者の方法を使用する場合は、ObjectDataSource の使用を見落とし、代わりにページデータを DataList または Repeater にプログラムでバインドする必要があります。
オブジェクトには PagedDataSource
、カスタム ページングをサポートするプロパティもあります。 ただし、表示する正確なレコードを返すカスタム ページング用に設計された BLL メソッドがクラスにProductsBLL
既に存在するため、カスタム ページングには を使用PagedDataSource
してバイパスできます。
このチュートリアルでは、適切に構成された オブジェクトを返す新しいメソッドを クラスに ProductsBLL
追加することで、DataList に既定のページングを実装する方法について説明 PagedDataSource
します。 次のチュートリアルでは、カスタム ページングの使用方法について説明します。
手順 2: ビジネス ロジック レイヤーに既定のページング メソッドを追加する
クラスには ProductsBLL
現在、すべての製品情報 GetProducts()
を返すメソッドと、開始インデックス GetProductsPaged(startRowIndex, maximumRows)
で製品の特定のサブセットを返すメソッドがあります。 既定のページングでは、GridView、DetailsView、および FormView コントロールはすべて、 メソッドを GetProducts()
使用してすべての製品を取得しますが、 を使用 PagedDataSource
してレコードの正しいサブセットのみを表示します。 DataList コントロールと Repeater コントロールを使用してこの機能をレプリケートするには、この動作を模倣する新しいメソッドを BLL に作成します。
2 つの整数入力パラメーターを ProductsBLL
受け取る という名前 GetProductsAsPagedDataSource
のクラスに メソッドを追加します。
pageIndex
表示するページのインデックス、0 でインデックスを付ける、およびpageSize
ページごとに表示するレコードの数。
GetProductsAsPagedDataSource
は、 からGetProducts()
すべてのレコードを取得することによって開始されます。 次に、オブジェクトをPagedDataSource
作成し、その CurrentPageIndex
プロパティと PageSize
プロパティを渡された パラメーターとpageSize
パラメーターの値にpageIndex
設定します。 メソッドは、この構成済 PagedDataSource
みの を返すことによって終了します。
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public PagedDataSource GetProductsAsPagedDataSource(int pageIndex, int pageSize)
{
// Get ALL of the products
Northwind.ProductsDataTable products = GetProducts();
// Limit the results through a PagedDataSource
PagedDataSource pagedData = new PagedDataSource();
pagedData.DataSource = products.Rows;
pagedData.AllowPaging = true;
pagedData.CurrentPageIndex = pageIndex;
pagedData.PageSize = pageSize;
return pagedData;
}
手順 3: 既定のページングを使用して DataList に製品情報を表示する
クラスに メソッドをGetProductsAsPagedDataSource
ProductsBLL
追加すると、既定のページングを提供する DataList または Repeater を作成できるようになりました。 まず、フォルダー内のページをPaging.aspx
PagingSortingDataListRepeater
開き、DataList をツールボックスからDesignerにドラッグし、DataList の ID
プロパティを にProductsDefaultPaging
設定します。 DataList のスマート タグから、 という名前 ProductsDefaultPagingDataSource
の新しい ObjectDataSource を作成し、 メソッドを使用して GetProductsAsPagedDataSource
データを取得するように構成します。
図 5: ObjectDataSource を作成し、 メソッドを使用 GetProductsAsPagedDataSource
()
するように構成する (クリックするとフルサイズの画像が表示されます)
[UPDATE]、[INSERT]、[DELETE] タブのドロップダウン リストを (None) に設定します。
図 6: UPDATE、INSERT、DELETE タブの Drop-Down Lists を (なし) に設定します (フルサイズの画像を表示する 場合はクリックします)
メソッドは GetProductsAsPagedDataSource
2 つの入力パラメーターを必要とするため、これらのパラメーター値のソースを求めるメッセージが表示されます。
ページ インデックスとページ サイズの値は、ポストバック間で記憶する必要があります。 ビュー ステートに格納したり、クエリ文字列に永続化したり、セッション変数に格納したり、他の手法を使用して記憶したりすることができます。 このチュートリアルでは、特定のページのデータをブックマークできる利点がある querystring を使用します。
特に、 パラメーターと パラメーターには、それぞれ querystring フィールド pageIndex と pageSize
pageSize pageIndex
を使用します (図 7 を参照)。 ユーザーがこのページに初めてアクセスしたときに querystring 値が存在しないため、これらのパラメーターの既定値を設定します。 の場合 pageIndex
、既定値を 0 (データの最初のページが表示されます) に設定し、 pageSize
既定値を 4 に設定します。
図 7: パラメーターと pageSize
パラメーターのソースpageIndex
として QueryString を使用する (クリックするとフルサイズの画像が表示されます)
ObjectDataSource を構成すると、Visual Studio によって DataList の が ItemTemplate
自動的に作成されます。 ItemTemplate
をカスタマイズして、製品の名前、カテゴリ、サプライヤーのみが表示されるようにします。 また、DataList の RepeatColumns
プロパティを 2 に、その Width
プロパティを 100% に、s ItemStyle
Width
を 50% に設定します。 これらの幅の設定では、2 つの列の間隔が等しくなります。
これらの変更を行った後、DataList と ObjectDataSource のマークアップは次のようになります。
<asp:DataList ID="ProductsDefaultPaging" runat="server" Width="100%"
DataKeyField="ProductID" DataSourceID="ProductsDefaultPagingDataSource"
RepeatColumns="2" EnableViewState="False">
<ItemTemplate>
<h4><asp:Label ID="ProductNameLabel" runat="server"
Text='<%# Eval("ProductName") %>'></asp:Label></h4>
Category:
<asp:Label ID="CategoryNameLabel" runat="server"
Text='<%# Eval("CategoryName") %>'></asp:Label><br />
Supplier:
<asp:Label ID="SupplierNameLabel" runat="server"
Text='<%# Eval("SupplierName") %>'></asp:Label><br />
<br />
<br />
</ItemTemplate>
<ItemStyle Width="50%" />
</asp:DataList>
<asp:ObjectDataSource ID="ProductsDefaultPagingDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsAsPagedDataSource">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="0" Name="pageIndex"
QueryStringField="pageIndex" Type="Int32" />
<asp:QueryStringParameter DefaultValue="4" Name="pageSize"
QueryStringField="pageSize" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
注意
このチュートリアルでは更新または削除の機能を実行していないため、DataList のビューステートを無効にして、レンダリングされるページ サイズを小さくすることができます。
ブラウザーを使用してこのページに最初にアクセスする場合、 パラメーターと pageSize
querystring パラメーターはどちらも指定されませんpageIndex
。 そのため、既定値の 0 と 4 が使用されます。 図 8 に示すように、最初の 4 つの製品を表示する DataList が作成されます。
図 8: 最初の 4 つの製品が一覧表示されます (クリックするとフルサイズの画像が表示されます)
ページング インターフェイスがない場合、現在、ユーザーがデータの 2 ページ目に移動するための簡単な手段はありません。 手順 4 でページング インターフェイスを作成します。 ただし、現時点では、ページングは、クエリ文字列でページング条件を直接指定することによってのみ実行できます。 たとえば、2 番目のページを表示するには、ブラウザーのアドレス バーの URL を から Paging.aspx
に変更し、Enter キーを Paging.aspx?pageIndex=2
押します。 これにより、データの 2 ページ目が表示されます (図 9 を参照)。
図 9: データの 2 ページ目が表示されます (フルサイズの画像を表示する場合はクリックします)
手順 4: ページング インターフェイスを作成する
実装できるさまざまなページング インターフェイスがあります。 GridView、DetailsView、および FormView コントロールには、次の 4 つの異なるインターフェイスが用意されています。
- 次に、以前の ユーザーは一度に 1 つのページを次のページまたは前のページに移動できます。
- 次に、[前へ]、[最初]、[最後 ]、[次へ] ボタンと [前へ] ボタンに加えて、このインターフェイスには、最初または最後のページに移動するための [最初] ボタンと [最後] ボタンが含まれます。
- 数値 はページング インターフェイスのページ番号を一覧表示します。これにより、ユーザーは特定のページにすばやく移動できます。
- [数値]、[最初]、[最後 ] には、数値ページ番号に加えて、最初または最後のページに移動するためのボタンが含まれています。
DataList と Repeater の場合、ページング インターフェイスを決定して実装する必要があります。 これには、ページに必要な Web コントロールを作成し、特定のページング インターフェイス ボタンがクリックされたときに要求されたページを表示する必要があります。 さらに、特定のページング インターフェイス コントロールを無効にする必要がある場合があります。 たとえば、Next、Previous、First、Last インターフェイスを使用してデータの最初のページを表示すると、[最初] と [前へ] の両方のボタンが無効になります。
このチュートリアルでは、Next、Previous、First、Last インターフェイスを使用します。 ページに 4 つのボタン Web コントロールを追加し、そのコントロールを ID
、、NextPage
PrevPage
、および LastPage
にFirstPage
設定します。 プロパティを Text
First、Prev、 < Next>、Last >> に<<設定します。
<asp:Button runat="server" ID="FirstPage" Text="<< First" />
<asp:Button runat="server" ID="PrevPage" Text="< Prev" />
<asp:Button runat="server" ID="NextPage" Text="Next >" />
<asp:Button runat="server" ID="LastPage" Text="Last >>" />
次に Click
、これらのボタンごとにイベント ハンドラーを作成します。 すぐに、要求されたページを表示するために必要なコードを追加します。
ページングされるレコードの合計数を記憶する
選択したページング インターフェイスに関係なく、ページングされるレコードの合計数を計算して記憶する必要があります。 合計行数 (ページ サイズと組み合わせて) によって、ページングされるデータの合計ページ数が決まります。これにより、追加されるページング インターフェイス コントロールまたは有効になっているページング インターフェイス コントロールが決まります。 作成している Next、Previous、First、Last インターフェイスでは、ページ数は次の 2 つの方法で使用されます。
- 最後のページが表示されているかどうかを確認するには、[次へ] ボタンと [最後のページ] ボタンが無効になっています。
- ユーザーが [最後] ボタンをクリックした場合は、インデックスがページ数より 1 小さい最後のページに移動する必要があります。
ページ数は、合計行数の上限をページ サイズで割った値として計算されます。 たとえば、1 ページあたり 4 つのレコードを含む 79 レコードをページングする場合、ページ数は 20 (79 / 4 の上限) になります。 数値ページング インターフェイスを使用している場合、この情報は表示する数値ページ ボタンの数を示します。ページング インターフェイスに [次へ] または [最後] ボタンが含まれている場合は、ページ数を使用して、[次へ] または [最後] ボタンを無効にするタイミングが決定されます。
ページング インターフェイスに [最後] ボタンが含まれている場合は、最後のボタンがクリックされたときに最後のページ インデックスを決定できるように、ページングされるレコードの合計数をポストバック間で記憶することが不可欠です。 これを容易にするために、ASP.NET ページの分離コード クラスに、その値を保持して状態を表示するプロパティを作成 TotalRowCount
します。
private int TotalRowCount
{
get
{
object o = ViewState["TotalRowCount"];
if (o == null)
return -1;
else
return (int)o;
}
set
{
ViewState["TotalRowCount"] = value;
}
}
に TotalRowCount
加えて、ページ インデックス、ページ サイズ、ページ数に簡単にアクセスできるように、読み取り専用のページ レベルのプロパティを作成するのに 1 分かかります。
private int PageIndex
{
get
{
if (!string.IsNullOrEmpty(Request.QueryString["pageIndex"]))
return Convert.ToInt32(Request.QueryString["pageIndex"]);
else
return 0;
}
}
private int PageSize
{
get
{
if (!string.IsNullOrEmpty(Request.QueryString["pageSize"]))
return Convert.ToInt32(Request.QueryString["pageSize"]);
else
return 4;
}
}
private int PageCount
{
get
{
if (TotalRowCount <= 0 || PageSize <= 0)
return 1;
else
return ((TotalRowCount + PageSize) - 1) / PageSize;
}
}
ページングされるレコードの合計数の決定
PagedDataSource
ObjectDataSource の Select()
メソッドから返されたオブジェクトは、DataList に表示されるサブセットのみが表示される場合でも、すべての製品レコード内に含まれます。 s Count
プロパティはPagedDataSource
、DataList DataSourceCount
に表示されるアイテムの数のみを返します。プロパティは、 内のアイテムの合計数をPagedDataSource
返します。 したがって、ASP.NET ページの プロパティに s TotalRowCount
プロパティの値をPagedDataSource
DataSourceCount
割り当てる必要があります。
これを実現するには、ObjectDataSource の Selected
イベントのイベント ハンドラーを作成します。 イベント ハンドラーでは、 Selected
この場合、ObjectDataSource s Select()
メソッドの戻り値である にアクセスできます PagedDataSource
。
protected void ProductsDefaultPagingDataSource_Selected
(object sender, ObjectDataSourceStatusEventArgs e)
{
// Reference the PagedDataSource bound to the DataList
PagedDataSource pagedData = (PagedDataSource)e.ReturnValue;
// Remember the total number of records being paged through
// across postbacks
TotalRowCount = pagedData.DataSourceCount;
}
要求されたデータ ページの表示
ユーザーがページング インターフェイスのいずれかのボタンをクリックすると、要求されたデータ ページを表示する必要があります。 ページング パラメーターは querystring を介して指定されているため、要求されたデータ ページを表示するには、 を使用して、ユーザーのブラウザーが適切なページング パラメーターを使用 Response.Redirect(url)
してページを要求し直 Paging.aspx
します。 たとえば、データの 2 ページ目を表示するには、ユーザーを に Paging.aspx?pageIndex=1
リダイレクトします。
これを容易にするために、ユーザーを RedirectUser(sendUserToPageIndex)
に Paging.aspx?pageIndex=sendUserToPageIndex
リダイレクトするメソッドを作成します。 次に、4 つの Button Click
イベント ハンドラーからこのメソッドを呼び出します。 FirstPage
Click
イベント ハンドラーで、 を呼び出RedirectUser(0)
して最初のページに送信します。イベント ハンドラーではClick
PrevPage
、ページ インデックスとして を使用PageIndex - 1
します。
protected void FirstPage_Click(object sender, EventArgs e)
{
// Send the user to the first page
RedirectUser(0);
}
protected void PrevPage_Click(object sender, EventArgs e)
{
// Send the user to the previous page
RedirectUser(PageIndex - 1);
}
protected void NextPage_Click(object sender, EventArgs e)
{
// Send the user to the next page
RedirectUser(PageIndex + 1);
}
protected void LastPage_Click(object sender, EventArgs e)
{
// Send the user to the last page
RedirectUser(PageCount - 1);
}
private void RedirectUser(int sendUserToPageIndex)
{
// Send the user to the requested page
Response.Redirect(string.Format("Paging.aspx?pageIndex={0}&pageSize={1}",
sendUserToPageIndex, PageSize));
}
イベント ハンドラーが Click
完了したら、ボタンをクリックして DataList のレコードをページングできます。 少しお試しください。
ページング インターフェイス コントロールの無効化
現在、4 つのボタンはすべて、表示されているページに関係なく有効になっています。 ただし、データの最初のページを表示する場合は [最初] ボタンと [前へ] ボタン、最後のページを表示する場合は [次へ] ボタンと [最後] ボタンを無効にします。 PagedDataSource
ObjectDataSource の Select()
メソッドによって返されるオブジェクトにはプロパティIsFirstPage
があり、IsLastPage
データの最初のページまたは最後のページを表示しているかどうかを調べることができます。
ObjectDataSource のイベント ハンドラーに次を Selected
追加します。
// Configure the paging interface based on the data in the PagedDataSource
FirstPage.Enabled = !pagedData.IsFirstPage;
PrevPage.Enabled = !pagedData.IsFirstPage;
NextPage.Enabled = !pagedData.IsLastPage;
LastPage.Enabled = !pagedData.IsLastPage;
この追加により、最初のページを表示するときに [最初] ボタンと [前へ] ボタンが無効になり、最後のページを表示するときに [次へ] ボタンと [最後へ] ボタンが無効になります。
現在表示しているページと合計ページ数をユーザーに通知することで、ページング インターフェイスを完了しましょう。 Label Web コントロールをページに追加し、そのプロパティを ID
に CurrentPageNumber
設定します。 Text
表示されている現在のページ () と合計ページ数 (PageIndex + 1
) が含まれるよう、ObjectDataSource の Selected イベント ハンドラーでそのプロパティを設定しますPageCount
。
// Display the current page being viewed...
CurrentPageNumber.Text = string.Format("You are viewing page {0} of {1}...",
PageIndex + 1, PageCount);
図 10 は、最初にアクセスした日時を示しています Paging.aspx
。 querystring は空であるため、DataList は既定で最初の 4 つの製品を表示します。[最初] ボタンと [前へ] ボタンは無効になっています。 [次へ] をクリックすると、次の 4 つのレコードが表示されます (図 11 を参照)。[最初] ボタンと [前へ] ボタンが有効になりました。
図 10: データの最初のページが表示されます (フルサイズの画像を表示する場合はクリックします)
図 11: データの 2 ページ目が表示されます (フルサイズの画像を表示する場合はクリックします)
注意
ページごとに表示するページ数をユーザーが指定できるようにすることで、ページング インターフェイスをさらに強化できます。 たとえば、DropDownList には、5、10、25、50、All などのリスト ページ サイズ オプションを追加できます。 ページ サイズを選択したら、ユーザーを にリダイレクトする Paging.aspx?pageIndex=0&pageSize=selectedPageSize
必要があります。 この拡張機能の実装は、読者向けの演習として残しておきます。
カスタム ページングの使用
DataList は、非効率的な既定のページング手法を使用して、データをページングします。 十分に大量のデータをページングする場合は、カスタム ページングを使用することが不可欠です。 実装の詳細は若干異なりますが、DataList でのカスタム ページングの実装の背後にある概念は、既定のページングと同じです。 カスタム ページングでは、 クラスの メソッド GetProductsPaged
(ProductBLL
ではなくGetProductsAsPagedDataSource
) を使用します。 「大量のデータを効率的にページングする」チュートリアルで説明したように、GetProductsPaged
開始行インデックスと返す行の最大数を渡す必要があります。 これらのパラメーターは、既定のページングで使用される パラメーターとpageSize
同様にpageIndex
、クエリ文字列を使用して保持できます。
カスタム ページングはないため、別の PagedDataSource
手法を使用して、ページングされるレコードの合計数と、データの最初のページと最後のページのどちらを表示するかを決定する必要があります。 クラスの メソッドは TotalNumberOfProducts()
、 ProductsBLL
ページングされる製品の合計数を返します。 データの最初のページが表示されているかどうかを確認するには、開始行インデックスが 0 の場合は、最初のページが表示されていることを確認します。 最後のページは、開始行インデックスと返す最大行数が、ページングされるレコードの合計数以上の場合に表示されます。
次のチュートリアルでは、カスタム ページングの実装について詳しく説明します。
まとめ
DataList コントロールも Repeater コントロールも、GridView コントロール、DetailsView コントロール、および FormView コントロールにあるすぐに使用できるページング サポートは提供しませんが、このような機能は最小限の労力で追加できます。 既定のページングを実装する最も簡単な方法は、 内 PagedDataSource
の製品セット全体をラップし、 を DataList または Repeater にバインド PagedDataSource
することです。 このチュートリアルでは、 メソッドを GetProductsAsPagedDataSource
クラスに追加して ProductsBLL
を返しました PagedDataSource
。 クラスにはProductsBLL
、カスタム ページングと TotalNumberOfProducts
に必要なメソッドが既にGetProductsPaged
含まれています。
カスタム ページング用に表示する正確なレコードセットまたは既定のページング用のすべての PagedDataSource
レコードを取得するだけでなく、ページング インターフェイスを手動で追加する必要もあります。 このチュートリアルでは、4 つのボタン Web コントロールを含む Next、Previous、First、Last インターフェイスを作成しました。 また、現在のページ番号と合計ページ数を表示する Label コントロールが追加されました。
次のチュートリアルでは、DataList と Repeater に並べ替えのサポートを追加する方法について説明します。 また、ページ分割と並べ替えの両方が可能な DataList を作成する方法についても説明します (既定のページングとカスタム ページングを使用する例を使用)。
プログラミングに満足!
著者について
7 冊の ASP/ASP.NET 書籍の著者であり、 4GuysFromRolla.com の創設者である Scott Mitchell は、1998 年から Microsoft Web テクノロジと協力しています。 Scott は、独立したコンサルタント、トレーナー、ライターとして働いています。 彼の最新の本は サムズは24時間で2.0 ASP.NET 自分自身を教えています。 にアクセスするか、ブログを使用して にアクセスmitchell@4GuysFromRolla.comできます。これは でhttp://ScottOnWriting.NET見つけることができます。
特別な感謝
このチュートリアル シリーズは、多くの役に立つ校閲者によってレビューされました。 このチュートリアルのリード レビュー担当者は、Liz Shulok、Ken Pespisa、Bernadette Leigh でした。 今後の MSDN の記事を確認することに関心がありますか? その場合は、 にmitchell@4GuysFromRolla.com行をドロップしてください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示