自己写的一个分页控件类(WinForm)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. namespace xYuanShian.ControlLibrary
  9. {
  10. /// <summary>
  11. /// 翻页控件
  12. /// </summary>
  13. public partial class PageControl : UserControl
  14. {
  15. #region 私有成员
  16. /// <summary>
  17. /// 页长
  18. /// </summary>
  19. private int _PageSize = 50;
  20. /// <summary>
  21. /// 总记录数
  22. /// </summary>
  23. private int _RecordCount = 0;
  24. /// <summary>
  25. /// 当前页码
  26. /// </summary>
  27. private int _PageIndex = 1;
  28. /// <summary>
  29. /// 获取或设置页数量
  30. /// </summary>
  31. private int PageCount { get; set; }
  32. /// <summary>
  33. /// 获取或设置跳转页面
  34. /// </summary>
  35. private int GoIndex { get; set; }
  36. #endregion 私有成员
  37. #region 公有成员
  38. /// <summary>
  39. /// 获取或设置页显示数量
  40. /// </summary>
  41. public int PageSize
  42. {
  43. get { return _PageSize; }
  44. set
  45. {
  46. if ( value <= 0 )
  47. {
  48. MessageBox.Show( "页码不正确!", "错误!" );
  49. }
  50. else
  51. {
  52. _PageSize = value;
  53. this.SetPageCountValue();
  54. }
  55. }
  56. }
  57. /// <summary>
  58. /// 获取或设置数据总条数
  59. /// </summary>
  60. public int RecordCount
  61. {
  62. get { return _RecordCount; }
  63. set
  64. {
  65. _RecordCount = value;
  66. this.SetPageCountValue();
  67. }
  68. }
  69. /// <summary>
  70. /// 获取页码
  71. /// </summary>
  72. public int CurrentIndex { get { return _PageIndex; } }
  73. /// <summary>
  74. /// 翻页事件
  75. /// </summary>
  76. public event PageControlEventHandler PageChange;
  77. #endregion 公有成员
  78. /// <summary>
  79. /// 构造函数
  80. /// </summary>
  81. public PageControl()
  82. {
  83. InitializeComponent();
  84. }
  85. /// <summary>
  86. /// 构造函数
  87. /// </summary>
  88. /// <param name="RecordCount">总记录数</param>
  89. public void Init( int RecordCount, int pageSize )
  90. {
  91. /// 数据条数
  92. _RecordCount = RecordCount;
  93. /// 页长
  94. _PageSize = pageSize;
  95. //跳转页码
  96. GoIndex = 0;
  97. SetPageCountValue();
  98. RefreshData();
  99. }
  100. /// <summary>
  101. /// 刷新控件的显示
  102. /// </summary>
  103. public void RefreshText()
  104. {
  105. lblCustomInfo.Text = "第 " + CurrentIndex.ToString() + " 页/共 " + PageCount.ToString() + " 页";
  106. txtPageSize.Text = _PageSize.ToString();
  107. #region 设置按钮状态
  108. if ( PageCount == 1 )
  109. {
  110. lbllPage.Enabled = false;
  111. lblnPage.Enabled = false;
  112. lblpPage.Enabled = false;
  113. lblfPage.Enabled = false;
  114. }
  115. else if ( _PageIndex >= PageCount )
  116. {
  117. lblnPage.Enabled = false;
  118. lbllPage.Enabled = false;
  119. lblpPage.Enabled = true;
  120. lblfPage.Enabled = true;
  121. }
  122. else if ( _PageIndex <= 1 )
  123. {
  124. lblnPage.Enabled = true;
  125. lbllPage.Enabled = true;
  126. lblpPage.Enabled = false;
  127. lblfPage.Enabled = false;
  128. }
  129. else
  130. {
  131. lbllPage.Enabled = true;
  132. lblnPage.Enabled = true;
  133. lblpPage.Enabled = true;
  134. lblfPage.Enabled = true;
  135. }
  136. #endregion 设置按钮状态
  137. }
  138. /// <summary>
  139. /// 设置各种值
  140. /// </summary>
  141. private void SetPageCountValue()
  142. {
  143. /// 页总数
  144. PageCount = ( _RecordCount / _PageSize ) + 1;
  145. /// 如果总数刚才被页长整除,则页码减1
  146. if ( _RecordCount % _PageSize == 0 ) PageCount--;
  147. /// 当改页总数改变后,当前页码比最大的页码还大,则设置为最大页码
  148. if ( _PageIndex > PageCount )
  149. _PageIndex = PageCount;
  150. else if ( _PageIndex <= 0 )
  151. _PageIndex = 1;
  152. }
  153. /// <summary>
  154. /// 翻到首页
  155. /// </summary>
  156. /// <param name="sender"></param>
  157. /// <param name="e"></param>
  158. private void lblfPage_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  159. {
  160. //第一页
  161. this.JumpPage( 1 );
  162. }
  163. /// <summary>
  164. /// 上一页
  165. /// </summary>
  166. /// <param name="sender"></param>
  167. /// <param name="e"></param>
  168. private void lblpPage_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  169. {
  170. //上一页
  171. this.JumpPage( _PageIndex - 1 );
  172. }
  173. /// <summary>
  174. /// 下一页
  175. /// </summary>
  176. /// <param name="sender"></param>
  177. /// <param name="e"></param>
  178. private void lblnPage_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  179. {
  180. //下一页
  181. this.JumpPage( _PageIndex + 1 );
  182. }
  183. /// <summary>
  184. /// 末页
  185. /// </summary>
  186. /// <param name="sender"></param>
  187. /// <param name="e"></param>
  188. private void lbllPage_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  189. {
  190. //最后页
  191. this.JumpPage( PageCount );
  192. }
  193. /// <summary>
  194. /// 跳转
  195. /// </summary>
  196. /// <param name="sender"></param>
  197. /// <param name="e"></param>
  198. private void lblGo_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  199. {
  200. //跳转
  201. int gpi = 0;
  202. if ( String.IsNullOrEmpty( tbxGo.Text ) || !int.TryParse( tbxGo.Text, out gpi ) )
  203. {
  204. tbxGo.Text = "";
  205. MessageBox.Show( "目标页码不正确!", "错误" );
  206. return;
  207. }
  208. this.JumpPage( gpi );
  209. }
  210. /// <summary>
  211. /// 翻页
  212. /// </summary>
  213. /// <param name="pIndex">目标页码</param>
  214. private void JumpPage( int pIndex )
  215. {
  216. _PageIndex = pIndex;
  217. if ( _PageIndex <= 0 )
  218. _PageIndex = 1;
  219. else if ( _PageIndex > PageCount )
  220. _PageIndex = PageCount;
  221. /// 更新外观,以及调用数据
  222. RefreshData();
  223. }
  224. /// <summary>
  225. /// 刷新文本
  226. /// </summary>
  227. private void RefreshData()
  228. {
  229. if ( PageChange != null )
  230. PageChange( this, new PageControlEventArgs( PageSize, CurrentIndex ) );
  231. this.RefreshText();
  232. }
  233. /// <summary>
  234. /// 页长改变
  235. /// </summary>
  236. /// <param name="sender"></param>
  237. /// <param name="e"></param>
  238. private void txtPageSize_TextChanged( object sender, EventArgs e )
  239. {
  240. if ( !String.IsNullOrEmpty( txtPageSize.Text ) )
  241. {
  242. int ps = 0;
  243. if ( int.TryParse( txtPageSize.Text, out ps ) )
  244. {
  245. PageSize = ps;
  246. }
  247. }
  248. }
  249. /// <summary>
  250. /// 改变页长
  251. /// </summary>
  252. /// <param name="sender"></param>
  253. /// <param name="e"></param>
  254. private void lblShow_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e )
  255. {
  256. this.RefreshData();
  257. }
  258. }
  259. /// <summary>
  260. /// 翻页事件
  261. /// </summary>
  262. /// <param name="Sender">事件调用者</param>
  263. /// <param name="PageSize">页长</param>
  264. /// <param name="PageIndex">页码</param>
  265. public delegate void PageControlEventHandler( object Sender, PageControlEventArgs e );
  266. /// <summary>
  267. /// 翻页事件参数
  268. /// </summary>
  269. public class PageControlEventArgs : EventArgs
  270. {
  271. /// <summary>
  272. /// 页长
  273. /// </summary>
  274. public int PageSize = 0;
  275. /// <summary>
  276. /// 页码
  277. /// </summary>
  278. public int CurrentIndex = 0;
  279. /// <summary>
  280. /// 构造函数
  281. /// </summary>
  282. /// <param name="PageSize"></param>
  283. /// <param name="PageIndex"></param>
  284. public PageControlEventArgs( int PageSize, int PageIndex )
  285. {
  286. this.PageSize = PageSize;
  287. this.CurrentIndex = PageIndex;
  288. }
  289. }
  290. }

