成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之四十一:DataList和Repeater數(shù)據(jù)分頁

在ASP.NET 2.0中操作數(shù)據(jù)之四十一:DataList和Repeater數(shù)據(jù)分頁

熱門標(biāo)簽:400電話辦理怎么樣 蘇州如何辦理400電話 百應(yīng)電話機(jī)器人外呼系統(tǒng) 西寧呼叫中心外呼系統(tǒng)線路商 外呼電話機(jī)器人成本 聯(lián)通官網(wǎng)400電話辦理 臨沂智能電話機(jī)器人加盟 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 地圖標(biāo)注軟件免費(fèi)下載

導(dǎo)言

  分頁和排序是顯示數(shù)據(jù)時(shí)經(jīng)常用到的功能。比如,在一個(gè)在線書店里搜索關(guān)于ASP.NET 的書的時(shí)候,可能結(jié)果會(huì)是成百上千,而每頁只列出十條。而且結(jié)果可以根據(jù)title(書名),price(價(jià)格),page count(頁數(shù)),author name(作者)等來排序。我們?cè)诜猪摵团判驁?bào)表數(shù)據(jù) 里已經(jīng)討論過, GridView, DetailsView, 和FormView 都有內(nèi)置的分頁功能,僅僅只需要勾一個(gè)checkbox就可以開啟。GridView 還支持內(nèi)置的排序。

  不幸的是,DataList 和Repeater 都沒有提供內(nèi)置的分頁和排序功能。本章我們將學(xué)習(xí)如何在DataList 和Repeater 里添加分頁和排序的支持。我們需要?jiǎng)?chuàng)建分頁界面,顯示正確的頁的記錄,并在postback過程中記下瀏覽的頁。雖然這會(huì)比GridView, DetailsView, 和FormView里花費(fèi)更多的時(shí)間和寫更多的代碼,但是也提供了更多的可擴(kuò)展性。

注意:本章集中精力討論分頁,下章我們將學(xué)習(xí)排序。

第一步: 添加分頁和排序的教程頁

  首先添加本章和下一章需要的頁。創(chuàng)建一個(gè)名為PagingSortingDataListRepeater的文件夾,然后添加下面的5個(gè)頁,記得全部選擇Site.master。

Default.aspx
Paging.aspx
Sorting.aspx
SortingWithDefaultPaging.aspx
SortingWithCustomPaging.aspx


圖 1: 創(chuàng)建頁

  然后打開Default.aspx頁,從UserControls文件夾里拖一個(gè)SectionLevelTutorialListing.ascx用戶控件進(jìn)來。這個(gè)用戶控件我們已經(jīng)用了很多次了。見母板頁和站點(diǎn)導(dǎo)航  。


圖 2: 添加用戶控件

  為了將排序和分頁的教程列出來,我們需要將他們添加到site map(站點(diǎn)地圖)里。打開Web.sitemap文件,將下面的標(biāo)記語言添加到“Editing and Deleting with the DataList”()的節(jié)點(diǎn)后面:

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: 更新 Site Map

