在上一篇文章中我講到了對DataGrid實行自定義分頁
這可以避免為了顯示一頁數據而獲取整個數據記錄集
從而提高分頁效率
不過使用的導航還是DataGrid自帶的數字連接或簡單的上一頁
下一頁
而且看不到總頁數
總記錄數之類的信息
下面就為他增加我們所需要的部分
先來看看修改後的分頁顯示截圖如下
(圖一)
使用的數據源同上一篇文章(中DataGrid控件的自定義分頁)相同都是訪問Northwind庫為了獨立開來這裡還是把存儲過程列了一下
CREATE PROCEDURE [GetCustomersDataPage]
@PageIndex INT
@PageSize INT
@RecordCount INT OUT
@PageCount INT OUT
AS
SELECT @RecordCount = COUNT(*) FROM Customers
SET @PageCount = CEILING(@RecordCount * / @PageSize)
DECLARE @SQLSTR NVARCHAR()
IF @PageIndex = OR @PageCount <=
SET @SQLSTR =NSELECT TOP +STR( @PageSize )+
CustomerID CompanyNameAddressPhone FROM Customers ORDER BY CustomerID DESC
ELSE IF @PageIndex = @PageCount
SET @SQLSTR =N SELECT * FROM ( SELECT TOP +STR( @RecordCount @PageSize * @PageIndex )+
CustomerID CompanyNameAddressPhone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC
ELSE
SET @SQLSTR =N SELECT TOP +STR( @PageSize )+ * FROM ( SELECT TOP +STR( @RecordCount @PageSize * @PageIndex )+
CustomerID CompanyNameAddressPhone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC
EXEC (@SQLSTR)
GO
下面就就把代碼貼了一下
Aspx文件代碼如下
<%@ Page language=c# Codebehind=DataGridCustomPagingaspxcs AutoEventWireup=false Inherits=ZZAspnetPagingDataGridCustomPaging %>
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN >
<HTML>
<HEAD>
<title>DataGridPaging</title>
<meta content=Microsoft Visual Studio NET name=GENERATOR>
<meta content=C# name=CODE_LANGUAGE>
<meta content=JavaScript name=vs_defaultClientScript>
<meta content= name=vs_targetSchema>
</HEAD>
<body>
<form id=Form method=post runat=server>
<TABLE id=Table NumberType= Negative=False HasSpace=False SourceValue= UnitName=pt w:st=on>pt:chmetcnv> cellSpacing= cellPadding= width= align=center
border=>
<TR>
<TD><asp:datagrid id=DataGrid runat=server AllowPaging=True AllowCustomPaging=True Width=%>
<FooterStyle FontSize=:chmetcnv TCSC= NumberType= Negative=False HasSpace=False SourceValue= UnitName=pt w:st=on>pt:chmetcnv>></FooterStyle>
<HeaderStyle FontSize=:chmetcnv TCSC= NumberType= Negative=False HasSpace=False SourceValue= UnitName=pt w:st=on>pt:chmetcnv>></HeaderStyle>
<PagerStyle Visible=False FontSize=:chmetcnv TCSC= NumberType= Negative=False HasSpace=False SourceValue= UnitName=pt w:st=on>pt:chmetcnv> Mode=NumericPages></PagerStyle>
</asp:datagrid></TD>
</TR>
<TR>
<TD>
<TABLE id=Table NumberType= Negative=False HasSpace=False SourceValue= UnitName=pt w:st=on>pt:chmetcnv> cellSpacing= cellPadding= width=%
align=center border=>
<TR>
<TD ><asp:linkbutton id=LBtnFirst runat=server CommandName=First>首頁</asp:linkbutton>
<asp:linkbutton id=LBtnPrev runat=server CommandName=Prev>上一頁</asp:linkbutton>
<asp:linkbutton id=LBtnNext runat=server CommandName=Next>下一頁</asp:linkbutton>
<asp:linkbutton id=LBtnLast runat=server CommandName=Last>尾頁</asp:linkbutton></TD>
<TD>第<asp:literal id=LtlPageIndex runat=server></asp:literal>頁 共<asp:literal id=LtlPageCount runat=server></asp:literal>頁
每頁<asp:Literal id=LtlPageSize runat=server></asp:Literal>條 共<asp:Literal id=LtlRecordCount runat=server></asp:Literal>條
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
Aspxcs文件代碼如下
using System;
using SystemCollections;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemWeb;
using SystemWebSessionState;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebUIHtmlControls;
using SystemDataSqlClient;
using SystemConfiguration;
namespace ZZAspnetPaging
{
public class DataGridCustomPaging : SystemWebUIPage
{
private int pageCount;
private int recordCount;
protected SystemWebUIWebControlsLinkButton LBtnFirst;
protected SystemWebUIWebControlsLinkButton LBtnPrev;
protected SystemWebUIWebControlsLinkButton LBtnNext;
protected SystemWebUIWebControlsLinkButton LBtnLast;
protected SystemWebUIWebControlsLiteral LtlPageIndex;
protected SystemWebUIWebControlsLiteral LtlPageCount;
protected SystemWebUIWebControlsLiteral LtlPageSize;
protected SystemWebUIWebControlsLiteral LtlRecordCount;
protected SystemWebUIWebControlsDataGrid DataGrid;
private void Page_Load(object sender SystemEventArgs e)
{
if(!PageIsPostBack)
{
DataGridDataBind();
}
}
//綁定數據
private void DataGridDataBind()
{
DataSet ds = GetCustomersData(PageIndexPageSizeref recordCountref pageCount);
thisDataGridVirtualItemCount = RecordCount;
thisDataGridDataSource = ds;
thisDataGridDataBind();
SetPagingState();
}
#region Web 窗體設計器生成的代碼
override protected void OnInit(EventArgs e)
{
InitializeComponent();
baseOnInit(e);
}
private void InitializeComponent()
{
thisLBtnFirstClick += new SystemEventHandler(thisLBtnNavigation_Click);
thisLBtnPrevClick += new SystemEventHandler(thisLBtnNavigation_Click);
thisLBtnNextClick += new SystemEventHandler(thisLBtnNavigation_Click);
thisLBtnLastClick += new SystemEventHandler(thisLBtnNavigation_Click);
thisLoad += new SystemEventHandler(thisPage_Load);
}
#endregion
private static DataSet GetCustomersData(int pageIndexint pageSizeref int recordCountref int pageCount)
{
string connString = ConfigurationSettingsAppSettings[ConnString];
SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand(GetCustomersDataPageconn);
commParametersAdd(new SqlParameter(@PageIndexSqlDbTypeInt));
commParameters[]Value = pageIndex;
commParametersAdd(new SqlParameter(@PageSizeSqlDbTypeInt));
commParameters[]Value = pageSize;
commParametersAdd(new SqlParameter(@RecordCountSqlDbTypeInt));
commParameters[]Direction = ParameterDirectionOutput;
commParametersAdd(new SqlParameter(@PageCountSqlDbTypeInt));
commParameters[]Direction = ParameterDirectionOutput;
commCommandType = CommandTypeStoredProcedure;
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapterFill(ds);
recordCount = (int)commParameters[]Value;
pageCount = (int)commParameters[]Value;
return ds;
}
private void LBtnNavigation_Click(object sender SystemEventArgs e)
{
LinkButton btn = (LinkButton)sender;
switch(btnCommandName)
{
case First:
PageIndex = ;
break;
case Prev://if( PageIndex > )
PageIndex = PageIndex ;
break;
case Next://if( PageIndex < PageCount )
PageIndex = PageIndex + ;
break;
case Last:
PageIndex = PageCount ;
break;
}
DataGridDataBind();
}
/// <summary>
/// 控制導航按鈕或數字的狀態
/// </summary>
public void SetPagingState()
{
if( PageCount <= )//( RecordCount <= PageSize )//小於等於一頁
{
thisLBtnFirstEnabled = false;
thisLBtnPrevEnabled = false;
thisLBtnNextEnabled = false;
thisLBtnLastEnabled = false;
}
else //有多頁
{
if( PageIndex == )//當前為第一頁
{
thisLBtnFirstEnabled = false;
thisLBtnPrevEnabled = false;
thisLBtnNextEnabled = true;
thisLBtnLastEnabled = true;
}
else if( PageIndex == PageCount )//當前為最後頁
{
thisLBtnFirstEnabled = true;
thisLBtnPrevEnabled = true;
thisLBtnNextEnabled = false;
thisLBtnLastEnabled = false;
}
else //中間頁
{
thisLBtnFirstEnabled = true;
thisLBtnPrevEnabled = true;
thisLBtnNextEnabled = true;
thisLBtnLastEnabled = true;
}
}
thisLtlPageSizeText = PageSizeToString();
thisLtlRecordCountText = RecordCountToString();
if(RecordCount == )
{
thisLtlPageCountText = ;
thisLtlPageIndexText = ;
}
else
{
thisLtlPageCountText = PageCountToString();
thisLtlPageIndexText = (PageIndex + )ToString();
}
}
public int PageCount
{
get
{
return thisDataGridPageCount;
}
}
public int PageSize
{
get
{
return thisDataGridPageSize;
}
}
public int PageIndex
{
get
{
return thisDataGridCurrentPageIndex;
}
set
{
thisDataGridCurrentPageIndex = value;
}
}
public int RecordCount
{
get
{
return recordCount;
}
}
}
}
From:http://tw.wingwit.com/Article/program/net/201311/12572.html