1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          repeater分頁(ASP.NET 2.0中怎么使用DataList和Repeater實現數據分頁)

          來源:互聯網轉載 時間:2024-05-07 01:21:51

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

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

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


          圖 1: 創建頁

            然后打開Default.aspx頁,從UserControls文件夾里拖一個SectionLevelTutorialListing.ascx用戶控件進來。這個用戶控件我們已經用了很多次了。見母板頁和站點導航 。


          圖 2: 添加用戶控件

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

          <siteMapNodeurl="~/PagingSortingDataListRepeater/Default.aspx"title="PagingandSortingwiththeDataListandRepeater"description="PagingandSortingtheDataintheDataListandRepeaterControls"><siteMapNodeurl="~/PagingSortingDataListRepeater/Paging.aspx"title="Paging"description="LearnhowtopagethroughthedatashownintheDataListandRepeatercontrols."/><siteMapNodeurl="~/PagingSortingDataListRepeater/Sorting.aspx"title="Sorting"description="SortthedatadisplayedinaDataListorRepeatercontrol."/><siteMapNodeurl="~/PagingSortingDataListRepeater/SortingWithDefaultPaging.aspx"title="SortingwithDefaultPaging"description="CreateaDataListorRepeatercontrolthatispagedusingdefaultpagingandcanbesorted."/><siteMapNodeurl="~/PagingSortingDataListRepeater/SortingWithCustomPaging.aspx"title="SortingwithCustomPaging"description="LearnhowtosortthedatadisplayedinaDataListorRepeatercontrolthatusescustompaging."/></siteMapNode>


          圖 3: 更新 Site Map

          回顧一下分頁

            在前面我們學習了如何使用GridView, DetailsView, FormView 來分頁。這三個控件都提供了一種稱為默認分頁的功能,僅僅只需要從智能標簽里勾上“Enable Paging”(開啟分頁)即可。在使用默認分頁時,每次請求數據 – 無論是第一頁還是其它頁–GridView, DetailsView, 和FormView 都會重新請求所有的數據。然后根據請求的頁索引和每頁顯示的記錄數來顯示特定頁的數據,而忽略其它數據(即雖然被請求但未顯示的數據)。我們在分頁和排序報表數據 里已經詳細的討論過默認分頁了。

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

            自定義分頁使用每次只返回請求的數據,從而解決了默認分頁的性能問題。當使用自定義分頁時,我們需要寫有效的返回正確的記錄的SQL語句。我們在里學習了用SQL Server2005的ROW_NUMBER() keyword 來創建這樣的語句。

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


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

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

            PagedDataSource對象也有支持自定義分頁的屬性。但是在這里我們將不討論它,因為我們在ProductsBLL類里已經有一個可以精確的返回需要顯示的記錄的方法。本章我們將學習如何通過在ProductsBLL類里添加一個返回合適的PagedDataSource對象的方法來實現默認分頁。下章我們再討論自定義分頁。

          第二步: 在BLL里添加默認的分頁方法

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

          在ProductsBLL里添加一個帶兩個整型參數的方法,名為GetProductsAsPagedDataSource:

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

            GetProductsAsPagedDataSource首先從GetProducts()里獲取所有的記錄。然后創建一個PagedDataSource對象,將CurrentPageIndex和PageSize屬性設置為傳進來的參數,pageIndex和pageSize。方法的最后返回這個配置過的PagedDataSource。

          [System.componentmodel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.select,false)]publicPagedDataSourceGetProductsAsPagedDataSource(intpageIndex,intpageSize){//GetALLoftheproductsNorthwind.ProductsDataTableproducts=GetProducts();//LimittheresultsthroughaPagedDataSourcePagedDataSourcepagedData=newPagedDataSource();pagedData.DataSource=products.Rows;pagedData.AllowPaging=true;pagedData.CurrentPageIndex=pageIndex;pagedData.PageSize=pageSize;returnpagedData;}

          第三步: 在DataList里使用默認分頁顯示Product

            完成GetProductsAsPagedDataSource方法后,我們現在來創建一個提供默認分頁的DataList或Repeater。打開PagingSortingDataListRepeater文件夾下的Paging.aspx頁,拖一個DataList進來,將ID設為ProductsDefaultPaging。通過智能標簽創建一個名為ProductsDefaultPagingDataSource的ObjectDataSource并用GetProductsAsPagedDataSource方法配置它。


          圖 5: 創建并配置ObjectDataSource

          在update, insert, delete 標簽的下拉列表里都選擇“(None)”.


          圖 6: 在update, insert, delete 標簽的下拉里選擇“(None)”

            因為GetProductsAsPagedDataSource方法需要兩個參數,因此向導會提示我們選擇參數源。page index和page size的值必須在postback過程中記下來。它們可以存在view state,querystring,session里或用其它技術來記錄。本章我們使用querystring。

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


          圖 7: 配置參數

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

          <asp:DataListID="ProductsDefaultPaging"runat="server"Width="100%"DataKeyField="ProductID"DataSourceID="ProductsDefaultPagingDataSource"RepeatColumns="2"enableviewstate="False"><ItemTemplate><h5><asp:LabelID="ProductNameLabel"runat="server"Text='<%#eval("ProductName")%>'></asp:Label></h5>Category:<asp:LabelID="CategoryNameLabel"runat="server"Text='<%#eval("CategoryName")%>'></asp:Label><br/>Supplier:<asp:LabelID="SupplierNameLabel"runat="server"Text='<%#eval("SupplierName")%>'></asp:Label><br/><br/><br/></ItemTemplate><ItemStyleWidth="50%"/></asp:DataList><asp:ObjectDataSourceID="ProductsDefaultPagingDataSource"runat="server"OldValuesParameterFormatString="original_{0}"TypeName="ProductsBLL"SelectMethod="GetProductsAsPagedDataSource"><SelectParameters><asp:QueryStringParameterDefaultValue="0"Name="pageIndex"QueryStringField="pageIndex"Type="Int32"/><asp:QueryStringParameterDefaultValue="4"Name="pageSize"QueryStringField="pageSize"Type="Int32"/></SelectParameters></asp:ObjectDataSource>

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

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


          圖 8: 顯示4條Product

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


          圖 9: 顯示第二頁數據

          第四步: 創建分頁界面

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

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

            對DataList 和Repeater而言,我們需要決定它的分頁界面并實現它。這其中包含了需要創建web控件和當特定頁的button被點時顯示請求的頁。另外某些分頁界面的控件可能需要禁用。例如,當使用Next, Previous, First, Last這個模式來顯示時,如果瀏覽第一頁數據,那么第一頁和前一頁的button應該被禁用。

            本章我們使用 Next, Previous, First, Last界面。添加4個button,并將ID分別設為FirstPage,PrevPage,NextPage和LastPage。將Text設為“<< First”, “< Prev”, “Next >”, “Last >>”.

          <asp:Buttonrunat="server"ID="FirstPage"Text="<<First"/><asp:Buttonrunat="server"ID="PrevPage"Text="<Prev"/><asp:Buttonrunat="server"ID="NextPage"Text="Next>"/><asp:Buttonrunat="server"ID="LastPage"Text="Last>>"/>

          然后為每個button創建一個Click事件處理。呆會我們將添加代碼來顯示請求的頁。

          記下分頁的總記錄數

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

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

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

            如果分頁界面包含Last button(最后一頁),我們需要在postback過程中記下分頁的總記錄數,這樣在點Last button的時候我們可以獲得最后一頁的索引。為了方便實現這個,我們在ASP.NET頁的后臺代碼里創建一個TotalRowCount屬性來將這個值保存到view state里。

          privateintTotalRowCount{get{objecto=ViewState["TotalRowCount"];if(o==null)return-1;elsereturn(int)o;}set{ViewState["TotalRowCount"]=value;}}

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

          privateintPageIndex{get{if(!string.IsNullOrEmpty(Request.QueryString["pageIndex"]))returnConvert.ToInt32(Request.QueryString["pageIndex"]);elsereturn0;}}privateintPageSize{get{if(!string.IsNullOrEmpty(Request.QueryString["pageSize"]))returnConvert.ToInt32(Request.QueryString["pageSize"]);elsereturn4;}}privateintPageCount{get{if(TotalRowCount<=0||PageSize<=0)return1;elsereturn((TotalRowCount+PageSize)-1)/PageSize;}}

          獲取分頁的總記錄數

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

            我們為ObjectDataSource的Selectd事件創建一個event handler來完成這些。在Selectd的event handler里我們獲取ObjectDataSource的select()方法的返回值–在這種情況下是PagedDataSource。

          protectedvoidProductsDefaultPagingDataSource_Selected(objectsender,ObjectDataSourceStatusEventArgse){//ReferencethePagedDataSourceboundtotheDataListPagedDataSourcepagedData=(PagedDataSource)e.ReturnValue;//Rememberthetotalnumberofrecordsbeingpagedthrough//acrosspostbacksTotalRowCount=pagedData.DataSourceCount;}

          顯示請求的頁的數據

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

            創建一個RedirectUser(sendUserToPageIndex)方法來重定向用戶到Paging.aspx?pageIndex=sendUserToPageIndex。然后在四個按鈕的Click事件處理里調用這個方法。在FirstPageClick里調用RedirectUser(0),在PrevPageClick里調用RedirectUser(PageIndex-1)。

          protectedvoidFirstPage_Click(objectsender,EventArgse){//SendtheusertothefirstpageRedirectUser(0);}protectedvoidPrevPage_Click(objectsender,EventArgse){//SendtheusertothepreviouspageRedirectUser(PageIndex-1);}protectedvoidNextPage_Click(objectsender,EventArgse){//SendtheusertothenextpageRedirectUser(PageIndex+1);}protectedvoidLastPage_Click(objectsender,EventArgse){//SendtheusertothelastpageRedirectUser(PageCount-1);}privatevoidRedirectUser(intsendUserToPageIndex){//SendtheusertotherequestedpageResponse.Redirect(string.Format("Paging.aspx?pageIndex={0}&pageSize={1}",sendUserToPageIndex,PageSize));}

            完成Click事件處理后,DataList的記錄現在可以通過button來分頁了,你可以測試一下。

          禁用分頁控件

            現在無論瀏覽哪頁四個按鈕都是可用的。然而我們在瀏覽第一頁時需要禁用 First 和Previous buttons ,在瀏覽最后一頁時需要禁用Next 和Last buttons。通過ObjectDataSource的select()方法返回的PagedDataSource對象有幾個屬性– IsFirstPage 和 IsLastPage –通過它們可以判斷用戶瀏覽的是否是第一或最后一頁數據。添加下面的代碼到ObjectDataSource的Selected事件處理里:

          //ConfigurethepaginginterfacebasedonthedatainthePagedDataSourceFirstPage.Enabled=!pagedData.IsFirstPage;PrevPage.Enabled=!pagedData.IsFirstPage;NextPage.Enabled=!pagedData.IsLastPage;LastPage.Enabled=!pagedData.IsLastPage;

            添加完后,當瀏覽第一頁時,First 和Previous buttons 將被禁用。當瀏覽最后一頁時,Next 和 Last buttons 將被禁用。

            我們最后來實現在分頁界面里通知用戶他們當前是瀏覽的哪頁和一共有多少頁。添加一個Label控件并將ID設為CurrentPageNumber。在ObjectDataSource的Selected事件處理中設置它的Text屬性,讓它顯示當前瀏覽的頁(PageIndex+1)和總頁數(PageCount)。

          //Displaythecurrentpagebeingviewed...CurrentPageNumber.Text=string.Format("Youareviewingpage{0}of{1}...",PageIndex+1,PageCount);

            圖10是第一次瀏覽Paging.aspx頁的樣子。由于querystring是空的,因此DataList默認顯示最開始的4條product。First 和Previous buttons 被禁用。點Next 會顯示下面的4條記錄(見圖11),而First 和Previous buttons 同時被啟用了。


          圖 10: 第一頁數據


          圖 11: 第二頁數據

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

          使用自定義分頁

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

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

          關于ASP.NET 2.0中怎么使用DataList和Repeater實現數據分頁問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注本站行業資訊頻道了解更多相關知識。

          標簽:repeater分頁-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          越南盾和人民幣的換算是多少?(2023年6月8日)今日越南盾對人民幣的匯率為:0.0003今日人民幣對越南盾的匯率為:3287.09487根據今日匯率:1越南盾、2越南盾、5越南盾、10越南盾、20越南盾、50越南盾、100越南盾,分別折合人民幣0.0003、0.0006、0.0015、0.003、0.006、0.015、0.03人民幣。2023年6月8日英鎊人民幣中間價8.8668,瑞士法郎人民...

          標準普爾,也就是大家俗稱的標普,是一家世界權威金融分析機構,總部在美國紐約。標普專為全球資本市場提供獨立信用評級、指數服務、風險評估、投資研究和數據服務??梢哉f,標普是全球金融基礎建構的重要一員,在業內一向處于領先地位。標普評級有十個級別,分別是AAA級、AA級、A級、BBB級、 BB級、 B級、CCC級、CC級、C級和D級。標準普爾公司對于各種上市公司的股票進行信用等級劃分,主要是從最高到最低排...

          招行朝朝寶和朝朝盈有啥區別?1.發售機構不一樣。朝朝寶是招商銀行代銷招銀理財公司的理財產品;朝朝盈是招商銀行自營的理財產品。2.投資標的不一樣。朝朝寶對接5只理財產品;朝朝盈對接1支基金。3.資金贖回到賬時間不一樣。朝朝寶快速贖回(限額5萬)實時到賬,朝朝盈普通贖回T+1日到賬,快速贖回立即到賬(限額1萬)。4.資金可消費性不一樣。朝朝寶的資金不贖回可直接使用;朝朝盈的資金不能直接消費,需贖回方可...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>