回顧一下分頁

  在前面我們學(xué)習(xí)了如何使用GridView, DetailsView, FormView 來分頁。這三個(gè)控件都提供了一種稱為默認(rèn)分頁的功能,僅僅只需要從智能標(biāo)簽里勾上“Enable Paging”(開啟分頁)即可。在使用默認(rèn)分頁時(shí),每次請(qǐng)求數(shù)據(jù) – 無論是第一頁還是其它頁–GridView, DetailsView, 和FormView 都會(huì)重新請(qǐng)求所有的數(shù)據(jù)。然后根據(jù)請(qǐng)求的頁索引和每頁顯示的記錄數(shù)來顯示特定頁的數(shù)據(jù),而忽略其它數(shù)據(jù)(即雖然被請(qǐng)求但未顯示的數(shù)據(jù))。我們?cè)诜猪摵团判驁?bào)表數(shù)據(jù) 里已經(jīng)詳細(xì)的討論過默認(rèn)分頁了。

  默認(rèn)分頁由于每次都請(qǐng)求所有的數(shù)據(jù),因此在大數(shù)據(jù)量的情況下并不合適。例如,想象一下每頁顯示10條數(shù)據(jù),總共有有50,000條。每次用戶瀏覽一頁時(shí),都要從數(shù)據(jù)庫請(qǐng)求50,000條數(shù)據(jù),而其中只有10條會(huì)被顯示。

  自定義分頁使用每次只返回請(qǐng)求的數(shù)據(jù),從而解決了默認(rèn)分頁的性能問題。當(dāng)使用自定義分頁時(shí),我們需要寫有效的返回正確的記錄的SQL語句。我們?cè)诶飳W(xué)習(xí)了用SQL Server2005的ROW_NUMBER() keyword 來創(chuàng)建這樣的語句。

  在DataList或Repeater里使用默認(rèn)分頁,我們可以使用PagedDataSource class來包裝ProductsDataTable里需要分頁的內(nèi)容。PagedDataSource類有一個(gè)可以賦給任何枚舉類型對(duì)象的DataSource屬性,和PageSize (每頁顯示的記錄數(shù))and CurrentPageIndex (當(dāng)前頁的索引)。一旦設(shè)置了這些屬性,PagedDataSource就可以作為任何數(shù)據(jù)控件的數(shù)據(jù)源。PagedDataSource根據(jù)PageSize和CurrentPageIndex來返回合適的記錄。圖4描述了PagedDataSource類的功能。


圖 4: PagedDataSource使用可分頁的界面包裝枚舉對(duì)象

  PagedDataSource對(duì)象可以在BLL里直接創(chuàng)建和配置,并通過ObjectDataSource綁定到DataList或Repeater?;蛘咭部梢栽贏SP.NET 頁的后臺(tái)代碼里直接做這些。如果使用后一種方法,我們就不能使用ObjectDataSource而應(yīng)該直接編程將分頁數(shù)據(jù)綁定到DataList或Repeater。

  PagedDataSource對(duì)象也有支持自定義分頁的屬性。但是在這里我們將不討論它,因?yàn)槲覀冊(cè)赑roductsBLL類里已經(jīng)有一個(gè)可以精確的返回需要顯示的記錄的方法。本章我們將學(xué)習(xí)如何通過在ProductsBLL類里添加一個(gè)返回合適的PagedDataSource對(duì)象的方法來實(shí)現(xiàn)默認(rèn)分頁。下章我們?cè)儆懻撟远x分頁。

第二步: 在BLL里添加默認(rèn)的分頁方法

  ProductsBLL類里現(xiàn)在有一個(gè)返回所有product的方法–GetProducts()–和一個(gè)返回特定子集的方法–GetProductsPaged(startRowIndex,maximumRows)。當(dāng)使用默認(rèn)分頁時(shí),GridView, DetailsView, FormView 使用GetProducts()方法獲取所有的product,但是在內(nèi)部使用PagedDataSource來顯示正確的記錄子集。在DataList和Repeater里實(shí)現(xiàn)同樣的功能,我們可以在BLL里創(chuàng)建一個(gè)模擬這種行為的方法。

在ProductsBLL里添加一個(gè)帶兩個(gè)整型參數(shù)的方法,名為GetProductsAsPagedDataSource:

pageIndex – 顯示的頁的索引,從0開始
pageSize – 每頁顯示的記錄數(shù).

  GetProductsAsPagedDataSource首先從GetProducts()里獲取所有的記錄。然后創(chuàng)建一個(gè)PagedDataSource對(duì)象,將CurrentPageIndex和PageSize屬性設(shè)置為傳進(jìn)來的參數(shù),pageIndex和pageSize。方法的最后返回這個(gè)配置過的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;
}

第三步: 在DataList里使用默認(rèn)分頁顯示Product

  完成GetProductsAsPagedDataSource方法后,我們現(xiàn)在來創(chuàng)建一個(gè)提供默認(rèn)分頁的DataList或Repeater。打開PagingSortingDataListRepeater文件夾下的Paging.aspx頁,拖一個(gè)DataList進(jìn)來,將ID設(shè)為ProductsDefaultPaging。通過智能標(biāo)簽創(chuàng)建一個(gè)名為ProductsDefaultPagingDataSource的ObjectDataSource并用GetProductsAsPagedDataSource方法配置它。


