315 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			315 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| #region  版权信息
 | ||
| /*---------------------------------------------------------------------*
 | ||
| // 项目  名称:《Winform分页控件》
 | ||
| // 文  件  名: Pager.cs
 | ||
| // 描      述: 分页控件
 | ||
| // 作      者:kwon yan
 | ||
| *----------------------------------------------------------------------*/
 | ||
| #endregion
 | ||
| 
 | ||
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.ComponentModel;
 | ||
| using System.Drawing;
 | ||
| using System.Data;
 | ||
| using System.Linq;
 | ||
| using System.Text;
 | ||
| using System.Windows.Forms;
 | ||
| //using DeiNiu.Utils;
 | ||
| 
 | ||
| namespace DeiNiu.Controls.pager
 | ||
| {
 | ||
|     /**/
 | ||
|     /// <summary>
 | ||
|     /// 申明委托
 | ||
|     /// </summary>
 | ||
|     /// <param name="e"></param>
 | ||
|     /// <returns></returns>
 | ||
|     public delegate int EventPagingHandler(EventPagingArg e);
 | ||
|     /**/
 | ||
|     /// <summary>
 | ||
|     /// 分页控件呈现
 | ||
|     /// </summary>
 | ||
|     public partial class Pager : UserControl
 | ||
|     {
 | ||
|         public Pager()
 | ||
|         {
 | ||
|             InitializeComponent();
 | ||
|             this.bindingNavigator1.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow;
 | ||
|             this.bindingNavigator1.AutoSize = true;
 | ||
|         }
 | ||
|         public event EventPagingHandler EventPaging;
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 每页显示记录数
 | ||
|         /// </summary>
 | ||
|         private int _pageSize = 100;//Utils.WmsConstants.PAGER_SIZE;
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 每页显示记录数
 | ||
|         /// </summary>
 | ||
|         public int PageSize
 | ||
|         {
 | ||
|             get { return _pageSize; }
 | ||
|             set
 | ||
|             {
 | ||
|                 _pageSize = value;
 | ||
|                 GetPageCount();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         private int _nMax = 0;
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 总记录数
 | ||
|         /// </summary>
 | ||
|         public int NMax
 | ||
|         {
 | ||
|             get { return _nMax; }
 | ||
|             set
 | ||
|             {
 | ||
|                 _nMax = value;
 | ||
|                 GetPageCount();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         private int _pageCount = 0;
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 页数=总记录数/每页显示记录数
 | ||
|         /// </summary>
 | ||
|         public int PageCount
 | ||
|         {
 | ||
|             get { return _pageCount; }
 | ||
|             set { _pageCount = value; }
 | ||
|         }
 | ||
| 
 | ||
|         private int _pageCurrent = 0;
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 当前页号
 | ||
|         /// </summary>
 | ||
|         public int PageCurrent
 | ||
|         {
 | ||
|             get {
 | ||
|                // _pageCurrent = _pageCurrent > _pageCount ? _pageCount : _pageCurrent;
 | ||
|              //   _pageCurrent = _pageCurrent == 0 && _pageCount > 0 ? 1 : _pageCurrent;
 | ||
|                 return _pageCurrent;
 | ||
|             }
 | ||
|             set { _pageCurrent = value; }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 设置页面大小
 | ||
|         /// </summary>
 | ||
|         private void GetPageCount()
 | ||
|         {
 | ||
|             if (this.NMax > 0)
 | ||
|             {
 | ||
|                 this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.NMax) / Convert.ToDouble(this.PageSize)));
 | ||
|                // lblPageCount.Text = " / " + PageCount.ToString();
 | ||
|                 lblcurentpage.Text = PageCurrent.ToString() + " / " + PageCount.ToString();
 | ||
|                 //lblPageCount1.Text = "每页 "+PageSize .ToString ()+" 条,共 "+PageCount.ToString()+" 页";
 | ||
|              //   lblPageCount1.Text = "Page no: " + PageSize.ToString() + ",Total:" + PageCount.ToString() + " pages";
 | ||
|              //   lblPageCount1.Text =   PageSize.ToString() + "/" + PageCount.ToString() ;
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 this.PageCount = 0;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /**/
 | ||
|         /// <summary>
 | ||
|         /// 翻页控件数据绑定的方法 关键是这步,都是调用这里
 | ||
|         /// </summary>
 | ||
|         public void Bind(bool query=true )
 | ||
|         {
 | ||
| 
 | ||
|             try
 | ||
|             {
 | ||
|                 NMax = 0;
 | ||
|                 if (query && this.EventPaging != null)
 | ||
|                 {
 | ||
|                     this.NMax = this.EventPaging(new EventPagingArg(this.PageCurrent));
 | ||
|                 }
 | ||
| 
 | ||
|                 if (this.PageCurrent > this.PageCount)
 | ||
|                 {
 | ||
|                     this.PageCurrent = this.PageCount;
 | ||
|                 }
 | ||
|                 if (this.PageCount == 1)
 | ||
|                 {
 | ||
|                     this.PageCurrent = 1;
 | ||
|                 }
 | ||
|                 lblcurentpage.Text = PageCurrent.ToString() + " / " + PageCount.ToString();
 | ||
|                 lblRecordCount.Text = "共" + NMax.ToString() + "条";
 | ||
|                 // lblRecordCount.Text = "Total: " + NMax.ToString() + " records";
 | ||
| 
 | ||
| 
 | ||
|                 btnPrev.Enabled = true;
 | ||
|                 btnFirst.Enabled = true;
 | ||
|                 btnLast.Enabled = true;
 | ||
|                 btnNext.Enabled = true;
 | ||
| 
 | ||
|                 if (this.PageCurrent == 1)
 | ||
|                 {
 | ||
|                     this.btnPrev.Enabled = false;
 | ||
|                     this.btnFirst.Enabled = false;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 if (this.PageCurrent == this.PageCount)
 | ||
|                 {
 | ||
|                     this.btnLast.Enabled = false;
 | ||
|                     this.btnNext.Enabled = false;
 | ||
|                 }
 | ||
| 
 | ||
|                 if (this.NMax == 0)
 | ||
|                 {
 | ||
|                     btnNext.Enabled = false;
 | ||
|                     btnLast.Enabled = false;
 | ||
|                     btnFirst.Enabled = false;
 | ||
|                     btnPrev.Enabled = false;
 | ||
|                 }
 | ||
|                 cmbPagecount.Items.Clear();
 | ||
|                 for (int i = 1; i <= PageCount; i++)
 | ||
|                 {
 | ||
|                     cmbPagecount.Items.Add(i.ToString());
 | ||
|                     //if(i== PageCurrent - 1){
 | ||
|                     //    cmbPagecount.SelectedItem = cmbPagecount.Items[i - 1];
 | ||
|                     //}
 | ||
|                 }
 | ||
|                 this.cmbPagecount.SelectedIndexChanged -= new System.EventHandler(this.cmbPagecount_SelectedIndexChanged);
 | ||
|                 cmbPagecount.SelectedIndex = PageCurrent - 1;
 | ||
|                 this.cmbPagecount.SelectedIndexChanged += new System.EventHandler(this.cmbPagecount_SelectedIndexChanged);
 | ||
| 
 | ||
| 
 | ||
|                 comPagesize.Items.Clear();
 | ||
|                 for (int i = 100; i <= 900; i += 100)
 | ||
|                 {
 | ||
|                     comPagesize.Items.Add(i.ToString());
 | ||
| 
 | ||
|                 }
 | ||
|                 /*
 | ||
|                 for (int i = 50; i <= 500; i+=50)
 | ||
|                 {
 | ||
|                     comPagesize.Items.Add(i.ToString());
 | ||
|                 
 | ||
|                 }
 | ||
|                 */
 | ||
|                 for (int i = 1000; i <= 9000; i += 1000)
 | ||
|                 {
 | ||
|                     comPagesize.Items.Add(i.ToString());
 | ||
|                 }
 | ||
|                 this.comPagesize.SelectedIndexChanged -= new System.EventHandler(this.comPagesize_SelectedIndexChanged);
 | ||
|                 //   comPagesize.SelectedIndex = this._pageSize / 100 -1;
 | ||
|                 //  comPagesize.SelectedIndex = this._pageSize / 50 - 1  ;
 | ||
|                 comPagesize.SelectedIndex = _pageSize <= 1000 ? this._pageSize / 100 - 1 : 10 + _pageSize / 1000 - 2;
 | ||
|                 this.comPagesize.SelectedIndexChanged += new System.EventHandler(this.comPagesize_SelectedIndexChanged);
 | ||
|             }
 | ||
|             catch (Exception er)
 | ||
|             {
 | ||
|                 
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 首页
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         private void btnFirst_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             PageCurrent = 1;
 | ||
|             this.Bind();
 | ||
|         }
 | ||
|         //上一页
 | ||
|         /// <summary>
 | ||
|         /// 
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         private void btnPrev_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             PageCurrent -= 1;
 | ||
|             if (PageCurrent <= 0)
 | ||
|             {
 | ||
|                 PageCurrent = 1;
 | ||
|             }
 | ||
|             this.Bind();
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 下一页
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         private void btnNext_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             this.PageCurrent += 1;
 | ||
|             if (PageCurrent > PageCount)
 | ||
|             {
 | ||
|                 PageCurrent = PageCount;
 | ||
|             }
 | ||
|             this.Bind();
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 最后页
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         private void btnLast_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             PageCurrent = PageCount;
 | ||
|             this.Bind();
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 转到新页
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         public void btnGo_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             if (Int32.TryParse(cmbPagecount.SelectedItem.ToString(), out _pageCurrent))
 | ||
|             {
 | ||
|                 this.Bind();
 | ||
|             } 
 | ||
|         }
 | ||
| 
 | ||
|         private void cmbPagecount_SelectedIndexChanged(object sender, EventArgs e)
 | ||
|         {
 | ||
|             if (Int32.TryParse(cmbPagecount.SelectedItem.ToString(), out _pageCurrent))
 | ||
|             {
 | ||
|                 this.Bind();
 | ||
|             } 
 | ||
|         }
 | ||
|         private void comPagesize_SelectedIndexChanged(object sender, EventArgs e)
 | ||
|         {
 | ||
|             if (Int32.TryParse(comPagesize.SelectedItem.ToString(), out _pageSize))
 | ||
|             {
 | ||
|                 GetPageCount();
 | ||
|                 this.Bind();
 | ||
|             }
 | ||
|            
 | ||
|        
 | ||
|         }
 | ||
| 
 | ||
|         private void lblRecordCount_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
| 
 | ||
|         }
 | ||
|     }
 | ||
|     /**/
 | ||
|     /// <summary>
 | ||
|     /// 自定义事件数据基类
 | ||
|     /// </summary>
 | ||
|     public class EventPagingArg : EventArgs
 | ||
|     {
 | ||
|         private int _intPageIndex;
 | ||
|         public EventPagingArg(int PageIndex)
 | ||
|         {
 | ||
|             _intPageIndex = PageIndex;
 | ||
|         }
 | ||
|     }
 | ||
| }
 |