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

实现思路

先创建一个用户控件

代码实现

 public partial class PagerControl : UserControl
{
private int record = ; /// <summary>
/// 总记录数
/// </summary>
public int Record
{
get { return record; }
set
{
record = value;
InitPageInfo();
}
} private int pageSize = ; /// <summary>
/// 每页条数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
} private int currentPage = ; /// <summary>
/// 当前页
/// </summary>
public int CurrentPage
{
get { return currentPage; }
set { currentPage = value; }
} public int pageNum = ; /// <summary>
/// 总页码
/// </summary>
public int PageNum
{
get
{
if (Record == )
{
pageNum = ;
}
else
{
if (Record % PageSize > )
{
pageNum = Record / PageSize + ;
}
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 > )
{
if (CurrentPage == )
{
MessageBox.Show("当前已经是首页");
return;
}
else
{
CurrentPage = ;
if (BindSource != null)
{
BindSource(sender, e);
InitPageInfo();
}
}
} } private void btnPre_Click(object sender, EventArgs e)
{
if (Record > )
{
if (CurrentPage == )
{
MessageBox.Show("当前已经是首页");
return;
}
else
{
CurrentPage = CurrentPage - ;
if (BindSource != null)
{
BindSource(sender, e);
InitPageInfo();
}
}
}
} private void btnNext_Click(object sender, EventArgs e)
{
if (Record > )
{
if (CurrentPage == PageNum)
{
MessageBox.Show("当前已经是末页");
return;
}
else
{
CurrentPage = CurrentPage + ;
if (BindSource != null)
{
BindSource(sender, e);
InitPageInfo();
}
}
}
} private void btnLast_Click(object sender, EventArgs e)
{
if (Record > )
{
if (CurrentPage == PageNum)
{
MessageBox.Show("当前已经是末页");
return;
}
else
{
CurrentPage = PageNum;
if (BindSource != null)
{
BindSource(sender, e);
InitPageInfo();
}
}
}
}  private void InitPageInfo()
        {
             if (Record == 0 || (Record > 0 && CurrentPage > pageNum))
            {
                CurrentPage = 1;
            }
            lblInfo.Text = string.Format("共 {0} 条记录  共 {1} 页  当前第 {2} 页", Record, PageNum, CurrentPage);
            txtPage.Text = CurrentPage.ToString();         } private void btnGo_Click(object sender, EventArgs e)
{
if (Record > )
{
if (!string.IsNullOrEmpty(txtPage.Text) && !Regex.IsMatch(txtPage.Text, @"^[\d]*$"))
{
MessageBox.Show("请正确填写页码!");
return;
}
int page = Convert.ToInt32(txtPage.Text);
if (page == )
{
page = ;
}
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 = ;
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事件里。

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

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

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

  2. winform自定义分页控件

    1.控件代码: public partial class PagerControl : UserControl { #region 构造函数 public PagerControl() { Initi ...

  3. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  4. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  5. Mvc自定义分页控件

    MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...

  6. WPF自定义分页控件,样式自定义,简单易用

    WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...

  7. (十二)c#Winform自定义控件-分页控件

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

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

    最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...

  9. WPF 自定义分页控件二

    一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...

随机推荐

  1. nyist 47 过河问题

    http://acm.nyist.net/JudgeOnline/problem.php?pid=47 过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆 ...

  2. STL lower_bound upper_bound binary-search

    STL中的二分查找——lower_bound .upper_bound .binary_search 二分查找很简单,原理就不说了.STL中关于二分查找的函数有三个lower_bound .upper ...

  3. JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出

    POI的下载与安装  请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040 ...

  4. paper 22:kl-divergence(KL散度)实现代码

    这个函数很重要: function KL = kldiv(varValue,pVect1,pVect2,varargin) %KLDIV Kullback-Leibler or Jensen-Shan ...

  5. 16---Net基础加强

    更新中,敬请期待............ Xml介绍 xml读写练习 xml练习1 xml练习2

  6. logstash配合filebeat监控tomcat日志

    环境:logstash版本:5.0.1&&filebeat 5.0.1 ABC为三台服务器.保证彼此tcp能够相互连接. Index服务器A - 接收BC两台服务器的tomcat日志 ...

  7. sql2005镜像实现

    -- ===========================================    -- 无论是主体服务器.镜像服务器, 还是见证服务器    -- 除特别说明外,均需要保证下面的操作 ...

  8. Delphi内嵌汇编语言BASM精要(转帖)

    1 BASM概念简要  汇编语句由指令和零至三个表达式构成.表达式由常数(立即数).寄存器和标识符构成.例如: movsb        // 单指令语句 jmp @Here    // 一个表达式: ...

  9. ERR: Call to undefined function openssl_random_pseudo_bytes()

    最近使用TP5/PHP7,总是出现ERR: Call to undefined function index\index\openssl_random_pseudo_bytes(),才发现是php没有 ...

  10. Java局部变量final

    局部变量和形参带final. 在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,那么A的局部变量需要定义成final.理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局 ...