• 自定义分页控件


     运行效果:

    控件结构图:

    实现代码:

    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Text.RegularExpressions;
    using System.Windows.Forms;
    
    namespace KK.Pagers
    {
        public partial class Pagers : UserControl
        {
            #region 定义、构造
            private int _pageIndex = 1;
            /// <summary>
            /// 当前页数
            /// </summary> 
            public int PageIndex
            {
                get { return _pageIndex; }
                set { _pageIndex = value; }
            }
    
            private int _pageSize;
            /// <summary>
            /// 每一页显示的数据量
            /// </summary> 
            public int PageSize
            {
                get { return _pageSize; }
                set { _pageSize = value; }
            }
    
            private int _pageCount;
            /// <summary>
            /// 总数据数
            /// </summary>
            public int PageCount
            {
                get
                {
                    if (PageSize != 0)
                    {
                        _pageCount = GetPageCount();
                    }
                    return _pageCount;
                }
            }
    
            private int _totalCount = 20;
            /// <summary>
            /// 总数
            /// </summary>
            public int TotalCount
            {
                get { return _totalCount; }
                set
                {
                    _totalCount = value;
                }
            }
    
            /// <summary>
            /// 首页背景图
            /// </summary>
            public Image FirstBackgroundImage
            {
                get { return pboxFirst.Image; }
                set
                {
                    pboxFirst.Image = value;
                }
            }
    
            /// <summary>
            /// 上一页背景图
            /// </summary>
            public Image LastBackgroundImage
            {
                get { return this.pboxUp.Image; }
                set
                {
                    pboxUp.Image = value;
                }
            }
    
            /// <summary>
            /// 下一个背景图
            /// </summary>
            public Image NextBackgroundImage
            {
                get { return this.pboxNext.Image; }
                set
                {
                    pboxNext.Image = value;
                }
            }
    
            /// <summary>
            /// 尾页背景图
            /// </summary>
            public Image EndBackgroundImage
            {
                get { return this.pboxEnd.Image; }
                set
                {
                    pboxEnd.Image = value;
                }
            }
    
            /// <summary>
            /// 构造
            /// </summary>
            public Pagers()
            {
                InitializeComponent();
                this.Load += Pagers_Load;
            }
    
            #endregion
    
            #region event
    
            void Pagers_Load(object sender, EventArgs e)
            {
                if (PageIndex <= 0)
                    PageIndex = 1;
            }
    
            [Browsable(true), Description("分页改变事件"), Category("操作")]
            public event EventHandler OnPageChanged;
            //首页
            private void pboxPageFirst_Click(object sender, EventArgs e)
            {
                PageIndex = 1;
                DrawControl(true);
            }
    
            //上一页
            private void pboxPre_Click(object sender, EventArgs e)
            {
                if (PageIndex > 1)
                {
                    PageIndex--;
                }
    
                DrawControl(true);
            }
    
            //下一页
            private void pboxNext_Click(object sender, EventArgs e)
            {
                if (PageIndex < PageCount)
                {
                    PageIndex++;
                }
    
                DrawControl(true);
            }
    
            //尾页
            private void pboxLast_Click(object sender, EventArgs e)
            {
                PageIndex = PageCount;
                DrawControl(true);
            }
    
            private void ctboxCurrentPageIndex_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    int page = -1;
                    if (int.TryParse(ctboxCurrentPageIndex.Text, out page)
                        && int.Parse(ctboxCurrentPageIndex.Text) > 0
                        && int.Parse(ctboxCurrentPageIndex.Text) <= PageCount
                        && PageIndex != int.Parse(ctboxCurrentPageIndex.Text))
                    {
                        PageIndex = int.Parse(ctboxCurrentPageIndex.Text);
                        DrawControl(true);
                    }
                    else
                    {
                        ctboxCurrentPageIndex.Text = PageIndex.ToString();
                        ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                    }
                }
            }
    
            private void ctboxCurrentPageIndex_TextChanged(object sender, EventArgs e)
            {
                Regex reg = new Regex("^[0-9]*$");
                if (!reg.IsMatch(ctboxCurrentPageIndex.Text))
                {
                    ctboxCurrentPageIndex.Text = PageIndex.ToString();
                    ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                }
                if (PageCount.Equals(0))
                {
                    DisplayImage(this.pboxFirst, global::KK.Pagers.Properties.Resources.Page_First1);
                    DisplayImage(this.pboxUp, global::KK.Pagers.Properties.Resources.Page_Last1);
                    DisplayImage(this.pboxNext, global::KK.Pagers.Properties.Resources.Page_Next1);
                    DisplayImage(this.pboxEnd, global::KK.Pagers.Properties.Resources.Page_End1);
                    return;
                }
                //首页且不止一页数据
                if (PageIndex.Equals(1) && !PageIndex.Equals(PageCount))
                {
                    DisplayImage(this.pboxFirst, global::KK.Pagers.Properties.Resources.Page_First1);
                    DisplayImage(this.pboxUp, global::KK.Pagers.Properties.Resources.Page_Last1);
                    DisplayImage(this.pboxNext, global::KK.Pagers.Properties.Resources.Page_Next);
                    DisplayImage(this.pboxEnd, global::KK.Pagers.Properties.Resources.Page_End);
                    return;
                }
                //只有一页数据
                if (PageIndex.Equals(1) && PageIndex.Equals(PageCount))
                {
                    DisplayImage(this.pboxFirst, global::KK.Pagers.Properties.Resources.Page_First1);
                    DisplayImage(this.pboxUp, global::KK.Pagers.Properties.Resources.Page_Last1);
                    DisplayImage(this.pboxNext, global::KK.Pagers.Properties.Resources.Page_Next1);
                    DisplayImage(this.pboxEnd, global::KK.Pagers.Properties.Resources.Page_End1);
                    return;
                }
                //尾页
                if (PageIndex == PageCount)
                {
                    DisplayImage(this.pboxFirst, global::KK.Pagers.Properties.Resources.Page_First);
                    DisplayImage(this.pboxUp, global::KK.Pagers.Properties.Resources.Page_Last);
                    DisplayImage(this.pboxNext, global::KK.Pagers.Properties.Resources.Page_Next1);
                    DisplayImage(this.pboxEnd, global::KK.Pagers.Properties.Resources.Page_End1);
                    return;
                }
                //大于第一页
                if (PageIndex > 1 && PageIndex < PageCount)
                {
                    DisplayImage(this.pboxFirst, global::KK.Pagers.Properties.Resources.Page_First);
                    DisplayImage(this.pboxUp, global::KK.Pagers.Properties.Resources.Page_Last);
                    DisplayImage(this.pboxNext, global::KK.Pagers.Properties.Resources.Page_Next);
                    DisplayImage(this.pboxEnd, global::KK.Pagers.Properties.Resources.Page_End);
                    return;
                }
            }
    
            #endregion
    
            #region private method
            /// <summary>
            /// 设置控件是否显示
            /// </summary>
            /// <param name="pb">PictureBox pb</param>
            /// <param name="img">图片</param>
            private void DisplayImage(PictureBox pb, Image img)
            {
                if (img != null) pb.Image = img;
            }
    
            /// <summary>
            /// 获取页数
            /// </summary>
            /// <returns>页数</returns>
            private int GetPageCount()
            {
                if (PageSize == 0)
                {
                    return 0;
                }
                int pageCount = TotalCount / PageSize;
                if (TotalCount % PageSize == 0)
                {
                    pageCount = TotalCount / PageSize;
                }
                else
                {
                    pageCount = TotalCount / PageSize + 1;
                }
    
                return pageCount;
            }
    
            /// <summary>
            /// 显示页数
            /// </summary>
            /// <param name="count">页数</param>
            public void DrawControl(int count)
            {
                TotalCount = count;
                this.lblPageCountShow.Text = string.Format("共{0}页", PageCount);
                DrawControl(false);
            }
    
            /// <summary>
            /// 分页控件可用性设置
            /// </summary>
            /// <param name="callEvent">callEvent</param>
            private void DrawControl(bool callEvent)
            {
                this.ctboxCurrentPageIndex.Text = PageIndex.ToString();
                this.ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                if (callEvent && OnPageChanged != null)
                    OnPageChanged(this, null);
                SetFormCtrEnabled();
                if (PageCount == 0)
                {
                    this.ctboxCurrentPageIndex.Text = "1";
                    this.ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                    this.pboxFirst.Enabled = false;
                    this.pboxUp.Enabled = false;
                    this.pboxNext.Enabled = false;
                    this.pboxEnd.Enabled = false;
                }
                if (PageCount == 1)
                {
                    this.ctboxCurrentPageIndex.Text = "1";
                    this.ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                    this.pboxFirst.Enabled = false;
                    this.pboxUp.Enabled = false;
                    this.pboxNext.Enabled = false;
                    this.pboxEnd.Enabled = false;
                }
                else if (PageIndex == 1)
                {
                    this.ctboxCurrentPageIndex.Text = "1";
                    this.ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                    this.pboxFirst.Enabled = false;
                    this.pboxUp.Enabled = false;
                }
                else if (PageIndex == PageCount)
                {
                    this.ctboxCurrentPageIndex.Text = PageCount.ToString();
                    this.ctboxCurrentPageIndex.SelectionStart = ctboxCurrentPageIndex.TextLength;
                    this.pboxNext.Enabled = false;
                    this.pboxEnd.Enabled = false;
                }
            }
    
            private void SetFormCtrEnabled()
            {
                this.pboxFirst.Enabled = true;
                this.pboxNext.Enabled = true;
                this.pboxUp.Enabled = true;
                this.pboxEnd.Enabled = true;
            }
    
            #endregion
    
            private void Pbox_EnabledChanged(object sender, EventArgs e)
            {
                PictureBox pbox = sender as PictureBox;
                bool isEnable = pbox.Enabled;
                Image pageimage;
                switch (pbox.Name)
                {
                    case "pboxFirst":
                        pageimage = isEnable ? global::KK.Pagers.Properties.Resources.Page_First : global::KK.Pagers.Properties.Resources.Page_First1;
                        break;
                    case "pboxNext":
                        pageimage = isEnable ? global::KK.Pagers.Properties.Resources.Page_Next : global::KK.Pagers.Properties.Resources.Page_Next1;
                        break;
                    case "pboxUp":
                        pageimage = isEnable ? global::KK.Pagers.Properties.Resources.Page_Last : global::KK.Pagers.Properties.Resources.Page_Last1;
                        break;
                    default:
                        pageimage = isEnable ? global::KK.Pagers.Properties.Resources.Page_End : global::KK.Pagers.Properties.Resources.Page_End1;
                        break;
                }
                DisplayImage(pbox, pageimage);
            }
    
            private void Pagers_Load_1(object sender, EventArgs e)
            {
                if (GetPageCount() > 0) ctboxCurrentPageIndex.Text = "1";
                else ctboxCurrentPageIndex.Text = "0";
            }
    
        }
    }
    

    调用方式:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace Demo
    {
        public partial class Form2 : Form
        {
            List<StudentInfo> list = new List<StudentInfo>();
    
            public Form2()
            {
                InitializeComponent();
                this.dgvList.AutoGenerateColumns = false;
    
                this.pagingList.PageIndex = 1;
                for (int i = 1; i <= 33; i++)
                {
                    StudentInfo stu = new StudentInfo();
                    stu.Name = "学生" + i;
                    stu.Age = i;
                    list.Add(stu);
                }
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
                GetPageData();
            }
    
            private void GetPageData()
            {
                List<StudentInfo> dataSource = list
                    .Skip((this.pagingList.PageIndex - 1) * this.pagingList.PageSize)
                    .Take(this.pagingList.PageSize).ToList();
                var count = Math.Ceiling(double.Parse(Convert.ToString(list.Count / dataSource.Count)));
    
                this.dgvList.DataSource = dataSource;
                this.pagingList.TotalCount = list.Count;
                //调用page的公用方法
                this.pagingList.DrawControl(list.Count);
            }
    
            private void pagingList_OnPageChanged(object sender, EventArgs e)
            {
                GetPageData();
            }
        }
    
        public class StudentInfo 
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
    

      

  • 相关阅读:
    势函数的构造
    10.29模拟赛总结
    10.29vp总结
    10.25模拟赛总结
    10.24模拟赛总结
    线段树练习
    一键挖矿
    P1972 [SDOI2009]HH的项链
    P3901 数列找不同
    P5546 [POI2000]公共串
  • 原文地址:https://www.cnblogs.com/YYkun/p/9171472.html
Copyright © 2020-2023  润新知