Winform自定义分页控件的实现

实现效果 有点丑陋 但是功能是没问题的 测试过

实现思路

先创建一个用户控件

代码实现

 public partial class PagerControl : UserControl
    {
        private int record = 0;

        /// <summary>
        /// 总记录数
        /// </summary>
        public int Record
        {
            get { return record; }
            set
            {
                record = value;
                InitPageInfo();
            }
        }

        private int pageSize = 20;

        /// <summary>
        /// 每页条数
        /// </summary>
        public int PageSize
        {
            get { return pageSize; }
            set { pageSize = value; }
        }

        private int currentPage = 1;

        /// <summary>
        /// 当前页
        /// </summary>
        public int CurrentPage
        {
            get { return currentPage; }
            set { currentPage = value; }
        }

        public int pageNum = 0;

        /// <summary>
        /// 总页码
        /// </summary>
        public int PageNum
        {
            get
            {
                if (Record == 0)
                {
                    pageNum = 0;
                }
                else
                {
                    if (Record % PageSize > 0)
                    {
                        pageNum = Record / PageSize + 1;
                    }
                    else
                    {
                        pageNum = Record / PageSize;
                    }
                }
                return pageNum;
            }

        }

        //定义委托
        public delegate void BindHandle(object sender, EventArgs e);

        /// <summary>
        /// 绑定数据源事件
        /// </summary>
        public event BindHandle BindSource;

        public PagerControl()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 首页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFirst_Click(object sender, EventArgs e)
        {
            if (Record > 0)
            {
                if (CurrentPage == 1)
                {
                    MessageBox.Show("当前已经是首页");
                    return;
                }
                else
                {
                    CurrentPage = 1;
                    if (BindSource != null)
                    {
                        BindSource(sender, e);
                        InitPageInfo();
                    }
                }
            }

        }

        private void btnPre_Click(object sender, EventArgs e)
        {
            if (Record > 0)
            {
                if (CurrentPage == 1)
                {
                    MessageBox.Show("当前已经是首页");
                    return;
                }
                else
                {
                    CurrentPage = CurrentPage - 1;
                    if (BindSource != null)
                    {
                        BindSource(sender, e);
                        InitPageInfo();
                    }
                }
            }
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            if (Record > 0)
            {
                if (CurrentPage == PageNum)
                {
                    MessageBox.Show("当前已经是末页");
                    return;
                }
                else
                {
                    CurrentPage = CurrentPage + 1;
                    if (BindSource != null)
                    {
                        BindSource(sender, e);
                        InitPageInfo();
                    }
                }
            }
        }

        private void btnLast_Click(object sender, EventArgs e)
        {
            if (Record > 0)
            {
                if (CurrentPage == PageNum)
                {
                    MessageBox.Show("当前已经是末页");
                    return;
                }
                else
                {
                    CurrentPage = PageNum;
                    if (BindSource != null)
                    {
                        BindSource(sender, e);
                        InitPageInfo();
                    }
                }
            }
        }

        private void InitPageInfo()
        {
            lblInfo.Text = string.Format("共{0}条记录 共{1}页 当前第{2}页", Record, PageNum,CurrentPage);
            txtPage.Text = CurrentPage.ToString();
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            if (Record > 0)
            {
                if (!string.IsNullOrEmpty(txtPage.Text) && !Regex.IsMatch(txtPage.Text, @"^[\d]*$"))
                {
                    MessageBox.Show("请正确填写页码!");
                    return;
                }
                int page = Convert.ToInt32(txtPage.Text);
                if (page == 0)
                {
                    page = 1;
                }
                if (page > PageNum)
                {
                    page = PageNum;
                }

                CurrentPage = page;
                if (BindSource != null)
                {
                    BindSource(sender, e);
                    InitPageInfo();
                }
            }

        }

        private void PagerControl_Load(object sender, EventArgs e)
        {
            if (BindSource != null)
            {
                BindSource(sender, e);
                InitPageInfo();
            }
        }
    }

使用

只要在窗体中 写好绑定方法

 private void Bind()
        {
            string start = dtpDate1.Value.ToString("yyyy-MM-dd");
            string end = dtpDate2.Value.ToString("yyyy-MM-dd");
            string team = cbxTeam.SelectedValue.ToString();
            string jieshu = cbxSFJS.SelectedValue.ToString();
            int record = 0;
            DataTable dt = eventBiz.GetEvents(start, end, team, jieshu, pagerControl1.CurrentPage, pagerControl1.PageSize,out record);
            pagerControl1.Record = record;

            dgvEvent.AutoGenerateColumns = false;
            dgvEvent.DataSource = dt.DefaultView;
        }

捆绑绑定事件

 /// <summary>
        /// 绑定数据源
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pagerControl1_BindSource(object sender, EventArgs e)
        {
            Bind();
        }

就可以了  需要注意的事情是由于分页控件load事件里会调用bind方法,会用到一些窗体元素的值,所以窗体元素项的初始化,应该放在窗体构造函数中,不要放在窗体load事件里。

时间: 2024-10-10 11:04:47

Winform自定义分页控件的实现的相关文章

winform 自定义分页控件 及DataGridview数据绑定

分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; usin

winform自定义分页控件

1.控件代码: public partial class PagerControl : UserControl { #region 构造函数 public PagerControl() { InitializeComponent(); } #endregion #region 分页字段和属性 private int pageIndex = 1; /// <summary> /// 当前页面 /// </summary> public virtual int PageIndex {

WINFORM 自定义开关按钮控件-

本文章转载:http://www.cnblogs.com/feiyangqingyun/archive/2013/06/15/3137597.html OK,大工告成,上图演示效果. 源码下载:http://files.cnblogs.com/feiyangqingyun/myButtonCheckTest.zip WINFORM 自定义开关按钮控件-,布布扣,bubuko.com

Mvc自定义分页控件

MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候,完全显示出来: 2>当分页超过10页,效果图如下所示: 再来看看生成的分页代码,竟然和楼主一样纯洁!!! 3>支持自定义路由.参数.页码html格式.首末页是否显示.上下页是否显示.URL分页参数传递功能. 使用方法: 1.引用 YYP.PagerHtml.dll 2.页面使用 @using YY

WPF管理系统自定义分页控件 - WPF特工队内部资料

原文:WPF管理系统自定义分页控件 - WPF特工队内部资料 最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明细逻辑处理: 3.页码总数小于7时显示默认显示,大于7时切换复杂显示: 4.页码数.索引.总条数计算等: 先来一张效果图: 啥也不说了直接上代码 MISPager.xaml部分 <ResourceDictionary xmlns="

自定义分页控件PageList

1 using System; 2 namespace Commons.PageList 3 { 4 interface IPageList 5 { 6 int PageIndex { get; } 7 int PageSize { get; } 8 int TotalCount { get; } 9 int TotalPage { get; } 10 } 11 } 1 using System.Collections; 2 using System.Collections.Generic; 3

freemaker自定义分页控件实现

<link href="${res}/css/pages-jhdb.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="${res}/js/laypage/laypage.js" ></script> #pages-jhdb{padding-left:5px;} /*!

C# winform自定义Label控件使其能设置行距

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.ComponentModel; namespace WindowsFormsApplication10 { public partial class LabelTx : System.Windows.Forms.Label { int lineDistanc

easyui-datagrid自定义分页控件样式

var p = $('#tbTaskList').datagrid('getPager'); $(p).pagination({ pageSize: 20,//每页显示的记录条数,默认为10 pageList: [20, 50, 100],//可以设置每页记录条数的列表 beforePageText: '第',//页数文本框前显示的汉字 afterPageText: '页 共 {pages} 页', displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记