为DataGrid自定义分页添加自定义导航和分页信息

类别:.NET开发 点击:0 评论:0 推荐:

DataGrid自定义分页添加自定义导航和分页信息

2004-10-29

         在上一篇文章中我讲到了对DataGrid实行自定义分页,这可以避免为了显示一页数据而获取整个数据记录集,从而提高分页效率,不过使用的导航还是DataGrid自带的数字连接或简单的上一页,下一页,而且看不到总页数、总记录数之类的信息。下面就为他增加我们所需要的部分。

         先来看看修改后的分页显示,截图如下:


(图一)

使用的数据源同上一篇文章(Asp.netDataGrid控件的自定义分页)相同,都是访问Northwind库,为了独立开来这里还是把存储过程列了一下,

CREATE PROCEDURE [GetCustomersDataPage]

         @PageIndex INT,

         @PageSize  INT,

         @RecordCount INT OUT,

         @PageCount INT OUT

AS

SELECT @RecordCount = COUNT(*)  FROM   Customers

SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)

DECLARE @SQLSTR NVARCHAR(1000)

IF @PageIndex = 0 OR @PageCount <= 1

         SET @SQLSTR =N'SELECT TOP '+STR( @PageSize )+

'  CustomerID, CompanyName,Address,Phone  FROM   Customers ORDER BY CustomerID DESC

ELSE IF     @PageIndex = @PageCount - 1            

         SET @SQLSTR =N' SELECT * FROM ( SELECT TOP '+STR( @RecordCount - @PageSize * @PageIndex )+

'  CustomerID, CompanyName,Address,Phone  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, CompanyName,Address,Phone  FROM   Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC'

 

EXEC (@SQLSTR)

GO

 

下面就就把代码贴了一下,

Aspx文件代码如下:

<%@ Page language="c#" Codebehind="DataGridCustomPaging.aspx.cs" AutoEventWireup="false" Inherits="ZZ.AspnetPaging.DataGridCustomPaging" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

         <HEAD>

                   <title>DataGridPaging</title>

                   <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">

                   <meta content="C#" name="CODE_LANGUAGE">

                   <meta content="JavaScript" name="vs_defaultClientScript">

                   <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

         </HEAD>

         <body>

                   <form id="Form1" method="post" runat="server">

                            <TABLE id="Table1" style="FONT-SIZE: 9pt" cellSpacing="1" cellPadding="1" width="450" align="center"

                                     border="1">

                                     <TR>

                                               <TD><asp:datagrid id="DataGrid1" runat="server" AllowPaging="True" AllowCustomPaging="True" Width="100%">

                                                                 <FooterStyle Font-Size="9pt"></FooterStyle>

                                                                 <HeaderStyle Font-Size="9pt"></HeaderStyle>

                                                                 <PagerStyle Visible="False" Font-Size="9pt" Mode="NumericPages"></PagerStyle>

                                                        </asp:datagrid></TD>

                                     </TR>

                                     <TR>

                                               <TD>

                                                        <TABLE id="Table2" style="FONT-SIZE: 9pt" cellSpacing="1" cellPadding="1" width="100%"

                                                                 align="center" border="1">

                                                                 <TR>

                                                                           <TD style="WIDTH: 150px"><asp:linkbutton id="LBtnFirst" runat="server" CommandName="First">首页</asp:linkbutton>&nbsp;

                                                                                    <asp:linkbutton id="LBtnPrev" runat="server" CommandName="Prev">上一页</asp:linkbutton>&nbsp;

                                                                                    <asp:linkbutton id="LBtnNext" runat="server" CommandName="Next">下一页</asp:linkbutton>&nbsp;

                                                                                    <asp:linkbutton id="LBtnLast" runat="server" CommandName="Last">尾页</asp:linkbutton></TD>

                                                                           <TD><asp:literal id="LtlPageIndex" runat="server"></asp:literal>&nbsp; <asp:literal id="LtlPageCount" runat="server"></asp:literal>&nbsp;

                                                                                    每页<asp:Literal id="LtlPageSize" runat="server"></asp:Literal>&nbsp; <asp:Literal id="LtlRecordCount" runat="server"></asp:Literal>&nbsp;

                                                                           </TD>

                                                                 </TR>

                                                        </TABLE>

                                               </TD>

                                     </TR>

                            </TABLE>

                   </form>

         </body>

</HTML>

 

Aspx.cs文件代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.Configuration;

 

namespace ZZ.AspnetPaging

{

     public class DataGridCustomPaging : System.Web.UI.Page

     {

         private int pageCount;

         private int recordCount;

 

         protected System.Web.UI.WebControls.LinkButton LBtnFirst;

         protected System.Web.UI.WebControls.LinkButton LBtnPrev;

         protected System.Web.UI.WebControls.LinkButton LBtnNext;

         protected System.Web.UI.WebControls.LinkButton LBtnLast;

         protected System.Web.UI.WebControls.Literal LtlPageIndex;

         protected System.Web.UI.WebControls.Literal LtlPageCount;

         protected System.Web.UI.WebControls.Literal LtlPageSize;

         protected System.Web.UI.WebControls.Literal LtlRecordCount;

         protected System.Web.UI.WebControls.DataGrid DataGrid1;

    

         private void Page_Load(object sender, System.EventArgs e)

         {

              if(!Page.IsPostBack)

              {

                   DataGridDataBind();

              }

         }

 

