分頁是Web應用程序中最常用到的功能之一,在asp.net中,雖然自帶了一些可以分頁的數(shù)據(jù)控件,但其分頁功能并不盡如人意。本文對于這些數(shù)據(jù)控件的假分頁暫且不表,如有不明白的同學請百Google度之。
本文中實現(xiàn)的分頁控件是在手動分頁基礎(chǔ)上做的改善,將分頁實現(xiàn)的邏輯部分和數(shù)據(jù)控件的綁定盡可能分開,以克服手工編寫分頁代碼任務繁瑣、代碼重用率低等問題。
本文依舊是一粒粟子。
本文中將介紹兩種將分頁實現(xiàn)邏輯與數(shù)據(jù)控件綁定分離的實現(xiàn)方式:
PagingHelper.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PagingHelper.ascx.cs" Inherits="PagingHelper.Controls.PagingHelper" %>
<div style="width:100%">
<asp:LinkButton ID="lbtnFirstPage" runat="server" CausesValidation="false" onclick="lbtnPage_Click" >首頁</asp:LinkButton>
<asp:LinkButton ID="lbtn 第<asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label>頁/共<asp:Label ID="lbTotalPages" runat="server" Text=""></asp:Label>頁 <asp:LinkButton ID="lbtnNextPage" runat="server" CausesValidation="false" onclick="lbtnPage_Click" >下一頁</asp:LinkButton><asp:LinkButton ID="lbtnLastPage" runat="server" CausesValidation="false" onclick="lbtnPage_Click" >尾頁</asp:LinkButton></div>PagingHelper.ascx.cs:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Reflection;namespace PagingHelper.Controls{public partial class PagingHelper : System.Web.UI.UserControl{#region 屬性private int m_PageSize;public int PageSize //每頁顯示記錄數(shù){set{m_PageSize = value;}get{if (m_PageSize.Equals(0)){m_PageSize = 10;}return m_PageSize;}}private int m_PageIndex;public int PageIndex //當前頁頁碼{set{m_PageIndex = value;}get{if (m_PageIndex.Equals(0)){m_PageIndex = 1;}return m_PageIndex;}}public int TotalItemCount //記錄總數(shù){set;private get;}public string BindDataMethodName //綁定數(shù)據(jù)的方法名{set;private get;}#endregion#region 受保護的方法protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BindPagingHelperControl();}}protected void lbtnPage_Click(object sender, EventArgs e){LinkButton lbtn = sender as LinkButton;ReBindData(lbtn.CommandArgument);}#endregion#region 公共方法#endregion#region 私有方法private void BindPagingHelperControl(){int totalPages = (TotalItemCount % PageSize) == 0 ? TotalItemCount / PageSize : TotalItemCount / PageSize + 1;//顯示lbPageIndex.Text = PageIndex.ToString();lbTotalPages.Text = totalPages.ToString();//使能lbtnFirstPage.Enabled = PageIndex > 1;lbtnPrevPage.Enabled = PageIndex > 1;lbtnLastPage.Enabled = PageIndex < totalPages;lbtnNextPage.Enabled = PageIndex < totalPages;//命令lbtnFirstPage.CommandArgument = "1";lbtnPrevPage.CommandArgument = (PageIndex - 1).ToString();lbtnNextPage.CommandArgument = (PageIndex + 1).ToString();lbtnLastPage.CommandArgument = totalPages.ToString();}private void ReBindData(string pageIndex){PageIndex = int.Parse(pageIndex);Object obj = null; //空間所在的容器if (base.Parent is HtmlForm){obj = this.Page;}else if (base.Parent is ContentPlaceHolder){obj = this.Page.Master.Page;}else{obj = base.Parent;}MethodInfo methodInfo = obj.GetType().GetMethod(BindDataMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);methodInfo.Invoke(obj, null);BindPagingHelperControl();}#endregion}}Demo:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="PagingHelper.Default" %><%@ Register src="Controls/PagingHelper.ascx" tagname="PagingHelper" tagprefix="uc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title></title></head><body><form id="form1" runat="server"><div><asp:GridView ID="gvDemo" runat="server"></asp:GridView><br /><uc1:PagingHelper ID="PagingHelper1" runat="server" PageSize="2" /></div></form></body></html>Default.aspx.cs:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;namespace PagingHelper{public partial class Default : System.Web.
新聞熱點
疑難解答