圖 5: 創(chuàng)建并配置ObjectDataSource

在UPDATE, INSERT, DELETE 標(biāo)簽的下拉列表里都選擇“(None)”.


圖 6: 在UPDATE, INSERT, DELETE 標(biāo)簽的下拉里選擇“(None)”

  因?yàn)镚etProductsAsPagedDataSource方法需要兩個(gè)參數(shù),因此向?qū)?huì)提示我們選擇參數(shù)源。page index和page size的值必須在postback過程中記下來。它們可以存在view state,querystring,session里或用其它技術(shù)來記錄。本章我們使用querystring。

  分別使用querystring字段“pageIndex” 和“pageSize”來配置pageIndex和pageSize。見圖7。由于用戶第一次瀏覽頁的時(shí)候沒有querystring,因此還需要設(shè)置這兩個(gè)參數(shù)的默認(rèn)值。將pageIndex的默認(rèn)值設(shè)為0(表示顯示第一頁數(shù)據(jù)),將pageSize的默認(rèn)值設(shè)為4。


圖 7: 配置參數(shù)

  配置完ObjectDataSource后,Visual Studio自動(dòng)為DataList創(chuàng)建一個(gè)ItemTemplate。修改它讓它只顯示product的name,category和supplier。將DataList的RepeatColumns屬性設(shè)為2,Width設(shè)為“100%”, ItemStyle的Width設(shè)為 “50%”. 這樣的設(shè)置會(huì)為兩列提供相同的間距。完成這些后DataList和ObjectDataSource的標(biāo)記語言看起來應(yīng)該如下:

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>

注意:由于這里我們不實(shí)現(xiàn)任何更新或刪除的功能,你可以禁用DataList的view state來減少頁面的大小。

  第一次瀏覽頁的時(shí)候,querystring里沒有提供pageIndex 和pageSize的值,因此將使用默認(rèn)的0和4。見圖8。DataList將顯示4條product記錄。


圖 8: 顯示4條Product

  由于還沒有分頁的界面,因此用戶現(xiàn)在還不能直接導(dǎo)航到第二頁。我們將在第四步里創(chuàng)建分頁界面。現(xiàn)在我們只能直接在querystring里指定分頁的參數(shù)來進(jìn)行分頁。例如,我們可以將地址從Paging.aspx改為Paging.aspx?pageIndex=2,然后回車,來瀏覽第二頁。這樣就可以看到第二頁的數(shù)據(jù)了,見圖9。


圖 9: 顯示第二頁數(shù)據(jù)

第四步: 創(chuàng)建分頁界面

有很多不同的完成分頁界面的方法。GridView, DetailsView, FormView 提供了4種不同的界面:

Next, Previous(后一頁,前一頁) – 用戶可以瀏覽上一頁或下一頁.
Next, Previous, First(第一頁), Last (最后一頁)– 除了上面的功能,這個(gè)還包含第一頁和最后一頁。
Numeric (數(shù)字)–在分頁界面上列出頁數(shù),用戶可以隨意的選擇一個(gè)頁 .
Numeric, First, Last – 在上一個(gè)功能的基礎(chǔ)上增加了第一頁和最后一頁.

  對(duì)DataList 和Repeater而言,我們需要決定它的分頁界面并實(shí)現(xiàn)它。這其中包含了需要?jiǎng)?chuàng)建web控件和當(dāng)特定頁的button被點(diǎn)時(shí)顯示請(qǐng)求的頁。另外某些分頁界面的控件可能需要禁用。例如,當(dāng)使用Next, Previous, First, Last這個(gè)模式來顯示時(shí),如果瀏覽第一頁數(shù)據(jù),那么第一頁和前一頁的button應(yīng)該被禁用。

  本章我們使用 Next, Previous, First, Last界面。添加4個(gè)button,并將ID分別設(shè)為FirstPage,PrevPage,NextPage和LastPage。將Text設(shè)為“ 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 >>" />

