在項目中,遇到一個分頁問題,原理很簡單,但是,為了達到複用,将分頁的控件和方法封裝到使用者控件中,這樣就可以将分頁的控件、代碼與UI層分離。
以達到代碼的複用好封裝。代碼清單如下:
GridViewPager.ascx前台:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GridViewPager.ascx.cs" Inherits="Common_GridViewPager" %>
<div style="text-align:center; width:100%;">
<asp:LinkButton ID="lnkbtnFrist" runat="server" OnClick="lnkbtnFrist_Click">首頁</asp:LinkButton>
<asp:LinkButton ID="lnkbtnPre" runat="server" OnClick="lnkbtnPre_Click">上一頁</asp:LinkButton>
<asp:Label ID="lblCurrentPage" runat="server"></asp:Label>
<asp:LinkButton ID="lnkbtnNext" runat="server" OnClick="lnkbtnNext_Click">下一頁</asp:LinkButton>
<asp:LinkButton ID="lnkbtnLast" runat="server" OnClick="lnkbtnLast_Click">尾頁</asp:LinkButton>
跳轉到第
<asp:DropDownList ID="ddlCurrentPage" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
</div>
GridViewPager.ascx背景:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Common_GridViewPager : System.Web.UI.UserControl
{
//屬性
private GridView _MyGv;
//要分頁的GridView
public GridView MyGv
get
return _MyGv;
}
set
_MyGv = value;
protected void Page_Load(object sender, EventArgs e)
if(!IsPostBack)
BindGvData();
#region 分頁操作部分的代碼
//綁定GridView資料
private void BindGvData()
this.MyGv.DataBind();
BindPagerDDL();
SetPagerEnable();
this.lblCurrentPage.Text = string.Format("目前第{0}頁/總共{1}頁", this.MyGv.PageIndex + 1, this.MyGv.PageCount);
//綁定選擇頁下拉菜單
private void BindPagerDDL()
this.ddlCurrentPage.Items.Clear();
for (int i = 1; i <= this.MyGv.PageCount; i++)
this.ddlCurrentPage.Items.Add(i.ToString());
this.ddlCurrentPage.SelectedIndex = this.MyGv.PageIndex;
//頁碼下拉清單
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
this.MyGv.PageIndex = this.ddlCurrentPage.SelectedIndex;
//首頁
protected void lnkbtnFrist_Click(object sender, EventArgs e)
this.MyGv.PageIndex = 0;
//上一頁
protected void lnkbtnPre_Click(object sender, EventArgs e)
if (this.MyGv.PageIndex > 0)
this.MyGv.PageIndex = this.MyGv.PageIndex - 1;
//下一頁
protected void lnkbtnNext_Click(object sender, EventArgs e)
if (this.MyGv.PageIndex < this.MyGv.PageCount)
this.MyGv.PageIndex = this.MyGv.PageIndex + 1;
//尾頁
protected void lnkbtnLast_Click(object sender, EventArgs e)
this.MyGv.PageIndex = this.MyGv.PageCount;
/// <summary>
/// 設定“首頁、上一頁、下一頁、尾頁”可用性
/// </summary>
private void SetPagerEnable()
//最後一頁,屏蔽“尾頁,下一頁”
if (ddlCurrentPage.Text == this.MyGv.PageCount.ToString())
lnkbtnNext.Enabled = false;
lnkbtnLast.Enabled = false;
lnkbtnFrist.Enabled = true;
lnkbtnPre.Enabled = true;
//第一頁時,屏蔽“首頁,上一頁”
else if (ddlCurrentPage.Text.Equals("1"))
lnkbtnNext.Enabled = true;
lnkbtnLast.Enabled = true;
this.lnkbtnFrist.Enabled = false;
lnkbtnPre.Enabled = false;
else
#endregion
asp.net web頁面前台引入:
頭部引入:
<%@ Register TagPrefix="userCtrl" TagName="Pager" Src="~/Common/GridViewPager.ascx" %>
在需要分頁的GridView初引入:
<userCtrl:Pager runat="server" ID="MyPager" />
asp.net web頁面背景引用:
private void Page_Load(object sender, System.EventArgs e)
this.MyPager.MyGv = this.GridView1;
BindGridViewData();
BindGridViewData();是綁定GridView資料源的方法。因為綁定資料源的方法可以是ADO.NET、存儲過程、Linq to sql等等方法。
是以,為了達到分頁的通用,将資料綁定與資料分頁分離。