今天项目中有新的需求,需要自己写分页。这个时候Gridview自带的分页功能就不能用了,在网上也找了一些分页控件,不过觉得用起来属性太多,很不爽。就自己写了一个。
现在记录下来,以备后用,同时也分享给大家。现在来说说思路:
1.其实我们用分页控件无非就一个目的:根据当前页索引显示当前页数据,那么要实现这个功能需要从用户控件中获取到当前页索引,这时我们需要设一个公共属性CurrentIndex。用来记录当前页索引。
2.这时有个问题,在用户控件中页索引改变后该如何通知引用页来获取当前页索引呢,这个时候就需要在用户控件页注册一个事件了。也就是用户控件中需要暴露一个事件。这个事件要在上一页、下一页、最后一页、第一页等各个页索引切换按钮事件中注册。
3.这个时候就可以在用户也引用并使用了。
语言组织能力不是很好,现在把代码列出来:
.aspx页面代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomerPager.ascx.cs" Inherits="LTP.Web.WebControll.CustomerPager" %>
<div>
<asp:Label ID="lblCurrentIndex" runat="server" /><span>/</span>
<asp:Label ID="lblPageCount" runat="server" />
<asp:ImageButton ID="ibtnFirstPage" ImageUrl="~/App_Themes/Default/Images/pagefirst_disable.gif" runat="server" OnClick="ibtnFirstPage_Click" />
<asp:ImageButton ID="ibtnPrePage" runat="server" ImageUrl="~/App_Themes/Default/Images/pageprevious_disable.gif" OnClick="ibtnPrePage_Click" />
<asp:ImageButton ID="ibtnNextPage" runat="server" ImageUrl="~/App_Themes/Default/Images/pagenext.gif" OnClick="ibtnNextPage_Click" />
<asp:ImageButton ID="ibtnLastPage" runat="server" ImageUrl="~/App_Themes/Default/Images/pagelast.gif" OnClick="ibtnLastPage_Click" />
<span>To</span>
<asp:DropDownList ID="ddlSelectPageIndex" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlSelectPageIndex_SelectedChanged" />
<asp:ImageButton ID="ibtnHiddenReload" runat="server" OnClick="ibtnHiddenReload_Click" />
</div>
.cs页面代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LTP.Web.WebControll
{
public partial class CustomerPager : System.Web.UI.UserControl
{
#region---私有字段---
//总页数
private static int pageCount = 1;
//当前页
private static int currentIndex = 1;
#endregion
#region---属性---
/// <summary>
/// 总页数
/// </summary>
public int PageCount
{
set { pageCount = value; }
get { return pageCount; }
}
/// <summary>
/// 当前页
/// </summary>
public int CurrentIndex
{
set { currentIndex = value; }
get { return currentIndex; }
}
//自定义事件
public event EventHandler PagerIndexChanged;
#endregion
#region---Page_Load事件---
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定下拉框页码
BindSelectIndexPager();
BindPagerInfo();
}
}
#endregion
#region---事件---
#region---分页事件---
/// <summary>
/// 跳转到第一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ibtnFirstPage_Click(object sender, EventArgs e)
{
currentIndex = 1;
BindPagerInfo();
PagerIndexChanged(sender, e);
}
/// <summary>
/// 上一页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ibtnPrePage_Click(object sender, EventArgs e)
{
if (currentIndex > 1)
{
currentIndex -= 1;
BindPagerInfo();
PagerIndexChanged(sender, e);
}
}
/// <summary>
/// 下一页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ibtnNextPage_Click(object sender, EventArgs e)
{
if (currentIndex < pageCount)
{
currentIndex += 1;
BindPagerInfo();
PagerIndexChanged(sender, e);
}
}
/// <summary>
/// 最后一页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ibtnLastPage_Click(object sender, EventArgs e)
{
if (currentIndex < pageCount)
{
currentIndex = pageCount;
BindPagerInfo();
PagerIndexChanged(sender, e);
}
}
/// <summary>
/// 页码下拉框切换事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlSelectPageIndex_SelectedChanged(object sender, EventArgs e)
{
currentIndex = Convert.ToInt32(this.ddlSelectPageIndex.SelectedItem.Text.Trim());
BindPagerInfo();
PagerIndexChanged(sender, e);
}
/// <summary>
/// 重新绑定用户控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ibtnHiddenReload_Click(object sender, EventArgs e)
{
BindPagerInfo();
}
#endregion
#endregion
#region---私有方法---
/// <summary>
/// 绑定下拉框页码
/// </summary>
private void BindSelectIndexPager()
{
this.ddlSelectPageIndex.Items.Clear();
for (int i = 1; i <= pageCount; i++)
{
this.ddlSelectPageIndex.Items.Add(i.ToString());
}
}
/// <summary>
/// 绑定分页数据
/// </summary>
private void BindPagerInfo()
{
BindSelectIndexPager();
if (currentIndex > pageCount)
{
currentIndex = pageCount;
}
this.lblCurrentIndex.Text = currentIndex.ToString();
this.lblPageCount.Text = pageCount.ToString();
this.ddlSelectPageIndex.Text = currentIndex.ToString();
//当总页数为一
if (pageCount <= 1)
{
this.ibtnFirstPage.ImageUrl = "~/App_Themes/Default/Images/pagefirst_disable.gif";
this.ibtnPrePage.ImageUrl = "~/App_Themes/Default/Images/pageprevious_disable.gif";
this.ibtnNextPage.ImageUrl = "~/App_Themes/Default/Images/pagenext_disable.gif";
this.ibtnLastPage.ImageUrl = "~/App_Themes/Default/Images/pagelast_disable.gif";
}
//当页码为最后一页
else if (currentIndex >= pageCount)
{
this.ibtnFirstPage.ImageUrl = "~/App_Themes/Default/Images/pagefirst.gif";
this.ibtnPrePage.ImageUrl = "~/App_Themes/Default/Images/pageprevious.gif";
this.ibtnNextPage.ImageUrl = "~/App_Themes/Default/Images/pagenext_disable.gif";
this.ibtnLastPage.ImageUrl = "~/App_Themes/Default/Images/pagelast_disable.gif";
}
//当页码为一
else if (currentIndex <= 1)
{
this.ibtnFirstPage.ImageUrl = "~/App_Themes/Default/Images/pagefirst_disable.gif";
this.ibtnPrePage.ImageUrl = "~/App_Themes/Default/Images/pageprevious_disable.gif";
this.ibtnNextPage.ImageUrl = "~/App_Themes/Default/Images/pagenext.gif";
this.ibtnLastPage.ImageUrl = "~/App_Themes/Default/Images/pagelast.gif";
}
//当页码为中间值
else
{
this.ibtnFirstPage.ImageUrl = "~/App_Themes/Default/Images/pagefirst.gif";
this.ibtnPrePage.ImageUrl = "~/App_Themes/Default/Images/pageprevious.gif";
this.ibtnNextPage.ImageUrl = "~/App_Themes/Default/Images/pagenext.gif";
this.ibtnLastPage.ImageUrl = "~/App_Themes/Default/Images/pagelast.gif";
}
}
#endregion
}
}