PageControl.Designer.cs类

  1. namespace xYuanShian.ControlLibrary
  2. {
  3. partial class PageControl
  4. {
  5. /// <summary>
  6. /// 必需的设计器变量。
  7. /// </summary>
  8. private System.ComponentModel.IContainer components = null;
  9. /// <summary>
  10. /// 清理所有正在使用的资源。
  11. /// </summary>
  12. /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
  13. protected override void Dispose( bool disposing )
  14. {
  15. if ( disposing && ( components != null ) )
  16. {
  17. components.Dispose();
  18. }
  19. base.Dispose( disposing );
  20. }
  21. #region 组件设计器生成的代码
  22. /// <summary>
  23. /// 设计器支持所需的方法 - 不要
  24. /// 使用代码编辑器修改此方法的内容。
  25. /// </summary>
  26. private void InitializeComponent()
  27. {
  28. this.lblfPage = new System.Windows.Forms.LinkLabel();
  29. this.lblpPage = new System.Windows.Forms.LinkLabel();
  30. this.lblnPage = new System.Windows.Forms.LinkLabel();
  31. this.lbllPage = new System.Windows.Forms.LinkLabel();
  32. this.tbxGo = new System.Windows.Forms.TextBox();
  33. this.lblGo = new System.Windows.Forms.LinkLabel();
  34. this.txtPageSize = new System.Windows.Forms.TextBox();
  35. this.label6 = new System.Windows.Forms.Label();
  36. this.lblCustomInfo = new System.Windows.Forms.Label();
  37. this.lblShow = new System.Windows.Forms.LinkLabel();
  38. this.SuspendLayout();
  39. //
  40. // lblfPage
  41. //
  42. this.lblfPage.AutoSize = true;
  43. this.lblfPage.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  44. this.lblfPage.LinkColor = System.Drawing.Color.Black;
  45. this.lblfPage.Location = new System.Drawing.Point( 6, 10 );
  46. this.lblfPage.Name = "lblfPage";
  47. this.lblfPage.Size = new System.Drawing.Size( 29, 12 );
  48. this.lblfPage.TabIndex = 0;
  49. this.lblfPage.TabStop = true;
  50. this.lblfPage.Text = "首页";
  51. this.lblfPage.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lblfPage_LinkClicked );
  52. //
  53. // lblpPage
  54. //
  55. this.lblpPage.AutoSize = true;
  56. this.lblpPage.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  57. this.lblpPage.LinkColor = System.Drawing.Color.Black;
  58. this.lblpPage.Location = new System.Drawing.Point( 41, 10 );
  59. this.lblpPage.Name = "lblpPage";
  60. this.lblpPage.Size = new System.Drawing.Size( 29, 12 );
  61. this.lblpPage.TabIndex = 1;
  62. this.lblpPage.TabStop = true;
  63. this.lblpPage.Text = "上页";
  64. this.lblpPage.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lblpPage_LinkClicked );
  65. //
  66. // lblnPage
  67. //
  68. this.lblnPage.AutoSize = true;
  69. this.lblnPage.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  70. this.lblnPage.LinkColor = System.Drawing.Color.Black;
  71. this.lblnPage.Location = new System.Drawing.Point( 76, 10 );
  72. this.lblnPage.Name = "lblnPage";
  73. this.lblnPage.Size = new System.Drawing.Size( 29, 12 );
  74. this.lblnPage.TabIndex = 2;
  75. this.lblnPage.TabStop = true;
  76. this.lblnPage.Text = "下页";
  77. this.lblnPage.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lblnPage_LinkClicked );
  78. //
  79. // lbllPage
  80. //
  81. this.lbllPage.AutoSize = true;
  82. this.lbllPage.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  83. this.lbllPage.LinkColor = System.Drawing.Color.Black;
  84. this.lbllPage.Location = new System.Drawing.Point( 111, 10 );
  85. this.lbllPage.Name = "lbllPage";
  86. this.lbllPage.Size = new System.Drawing.Size( 29, 12 );
  87. this.lbllPage.TabIndex = 3;
  88. this.lbllPage.TabStop = true;
  89. this.lbllPage.Text = "末页";
  90. this.lbllPage.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lbllPage_LinkClicked );
  91. //
  92. // tbxGo
  93. //
  94. this.tbxGo.Location = new System.Drawing.Point( 326, 7 );
  95. this.tbxGo.Name = "tbxGo";
  96. this.tbxGo.Size = new System.Drawing.Size( 39, 21 );
  97. this.tbxGo.TabIndex = 5;
  98. //
  99. // lblGo
  100. //
  101. this.lblGo.AutoSize = true;
  102. this.lblGo.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  103. this.lblGo.LinkColor = System.Drawing.Color.Black;
  104. this.lblGo.Location = new System.Drawing.Point( 371, 10 );
  105. this.lblGo.Name = "lblGo";
  106. this.lblGo.Size = new System.Drawing.Size( 29, 12 );
  107. this.lblGo.TabIndex = 6;
  108. this.lblGo.TabStop = true;
  109. this.lblGo.Text = "跳转";
  110. this.lblGo.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lblGo_LinkClicked );
  111. //
  112. // txtPageSize
  113. //
  114. this.txtPageSize.Location = new System.Drawing.Point( 234, 7 );
  115. this.txtPageSize.Name = "txtPageSize";
  116. this.txtPageSize.Size = new System.Drawing.Size( 40, 21 );
  117. this.txtPageSize.TabIndex = 15;
  118. this.txtPageSize.TextChanged += new System.EventHandler( this.txtPageSize_TextChanged );
  119. //
  120. // label6
  121. //
  122. this.label6.AutoSize = true;
  123. this.label6.Location = new System.Drawing.Point( 146, 11 );
  124. this.label6.Name = "label6";
  125. this.label6.Size = new System.Drawing.Size( 89, 12 );
  126. this.label6.TabIndex = 14;
  127. this.label6.Text = "每页显示记录数";
  128. //
  129. // lblCustomInfo
  130. //
  131. this.lblCustomInfo.AutoSize = true;
  132. this.lblCustomInfo.Location = new System.Drawing.Point( 406, 10 );
  133. this.lblCustomInfo.Name = "lblCustomInfo";
  134. this.lblCustomInfo.Size = new System.Drawing.Size( 35, 12 );
  135. this.lblCustomInfo.TabIndex = 16;
  136. this.lblCustomInfo.Text = "第1页";
  137. //
  138. // lblShow
  139. //
  140. this.lblShow.AutoSize = true;
  141. this.lblShow.Font = new System.Drawing.Font( "宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 134 ) ) );
  142. this.lblShow.LinkColor = System.Drawing.Color.Black;
  143. this.lblShow.Location = new System.Drawing.Point( 278, 11 );
  144. this.lblShow.Name = "lblShow";
  145. this.lblShow.Size = new System.Drawing.Size( 29, 12 );
  146. this.lblShow.TabIndex = 17;
  147. this.lblShow.TabStop = true;
  148. this.lblShow.Text = "显示";
  149. this.lblShow.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler( this.lblShow_LinkClicked );
  150. //
  151. // PageControl
  152. //
  153. this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F );
  154. this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  155. this.Controls.Add( this.lblShow );
  156. this.Controls.Add( this.lblCustomInfo );
  157. this.Controls.Add( this.txtPageSize );
  158. this.Controls.Add( this.label6 );
  159. this.Controls.Add( this.lblGo );
  160. this.Controls.Add( this.tbxGo );
  161. this.Controls.Add( this.lbllPage );
  162. this.Controls.Add( this.lblnPage );
  163. this.Controls.Add( this.lblpPage );
  164. this.Controls.Add( this.lblfPage );
  165. this.Name = "PageControl";
  166. this.Size = new System.Drawing.Size( 553, 30 );
  167. this.ResumeLayout( false );
  168. this.PerformLayout();
  169. }
  170. #endregion
  171. private System.Windows.Forms.LinkLabel lblfPage;
  172. private System.Windows.Forms.LinkLabel lblpPage;
  173. private System.Windows.Forms.LinkLabel lblnPage;
  174. private System.Windows.Forms.LinkLabel lbllPage;
  175. private System.Windows.Forms.TextBox tbxGo;
  176. private System.Windows.Forms.LinkLabel lblGo;
  177. private System.Windows.Forms.TextBox txtPageSize;
  178. private System.Windows.Forms.Label label6;
  179. private System.Windows.Forms.Label lblCustomInfo;
  180. private System.Windows.Forms.LinkLabel lblShow;
  181. }
  182. }

使用方法

  1. private void test()
  2. {
  3. PageControl pageControl1 = new PageControl();
  4. pageControl1.Init( 总记录数, 页长 );          // 或者用下面的方式
  5. pageControl1.RecordCount = 设置记录数;
  6. pageControl1.PageSize = 页长;
  7. pageControl1.PageChange += new PageControlEventHandler( myDataBinder );
  8. }
  9. private void myDataBinder(object Sender, PageControlEventArgs e)
  10. {
  11. //绑定数据源操作 e.CurrentIndex, e.PageSize
  12. }
上一篇:GATK原理及流程


下一篇:Objects and Data Structures