然后為每個(gè)button創(chuàng)建一個(gè)Click事件處理。呆會(huì)我們將添加代碼來顯示請(qǐng)求的頁。

記下分頁的總記錄數(shù)

  不管選擇哪種分頁界面,我們都需要計(jì)算和記下分頁的總記錄數(shù)??偟男袛?shù)(和page size)來決定總的頁數(shù),它決定了那些分頁界面的控件需要增加或啟用。在我們創(chuàng)建的Next, Previous, First, Last 界面里,page count(頁數(shù))在兩種情況下需要被用到:

  判斷我們是否在瀏覽最后一頁,這種情況下Next 和Last buttons 需要禁用。
  如果用戶點(diǎn)了Last button我們需要將它轉(zhuǎn)到最后一頁,它的索引等于page count減1。

  page count通過總行數(shù)除以page size(頁數(shù))來計(jì)算得到。例如我們要分頁79條記錄,每頁顯示4條,那么page count為20(79/4)。如果我們使用數(shù)字分頁界面,就可以通過這個(gè)信息來決定要顯示多少個(gè)數(shù)字頁的button。如果分頁界面只包含Next 和Last buttons,可以通過page count來什么時(shí)候禁用Next 和Last buttons。

  如果分頁界面包含Last button(最后一頁),我們需要在postback過程中記下分頁的總記錄數(shù),這樣在點(diǎn)Last button的時(shí)候我們可以獲得最后一頁的索引。為了方便實(shí)現(xiàn)這個(gè),我們?cè)贏SP.NET頁的后臺(tái)代碼里創(chuàng)建一個(gè)TotalRowCount屬性來將這個(gè)值保存到view state里。

private int TotalRowCount
{
 get
 {
  object o = ViewState["TotalRowCount"];
  if (o == null)
   return -1;
  else
   return (int)o;
 }
 set
 {
  ViewState["TotalRowCount"] = value;
 }
}

  除了TotalRowCount外,還需要為page index,page size和page count創(chuàng)建頁面級(jí)的只讀屬性來方便讀取。

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;
 }
}

獲取分頁的總記錄數(shù)

  從ObjectDataSource的Select()方法返回一個(gè)PagedDataSource對(duì)象包含所有的product記錄,即使只有一部分會(huì)在DataList里顯示。PagedDataSource的Count property 返回將在DataList里顯示的項(xiàng)的數(shù)目。DataSourceCount property 返回PagedDataSource里的所有項(xiàng)的的總數(shù)目。因此我們需要將ASP.NET頁的TotalRowCount屬性賦值為PagedDataSource的DataSourceCount。

  我們?yōu)镺bjectDataSource的Selectd事件創(chuàng)建一個(gè)event handler來完成這些。在Selectd的event handler里我們獲取ObjectDataSource的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;
}

