天天看點

GridView 通用分頁

在項目中,遇到一個分頁問題,原理很簡單,但是,為了達到複用,将分頁的控件和方法封裝到使用者控件中,這樣就可以将分頁的控件、代碼與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等等方法。

是以,為了達到分頁的通用,将資料綁定與資料分頁分離。

繼續閱讀