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

实现思路

先创建一个用户控件

代码实现

 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. zepto和jquery的区别,zepto的不同使用8条小结 会JS就会zepto

    1. Zepto 对象 不能自定义事件 例如执行: $({}).bind('cust', function(){}); 结果:  TypeError: Object has no method 'ad ...

  2. Linux内核之旅 List_entry()

    #include "iostream" #define List_entry(type,member)\ (type *)(()->data)) ) using namesp ...

  3. paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)

    1. 早期C. Koch与S. Ullman的研究工作. 他们提出了非常有影响力的生物启发模型. C. Koch and S. Ullman . Shifts in selective visual ...

  4. ralink网卡驱动的下载地址集合

    linuxMT7612U11/7/2014v3.0.0.1http://cdn-cw.mediatek.com/Downloads/linux/MT7612U_DPO_LinuxSTA_3.0.0.1 ...

  5. 关于wxwidgets图形界面的关闭窗口的按钮无效的解决办法

    这是使用wxsmith设计界面时的情况,如果用纯代码写的界面,关闭按钮就很奇怪地有效 道听途说,窗口的关闭是由一个方法控制着.大概是这样的: void PlainFrame::OnClose(wxCl ...

  6. SQL SERVER 2008 R2配置管理器出现“远程过程调用失败”【0x800706be】的解决办法

    以前SQL Server 2008 不能登陆的时候,总是通过“计算机管理”→“SQL Server服务”更改一下,"SQL Server(MSSQLSERVER)".可是现在出现的 ...

  7. $.extend,$.fn.extend,$.fn的区别

    jQuery.extend(object) 为jQuery类添加类方法,可以理解为添加静态方法.如: jQuery.extend({ min: function(a, b) { return a &l ...

  8. fflush函数的深入理解

    本人昵称sky,欢迎与各位多多交流学习 这样的c程序想必大家都不陌生,fflush()这个函数有清除输入输出缓存的功能,那很多人就会问了,什么是清除输入输出缓存呢? 其实就是我们在printf输出的时 ...

  9. 1.struts2开发流程

    1下载struts包,下载地址为:http://archive.apache.org/dist/struts/library/   2.解压后将lib下的这几个jar包放到自己写的web项目中 放到这 ...

  10. tr DEMO

    测试数据: [weblogic@etp-mall-dev7][/tmp]$ cat msn.txt aaa bbb bbb ccc ccc ddd bbb eee aaa ccc bbb sss 转换 ...