顯示請(qǐng)求的頁的數(shù)據(jù)

  當(dāng)用戶點(diǎn)分頁界面上的button時(shí),我們需要顯示請(qǐng)求的頁的數(shù)據(jù)。由于分頁的參數(shù)在querystring里指定,因此使用Response.Redirect(url)來讓用戶重新請(qǐng)求帶合適分頁參數(shù)的Paging.aspx頁。例如,顯示第二頁的數(shù)據(jù),我們將用戶重定向到Paging.aspx?pageIndex=1。

  創(chuàng)建一個(gè)RedirectUser(sendUserToPageIndex)方法來重定向用戶到Paging.aspx?pageIndex=sendUserToPageIndex。然后在四個(gè)按鈕的Click事件處理里調(diào)用這個(gè)方法。在FirstPageClick里調(diào)用RedirectUser(0),在PrevPageClick里調(diào)用RedirectUser(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的記錄現(xiàn)在可以通過button來分頁了,你可以測(cè)試一下。

禁用分頁控件

  現(xiàn)在無論瀏覽哪頁四個(gè)按鈕都是可用的。然而我們?cè)跒g覽第一頁時(shí)需要禁用 First 和Previous buttons ,在瀏覽最后一頁時(shí)需要禁用Next 和Last buttons。通過ObjectDataSource的Select()方法返回的PagedDataSource對(duì)象有幾個(gè)屬性– IsFirstPage 和 IsLastPage –通過它們可以判斷用戶瀏覽的是否是第一或最后一頁數(shù)據(jù)。添加下面的代碼到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;

  添加完后,當(dāng)瀏覽第一頁時(shí),F(xiàn)irst 和Previous buttons 將被禁用。當(dāng)瀏覽最后一頁時(shí),Next 和  Last buttons 將被禁用。

  我們最后來實(shí)現(xiàn)在分頁界面里通知用戶他們當(dāng)前是瀏覽的哪頁和一共有多少頁。添加一個(gè)Label控件并將ID設(shè)為CurrentPageNumber。在ObjectDataSource的Selected事件處理中設(shè)置它的Text屬性,讓它顯示當(dāng)前瀏覽的頁(PageIndex+1)和總頁數(shù)(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默認(rèn)顯示最開始的4條product。First 和Previous buttons 被禁用。點(diǎn)Next 會(huì)顯示下面的4條記錄(見圖11),而First 和Previous buttons 同時(shí)被啟用了。


圖 10: 第一頁數(shù)據(jù)


圖 11: 第二頁數(shù)據(jù)

  注意:分頁界面可以進(jìn)一步改善,比如增加允許用戶來指定每頁顯示多少記錄。例如添加一個(gè)DropDownList列出page size的選項(xiàng),比如5, 10, 25, 50, 和ALL。用戶選擇了page size后會(huì)重定向到Paging.aspx?pageIndex=0pageSize=selectedPageSize。我將這個(gè)作為練習(xí)留給讀者自己完成。

使用自定義分頁

  DataList使用沒有效率的默認(rèn)分頁技術(shù)。當(dāng)大數(shù)據(jù)量時(shí),我們需要使用自定義分頁。雖然實(shí)現(xiàn)的細(xì)節(jié)有所不同,但是分頁里的概念和默認(rèn)分頁是一樣的。默認(rèn)分頁時(shí),使用ProductsBLL類的GetProductsPaged方法(而不是GetProductsAsPagedDataSource)。正如在大數(shù)據(jù)量時(shí)提高分頁的效率 里討論的那樣,GetProductsPaged需要傳入開始行的索引和行的最大數(shù)目。這些參數(shù)可以通過默認(rèn)分頁里使用的querystring里的pageIndex和pageSize參數(shù)來保存。

  由于自定義分頁里沒有PagedDataSource,所以需要其它技術(shù)來決定總記錄數(shù)和判斷我們是否顯示第一或最后一頁數(shù)據(jù)。ProductsBLL類的TotalNumberOfProducts()方法返回roduct的總記錄數(shù)。而為了判斷是否瀏覽的是第一頁數(shù)據(jù),我們需要檢查開始行的索引–如果是0,則表示在瀏覽第一頁。如果開始行的索引加上最大的行數(shù)大于或等于總記錄數(shù)則表示在最后一頁.我們將在下章詳細(xì)的討論如何實(shí)現(xiàn)自定義分頁。

總結(jié)

  DataList和Repeater都沒有提供象GridView, DetailsView, FormView 那樣的分頁的支持,這樣的功能需要我們來實(shí)現(xiàn)。最簡(jiǎn)單的實(shí)現(xiàn)方法是使用默認(rèn)分頁,將所有的product都包裝到PagedDataSource里,然后綁定PagedDataSource到DataList或Repeater。本章我們?cè)赑roductsBLL類里添加GetProductsAsPagedDataSource方法,它返回PagedDataSource。ProductsBLL類已經(jīng)包含了自定義分頁需要的方法– GetProductsPaged和TotalNumberOfProducts。

  不管是自定義方法里獲取精確的記錄還是默認(rèn)方法里獲取所有記錄,我們都需要手動(dòng)添加分頁界面。本章我們創(chuàng)建的是包含4個(gè)button控件的Next, Previous, First, Last interface 。當(dāng)然還添加了一個(gè)顯示當(dāng)前頁和總頁數(shù)的Label控件。

  下章將學(xué)習(xí)如何為DataList和Repeater提供排序功能。我們也會(huì)創(chuàng)建一個(gè)既支持分頁又支持排序的DataList(和使用默認(rèn)和自定義分頁的例子)

  祝編程快樂!