         //绑定数据

         private void DataGridDataBind()

         {

              DataSet ds = GetCustomersData(PageIndex,PageSize,ref recordCount,ref pageCount);

              this.DataGrid1.VirtualItemCount = RecordCount;

              this.DataGrid1.DataSource = ds;

              this.DataGrid1.DataBind();

              SetPagingState();

         }

 

         #region Web 窗体设计器生成的代码

         override protected void OnInit(EventArgs e)

         {

              InitializeComponent();

              base.OnInit(e);

         }

        

         private void InitializeComponent()

         {   

              this.LBtnFirst.Click += new System.EventHandler(this.LBtnNavigation_Click);

              this.LBtnPrev.Click += new System.EventHandler(this.LBtnNavigation_Click);

              this.LBtnNext.Click += new System.EventHandler(this.LBtnNavigation_Click);

              this.LBtnLast.Click += new System.EventHandler(this.LBtnNavigation_Click);

              this.Load += new System.EventHandler(this.Page_Load);

         }

         #endregion

 

         private static DataSet GetCustomersData(int pageIndex,int pageSize,ref int recordCount,ref int pageCount)

         {

              string connString = ConfigurationSettings.AppSettings["ConnString"];

              SqlConnection conn = new SqlConnection(connString);

              SqlCommand comm = new SqlCommand("GetCustomersDataPage",conn);

              comm.Parameters.Add(new SqlParameter("@PageIndex",SqlDbType.Int));

              comm.Parameters[0].Value = pageIndex;

              comm.Parameters.Add(new SqlParameter("@PageSize",SqlDbType.Int));

              comm.Parameters[1].Value = pageSize;

              comm.Parameters.Add(new SqlParameter("@RecordCount",SqlDbType.Int));

              comm.Parameters[2].Direction = ParameterDirection.Output;

              comm.Parameters.Add(new SqlParameter("@PageCount",SqlDbType.Int));

              comm.Parameters[3].Direction = ParameterDirection.Output;

              comm.CommandType = CommandType.StoredProcedure;

              SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);

              DataSet ds = new DataSet();

              dataAdapter.Fill(ds);

              recordCount = (int)comm.Parameters[2].Value;

              pageCount = (int)comm.Parameters[3].Value;

              return ds;

         }

 

         private void LBtnNavigation_Click(object sender, System.EventArgs e)

         {

              LinkButton btn = (LinkButton)sender;

              switch(btn.CommandName)

              {

                   case "First":

                       PageIndex = 0;

                       break;

                   case "Prev"://if( PageIndex > 0 )

                            PageIndex = PageIndex - 1;

                       break;

                   case "Next"://if( PageIndex < PageCount -1)

                            PageIndex = PageIndex + 1;

                       break;

                   case "Last":

                       PageIndex = PageCount - 1;

                       break;

              }

              DataGridDataBind();             

         }

 

         /// <summary>

         /// 控制导航按钮或数字的状态

         /// </summary>

         public void SetPagingState()

         {

              if( PageCount <= 1 )//( RecordCount <= PageSize )//小于等于一页

              {

                   this.LBtnFirst.Enabled = false;

                   this.LBtnPrev.Enabled = false;

                   this.LBtnNext.Enabled = false;

                   this.LBtnLast.Enabled = false;

              }

              else //有多页

              {

                   if( PageIndex == 0 )//当前为第一页

                   {

                       this.LBtnFirst.Enabled = false;

                       this.LBtnPrev.Enabled = false;

                       this.LBtnNext.Enabled = true;

                       this.LBtnLast.Enabled = true;                                   

                   }

                   else if( PageIndex == PageCount - 1 )//当前为最后页

                   {

                       this.LBtnFirst.Enabled = true;

                       this.LBtnPrev.Enabled = true;

                       this.LBtnNext.Enabled = false;

                       this.LBtnLast.Enabled = false;                                  

                   }

                   else //中间页

                   {

                       this.LBtnFirst.Enabled = true;

                       this.LBtnPrev.Enabled = true;

                       this.LBtnNext.Enabled = true;

                       this.LBtnLast.Enabled = true;

                   }

              }

        

              this.LtlPageSize.Text = PageSize.ToString();

              this.LtlRecordCount.Text = RecordCount.ToString();

              if(RecordCount == 0)

              {

                   this.LtlPageCount.Text = "0";

                   this.LtlPageIndex.Text = "0";

              }   

              else

              {

                   this.LtlPageCount.Text = PageCount.ToString();

                   this.LtlPageIndex.Text = (PageIndex + 1).ToString();

              }

         }

 

        

         public int PageCount

         {

              get

              {

                   return this.DataGrid1.PageCount;

              }   

         }

 

         public int PageSize

         {

              get

              {

                   return this.DataGrid1.PageSize;

              }            

         }

 

         public int PageIndex

         {

              get

              {

                   return this.DataGrid1.CurrentPageIndex;

              }

              set

              {

                   this.DataGrid1.CurrentPageIndex = value;

              }

         }

 

         public int RecordCount

         {

              get

              {

                   return recordCount;

              }            

         }

     }

}

 

上面的代码比较简单,也就不用分析了,如果有什么好的建议或有问题可以在Blog上留言,很高兴同大家交流。

本文地址:http://com.8s8s.com/it/it43154.htm