.NET自定义分页控件PageNavigator v1.0(源码)

1.使用说明:

1).页面中添加本控件,假设实例名称为PageNavigator1;
2).在Page_Load加入:PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);
3).在Page_Load的if (!IsPostBack){}中对控件的RecordCount、PageSize和PageIndex属性赋值,注意PageIndex的赋值应放在最后;
4).定义一个PageNavigator1_PageChange函数:
protected void PageNavigator1_PageChange(object sender, int PageIndex)
{
    PageNavigator1.PageIndex = PageIndex;
}

2.PageNavigator分页控件源码:

PageNavigator.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageNavigator.ascx.cs" Inherits="PageNavigator" %>

<!-- PageNavigator V1.0 for VS2005 & VS2008  Author:dnawo Web:http://www.mzwu.com/ -->

<!-- 1.分页控件各属性(总记录数、每页记录数、当前页数、总页数),可根据需要选择显示与否 -->
<asp:Label runat="server" ID="LblRecordCount" Visible="true" />
<asp:Label runat="server" ID="LblPageSize" Visible="true" />
<asp:Label runat="server" ID="LblPageIndex" Visible="true" />
<asp:Label runat="server" ID="LblPageCount" Visible="true"/>
<!-- 属性完毕 -->

<!-- 2.分页控件按钮 -->
<asp:LinkButton ID="LnkBtnFirst" runat="server" CommandName="Page" OnClick="First_Click">首页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnPrevious" runat="server" CommandName="Page" OnClick="Previous_Click">上一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnNext" runat="server" CommandName="Page" OnClick="Next_Click">下一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnLast" runat="server" CommandName="Page" OnClick="Last_Click">尾页</asp:LinkButton>
<asp:textbox ID="txtNewPageIndex" runat="server" width="20px"/>
<asp:Button ID="BtnGoto" runat="server" CommandName="Page" OnClick="Goto_Click" Text="GO" />
<!-- 按钮完毕 -->

<!-- PageNavigator V1.0 for VS2005 & VS2008 End -->

PageNavigator.ascx.cs:
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 delegate void PageChangeHandler(object send, int nPageIndex);

/// <summary>
/// 分页控件PageNavigator v1.0
/// </summary>
/// <remarks>
/// 使用说明:
///         1.页面中添加本控件,假设实例名称为PageNavigator1;
///         2.在Page_Load加入:PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);
///         3.在Page_Load的if (!IsPostBack){}中对控件的RecordCount、PageSize和PageIndex属性赋值,注意PageIndex的赋值应放在最后;
///         4.定义一个PageNavigator1_PageChange函数:
///         protected void PageNavigator1_PageChange(object sender, int PageIndex)
///         {
///             PageNavigator1.PageIndex = PageIndex;
///         }
///
/// 联系我们:
///         Author:dnawo
///         Web:http://www.mzwu.com/
///         QQ:270250392
/// </remarks>
public partial class PageNavigator : System.Web.UI.UserControl
{
    public event PageChangeHandler OnPageChange;
    private int _RecordCount = 0;
    private int _PageSize = 10;
    private int _PageIndex = 1;
    private int _PageCount = 1;

    protected void Page_Load(object sender, EventArgs e)
    {
        //初始化
        if (!string.IsNullOrEmpty(LblRecordCount.Text))
            _RecordCount = int.Parse(this.LblRecordCount.Text);

        if (!string.IsNullOrEmpty(LblPageSize.Text))
            _PageSize = int.Parse(this.LblPageSize.Text);

        if (!string.IsNullOrEmpty(LblPageCount.Text))
            _PageCount = int.Parse(this.LblPageCount.Text);
    }

    #region 分页控件属性

    /// <summary>
    /// 属性:总记录数
    /// </summary>
    public int RecordCount
    {
        get
        {
            return int.Parse(this.LblRecordCount.Text);
        }
        set
        {
            _RecordCount = value;
            this.LblRecordCount.Text = _RecordCount.ToString();

            if (_RecordCount % _PageSize == 0)
            {
                _PageCount = _RecordCount / _PageSize;
                this.LblPageCount.Text = _PageCount.ToString();
            }
            else
            {
                _PageCount = (_RecordCount - _RecordCount % _PageSize) / _PageSize + 1;
                this.LblPageCount.Text = _PageCount.ToString();
            }
        }
    }

    /// <summary>
    /// 属性:总记录数
    /// </summary>
    public int PageSize
    {
        get
        {
            return int.Parse(this.LblPageSize.Text);
        }
        set
        {
            _PageSize = value;
            this.LblPageSize.Text = _PageSize.ToString();

            if (_RecordCount % _PageSize == 0)
            {
                _PageCount = _RecordCount / _PageSize;
                this.LblPageCount.Text = _PageCount.ToString();
            }
            else
            {
                _PageCount = (_RecordCount - _RecordCount % _PageSize) / _PageSize + 1;
                this.LblPageCount.Text = _PageCount.ToString();
            }
        }
    }

    /// <summary>
    /// 属性:当前页数
    /// </summary>
    public int PageIndex
    {
        get
        {
            return int.Parse(this.LblPageIndex.Text);
        }
        set
        {
            _PageIndex = value;
            this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();

            if (_PageIndex < 2)
            {
                this.LnkBtnFirst.Enabled = false;
                this.LnkBtnPrevious.Enabled = false;
            }
            else
            {
                this.LnkBtnFirst.Enabled = true;
                this.LnkBtnPrevious.Enabled = true;
            }

            if (_PageIndex >= _PageCount)
            {
                this.LnkBtnNext.Enabled = false;
                this.LnkBtnLast.Enabled = false;
            }
            else
            {
                this.LnkBtnNext.Enabled = true;
                this.LnkBtnLast.Enabled = true;
            }
        }
    }

    /// <summary>
    /// 属性:总页数(只读)
    /// </summary>
    public int PageCount
    {
        get
        {
            return int.Parse(this.LblPageCount.Text);
        }
    }

    #endregion

    #region 分页控件事件

    /// <summary>
    /// 首页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void First_Click(object sender, EventArgs e)
    {
        try
        {
            OnPageChange(sender, 1);
        }
        catch { }
    }

    /// <summary>
    /// 上一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Previous_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);
            n--;
            OnPageChange(sender, n);
        }
        catch
        {
            throw;
        }
    }

    /// <summary>
    /// 下一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Next_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);
            n++;
            OnPageChange(sender, n);
        }
        catch
        {
            throw;
        }
    }

    /// <summary>
    /// 尾页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Last_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageCount.Text);
            OnPageChange(sender, n);
        }
        catch
        {
            throw;
        }
    }

    /// <summary>
    /// 跳转
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Goto_Click(object sender, EventArgs e)
    {
        int n;
        try
        {
            n = Convert.ToInt32(this.txtNewPageIndex.Text);
        }
        catch
        {
            n = Convert.ToInt32(this.LblPageIndex.Text);
        }
        int np = Convert.ToInt32(this.LblPageCount.Text.Trim());
        if (n > np)
            n = np;
        if (n < 1)
            n = 1;
        OnPageChange(sender, n);
    }
    #endregion
}


评论: 0 | 引用: 0 | 查看次数: 6724
发表评论
登录后再发表评论!