Winform自定义分页控件的实现
实现效果 有点丑陋 但是功能是没问题的 测试过

实现思路
先创建一个用户控件

代码实现
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自定义分页控件的实现的更多相关文章
- winform 自定义分页控件 及DataGridview数据绑定
分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using Syst ...
- winform自定义分页控件
1.控件代码: public partial class PagerControl : UserControl { #region 构造函数 public PagerControl() { Initi ...
- C# DataGridView自定义分页控件
好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...
- asp.net webform 自定义分页控件
做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...
- Mvc自定义分页控件
MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...
- WPF自定义分页控件,样式自定义,简单易用
WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...
- (十二)c#Winform自定义控件-分页控件
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- WPF管理系统自定义分页控件 - WPF特工队内部资料
最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...
- WPF 自定义分页控件二
一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...
随机推荐
- 面向对象 理解 C#复习
面向对象: 是基于万物皆对象这个哲学观点. 所谓的面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面 通俗点讲: 一切都是对象 举例: 将 ...
- VS2012离线安装Xamarin (含破解补丁)
Xamarin离线安装包 来源于 忘忧草 特此感谢! 离线安装不成功:参考源 http://www.cnblogs.com/zjoch/p/3937014.html / http://www.cnb ...
- sdutoj 2607 Mountain Subsequences
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607 Mountain Subsequence ...
- STL lower_bound upper_bound binary-search
STL中的二分查找——lower_bound .upper_bound .binary_search 二分查找很简单,原理就不说了.STL中关于二分查找的函数有三个lower_bound .upper ...
- C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序
好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...
- C++之路进阶——hdu2222(Keywords Search)
/*Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- javax.servlet.jsp.JspException cannot be resolved to a type
javax.servlet.jsp.PageContext cannot be resolved to a type javax.servlet.jsp.JspException cannot be ...
- struts_24_基于XML校验的规则、特点
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下 ...
- II7下配置SSAS通过HTTP 远程链接访问
IIS7下配置SSAS通过HTTP远程连接 安装环境操作系统:Windows7.Windows Server2008IIS版本:7.5 IIS7下配置SSAS通过HTTP远程连接详细的步骤如下:1.首 ...
- ETM and PTM
ETM:embedded Trace Macrocell PTM:Program Flow Trace Macrocell ETM-A7 macrocell提供Cortex-A7 MPcore的ins ...