真假分頁
分頁是Web應用程式中最常用到的功能之一。當從資料庫中擷取的記錄遠遠超過界面承載能力的時候,使用分頁可以使我們的界面更加美觀,更加的使用者友好。分頁包括兩種類型:真分頁和假分頁。 其中假分頁就是從資料庫中擷取全部的想要檢索的記錄數,然後再顯示給使用者;而真分頁則是根據頁面的情況,檢索特定頁面要求内的記錄。當然如果資料庫中記錄較少的話,真假分頁的效果是不明顯的;但是當資料庫中記錄遠遠超過我們所能了解的範圍後,用假分頁進行顯示資料,則會造成時間和空間上的問題,系統的可通路性大打折扣;相對而言,使用真分頁,檢索特定頁面要求的記錄數目,則大大提高了系統的效率和可通路性;
AspNetPager控件
牛腩老師給我們提供了一種實作記錄真分頁的思路,在視訊中并沒有具體的代碼實作。而我現在就和大家來共同學習一下牛腩老師的真分頁功能;首先:下載下傳AspNetPager控件(點選下載下傳),下載下傳好之後至于具體的如何引用DLL控件,如何添加控件到工具箱,這裡就不贅述了,以前的VB學習已經涉及到過,實在不知道的可以百度哈~~~該控件幾個重要的屬性:
alwaysshow:總是顯示分頁控件;
PageSize:指定每頁顯示的記錄數;
custominfosectionwidth:使用者自定義資訊區的寬度;
custominfotextalign:使用者自定義資訊區的對齊方式;
firstpagetext:第一頁按鈕上顯示的文本;
horizontalalign:内容水準對齊方式;
lastpagetext:最後頁按鈕上顯示的文本;
navigationbuttontype:第一頁、下一頁、最後一頁按鈕的類型;
nextpagetext:下一頁按鈕上顯示的文本;
pageindexboxtype:訓示頁索引框的顯示類型:有TextBOX和dropdownlist兩種;
pagingbuttonspacing:導航頁按鈕的間距;
prevpagetext:上一頁按鈕的顯示的文本;
showcustominfosection:顯示目前頁和總頁資訊,預設為不顯示,值為LEFT時将顯示在頁索引前,為right時顯示在頁索引後;
showpageindexbox:指定頁索引文本框或下拉框的顯示方式;
textafterpageindexbox:指定頁索引文本框或下拉框後的文本;
UrlPaging:是夠使用URL傳遞分頁的方式來分頁;
textbeforepageindexbox:指定頁索引文本框或下拉框前面顯示的文本;
width:該控件的寬度;
CustomInfoHTML:指定要顯示在使用者自定義資訊區的使用者自定義HTML資訊文本
當我們添加引用完畢,并添加控件到工具箱後,在界面拖入AspNetPager控件,然後看代碼實作:
代碼實作:
SQL存儲過程:
USE [newssystem]
GO
/****** Object: StoredProcedure [dbo].[SelectPage] Script Date: 08/24/2013 12:31:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SelectPage]
@startIndex integer,
@endIndex integer
AS
BEGIN
SET NOCOUNT ON;
with temptbl as ( SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号, *from news )
SELECT * FROM temptbl where 行号 between @startIndex and @endIndex
END
GO
D層執行存儲過程
<pre name="code" class="csharp">#region 新聞分頁 /// <summary>
/// 根據頁數來實作新聞分頁
/// </summary>
/// <param name="startIndex">開始值</param>
/// <param name="endIndex">結束值</param>
/// <returns>datatable</returns>
public DataTable SelectPage(int startIndex, int endIndex)
{
DataTable dt = new DataTable();
string cmdText = "SelectPage";
SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@startIndex", startIndex ),
new SqlParameter("@endIndex", endIndex)
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
#endregion
B層分頁邏輯:
#region 新聞分頁
/// <summary>
/// 新聞分頁
/// </summary>
/// <param name="startIndex">記錄開始值</param>
/// <param name="endIndex">記錄結束值</param>
/// <returns></returns>
public DataTable SelectPage(int startIndex, int endIndex)
{
return ndao.SelectPage(startIndex, endIndex);
}
#endregion
Web層實作:
protected void Page_Load(object sender, EventArgs e)
{
AspNetPager1.RecordCount = new NewsManager().SelectAll().Rows.Count;
int startIndex = AspNetPager1.StartRecordIndex;
int endIndex = AspNetPager1.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectPage(startIndex, endIndex);
repNews.DataBind();
}
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
int startIndex = AspNetPager1.StartRecordIndex;
int endIndex = AspNetPager1.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectPage(startIndex, endIndex);
repNews.DataBind();
}