作者簡(jiǎn)介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用 微軟Web技術(shù)。大家可以點(diǎn)擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對(duì)大家的學(xué)習(xí)ASP.NET有所幫助。

您可能感興趣的文章:
  • .NET實(shí)現(xiàn)Repeater控件+AspNetPager控件分頁
  • asp.net Repeater分頁實(shí)例(PageDataSource的使用)
  • asp.net中使用repeater和PageDataSource搭配實(shí)現(xiàn)分頁代碼
  • asp.net中讓Repeater和GridView支持DataPager分頁
  • asp.net下Repeater使用 AspNetPager分頁控件
  • asp.net Repeater之非常好的數(shù)據(jù)分頁
  • asp.net repeater手寫分頁實(shí)例代碼
  • ASP.NET程序中用Repeater實(shí)現(xiàn)分頁
  • .NET中的repeater簡(jiǎn)介及分頁效果

標(biāo)簽:清遠(yuǎn) 臨夏 海西 甘肅 慶陽 中衛(wèi) 聊城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之四十一:DataList和Repeater數(shù)據(jù)分頁》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之四十一:DataList和Repeater數(shù)據(jù)分頁》相關(guān)的同類信息!
  • 本頁收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之四十一:DataList和Repeater數(shù)據(jù)分頁的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久婷婷国产| 久久这里精品国产99丫e6| 午夜精品久久久久99蜜桃最新版| 懂色av一区二区在线播放| 亚洲自拍高清视频网站| 亚洲成人不卡| 欧美videossex| 国产欧美另类| 在线综合+亚洲+欧美中文字幕| 色综合久久久888| 成人手机在线电影| 99re视频精品| 久久精品视频一区| 免费看的国产视频网站| 久久99精品一区二区三区| 国产伦精品一区二区三区四区| 日韩电影中文 亚洲精品乱码| 日韩影院一区二区| 一二三四区视频| 五月天婷婷在线观看视频| 亚洲一区二区自偷自拍| 丁香六月天婷婷| 欧美一级片在线播放| 97操在线视频| 欧美一级高清片| 37pao成人国产永久免费视频| 久久视频免费看| 欧美在线网站| 动漫美女无遮挡免费| 都市激情久久综合| 欧美日韩性生活视频| 中文字幕亚洲欧美在线不卡| 亚洲一区二区三区中文字幕| 大胸美女被爆操| 视频在线观看你懂的| 中国大陆高清aⅴ毛片| 日本黄色a视频| 日韩午夜小视频| 日韩欧美一区在线观看| 福利视频导航大全| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久9999爆乳| 日本簧片在线观看| 欧美日韩一区二区三区在线观看免| 中文字幕在线播放| 另类视频一区二区三区| 色综合色狠狠天天综合色| 欧美深性狂猛ⅹxxx深喉| 国产免费黄网站| 亚洲乱码免费伦视频| 国产日产精品一区二区三区| 亚洲激情在线观看视频| 免费99精品国产自在在线| 99久久久久| 中文字幕成人精品久久不卡| 激情网址大全| 日本激情一区二区三区| 无码人妻一区二区三区在线视频| 182在线观看视频| 欧美黑人精品一区二区不卡| 日本激情视频在线播放| 精品粉嫩aⅴ一区二区三区四区| 日本成本人片免费观看| 亚洲欧美日韩综合一区| 欧美日韩国产一中文字不卡| 欧美日韩一区二区三区在线观看免| 娇妻高潮浓精白浆xxⅹ| 国产精品亚洲视频在线观看| 久草福利在线观看| 蜜臀av免费一区二区三区| 一区二区三区四区视频精品免费| 天堂网在线观看| 免费看日韩av| 日韩一区在线播放| 亚洲第一综合天堂另类专| av亚洲产国偷v产偷v自拍| 亚洲综合成人av| 精品一二三四| 在线观看老湿视频福利| 日本美女一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 国产一区二区三区久久久久久久久| 91亚洲精品丁香在线观看| 3d动漫精品啪啪一区二区三区免费| 99精品久久| 欧美精品一区二区三区中文字幕| 日韩国产成人在线| www.五月婷婷.com| 亚洲一区二区三区日韩| 精品国产91乱码一区二区三区四区| 久久香蕉av| 51精品在线| wwwwxxxxx欧美| 唐人社导航福利精品| 水蜜桃一区二区三区| 久久在线电影| 精品久久久久久综合日本| 日本不卡高字幕在线2019| 欧洲国内综合视频| 久久中文字幕av| 成人春色在线观看免费网站| 欧美精品在线网站| 国产精品久久毛片av大全日韩| 欧美高清视频一区| 日韩美女在线观看| 国内毛片毛片毛片毛片| 伊人再见免费在线观看高清版| 国外av网站| 在线播放av更多| 一区二区三区视频在线播放| 日韩中文字幕欧美| 欧美xxx视频| 国模私拍视频在线播放| 五月婷婷综合网| 中文字幕欧美在线观看| 四虎国产精品免费| 日韩小视频在线观看| 亚洲成人精品视频| 少妇一级黄色片| 亚洲人成影院在线| 欧美成人基地| 狠狠色噜噜狠狠狠8888米奇| 好看的亚洲午夜视频在线| 亚洲视频精品一区| 97电影在线看视频| 欧美成人午夜激情视频| 玖玖精品视频| 国产精品亚洲第一| 91freevideo| 26uuu国产精品视频| 亚洲成人第一| 九九99久久| 91精品国产调教在线观看| 91成人福利在线| 中文字幕一区二区人妻在线不卡| 成人精品电影在线| 四虎永久在线精品| 韩国v欧美v日本v亚洲v| 日本女人性生活视频| 九九久久久久99精品| 久久中文字幕人妻| 曰皮视频在线播放免费的| 国产又粗又长又爽视频| 亚洲国产乱码最新视频| 久久久精品高清| 国产日产精品一区二区三区四区的观看方式| 亚洲风情亚aⅴ在线发布| 亚洲一级理论片| 国产女人免费看a级丨片| 亚洲理伦在线| 久久久91精品国产一区不卡| 欧美福利电影在线观看| 亚洲深夜福利| 欧美在线一二三| 国产娇喘精品一区二区三区图片| 欧美黄色录像| 麻豆一区二区99久久久久| 国产免费一区二区| 96av麻豆蜜桃一区二区| 四虎永久在线精品无码视频| 91在线资源| 久久不射热爱视频精品| 无套内谢的新婚少妇国语播放| 99在线欧洲视频| 国产成人高清激情视频在线观看| 欧美激情综合色综合啪啪| 3atv在线一区二区三区| 美女视频在线免费| 亚洲一区二区精品久久av| 欧美巨猛xxxx猛交黑人97人| www.国产| 99久久婷婷国产综合精品电影√| 国产在线视频精品一区| 亚洲精品乱码久久久久久不卡| 色欧美片视频在线观看| 一个人看的www视频免费观看| 91高清视频在线免费观看| 美日韩精品免费视频| 老色鬼在线视频| 福利视频网站一区二区三区| 欧洲激情视频| 国产综合第一页| 久久亚洲图片| 另类激情亚洲| 粉嫩一区二区三区四区公司1| 亚洲一区中文字幕| 精品无码人妻一区二区免费蜜桃| 久久一区二区三区av| a级影片在线| 亚洲精品99久久久久中文字幕| 操操操综合网| 中文字幕网av| 免费黄网站欧美| 牛牛精品在线视频| 日韩中文字幕亚洲精品欧美| 日韩亚洲欧美一区二区三区| wwwxxx黄色片| 91丨porny丨探花| 影视亚洲一区二区三区| 精品视频1区2区3区| 女同互添互慰av毛片观看| 欧美高清hd18日本| www国产成人| 91原创国产| 欧美视频第一| 四季av日韩精品一区| 人成网站在线观看| 亚洲男人的天堂在线观看| 老司机福利在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美人与性动交| 91超碰在线电影| 好色先生视频污| 精品av综合导航| 国内在线观看一区二区三区| 国产欧美日韩免费观看| 国产成人免费网站| 成人国产精品免费观看动漫| 欧美日韩中文字幕日韩欧美| 精品久久久久av| 免费国产自线拍一欧美视频| 特一级黄色大片| www插插插无码免费视频网站| 精品国产精品国产偷麻豆| 中文字幕在线视频网站| 亚洲免费高清视频| 成年网站在线免费观看| 8x8x视频在线| 水蜜桃久久夜色精品一区| 亚洲天堂久久新| 伦一区二区三区中文字幕v亚洲| 免费观看在线色综合| 欧美麻豆精品久久久久久| 亚洲精品电影在线观看| 日本女优一区| 亚洲午夜精品久久久中文影院av| 久久精品国产v日韩v亚洲| 欧美三级在线| 亚洲一级特黄毛片| 亚洲高清资源在线观看| 欧美高清视频手机在在线| 美国一级片在线观看| www.国产| 久久久久久a亚洲欧洲aⅴ| 色吊丝在线永久观看最新版本| 国产手机视频一区二区| 天天操,天天操| 日韩精品成人一区| 日韩中文字幕视频在线| 蜜桃久久影院| 亚洲成人日韩在线| 在线观看国产91| 国产亚洲欧洲997久久综合| 久久久久国产精品熟女影院| 四虎www4hu永久免费| 青娱乐国产精品视频| 性欧美极品xxxx欧美一区二区| 精品在线免费观看| 丰满少妇久久久久久久| 中文乱码免费一区二区| 久久久精品中文字幕| 男人搞女人网站| 国产精品入口芒果| 欧美xxxxxbbbbb| 亚洲v欧美v另类v综合v日韩v| 国语精品中文字幕| 欧洲免费av| 中文成人无字幕乱码精品区| 久久久久国产精品免费| 污污视频在线观看网站| 在线看片地址| mm131美女视频| 午夜精品视频在线观看| 欧美精品不卡| 放荡的美妇在线播放| 国产乱子伦精品无码码专区| 男人天堂av网| 午夜视频在线观看一区二区| 欧美成人中文| 147欧美人体大胆444| 国产免费a级片| 3d性欧美动漫精品xxxx软件| 成人激情av在线| 久久久999精品| 午夜在线播放| 欧美精品黑人猛交高潮| 亚洲日韩中文字幕一区| 久久天天做天天爱综合色| 国产成人毛毛毛片| 中文字幕色呦呦| 成年人网站在线| 97在线播放免费观看| 久久综合九色综合88i| 男人操女人免费| 欧美激情啪啪| 国产高清视频网站| 在线观看成年人网站| 国产日韩欧美一区二区东京热| 理论片鲁丝二区爱情网| zzjj国产精品一区二区| 成人av网在线| 日本黄色片一级片| 国产又粗又黄又爽视频| 久久午夜无码鲁丝片午夜精品| 欧美最猛性xxxxx(亚洲精品)| 免费不卡欧美自拍视频| 尤物国产精品| 欧美精品在线免费观看| www.久久久久久久| 亚洲男人的天堂一区二区| 久久伊人影院| 草草视频在线观看| 欧美久久久久久久久久久久| av激情网站| 亚洲精品久久久久国产| 国产成人精品一区二区三区| 亚洲精品午夜级久久久久| 中文字幕在线观看1| 日韩图片一区| 五月天婷婷激情视频| 国产1区2区在线观看| 免看一级a毛片一片成人不卡| 美女搡bbb又爽又猛又黄www| av日韩一区| 成人免费观看在线视频| 久久亚洲私人国产精品va| 久久青草国产手机看片福利盒子| 日韩欧美黄色网址|