public partial class WinFormPager : UserControl
{
const int PAGE_INDEX_START = ;
/// <summary>
/// 当前页
/// </summary>
public int CurrentPage
{
get;
set;
}
/// <summary>
/// 每页显示条数
/// </summary>
[Description("每页显示条数"), Category("分页设置"), DefaultValue()]
public int PageSize
{
get;
set;
}
/// <summary>
/// 总共多少页
/// </summary>
public int PageTotal
{
get;
set;
}
int recordCount;
public int RecordCount
{
get {
return recordCount;
}
set {
recordCount = value;
SetBtnPrePageAndBtnNextPage();
}
} private Label lbMsg;
private LinkLabel llFirst;
private LinkLabel llPrev;
private LinkLabel llNext;
private LinkLabel llLast;//按钮间距离 public delegate void PageChangeDelegate();
/// <summary>
/// 当前页改变时发生的事件
/// </summary>
[Description("当前页改变时发生的事件"), Category("分页设置")]
public event PageChangeDelegate PageChanged;
public WinFormPager()
{
InitializeComponent();
} /// <summary>
/// 设置上一页、下一页是否可用以及当前页按钮字体颜色
/// </summary>
public void SetBtnPrePageAndBtnNextPage()
{ if (recordCount == )
{
llFirst.Enabled = llPrev.Enabled = llNext.Enabled = llLast.Enabled = false;
}
else
{
PageTotal = Convert.ToInt32(Math.Ceiling(RecordCount * 1.0 / PageSize));//总共多少页
if (CurrentPage == PAGE_INDEX_START)
{
llFirst.Enabled = llPrev.Enabled = false;
}
else
{
llFirst.Enabled = llPrev.Enabled = true;
} if (CurrentPage == PageTotal)
{
llNext.Enabled = llLast.Enabled = false;
}
else
{
llNext.Enabled = llLast.Enabled = true;
}
}
this.lbMsg.Text = string.Format(this.lbMsg.Tag.ToString(), RecordCount, PageSize, CurrentPage, PageTotal);
} private void InitializeComponent()
{
this.lbMsg = new System.Windows.Forms.Label();
this.llFirst = new System.Windows.Forms.LinkLabel();
this.llPrev = new System.Windows.Forms.LinkLabel();
this.llNext = new System.Windows.Forms.LinkLabel();
this.llLast = new System.Windows.Forms.LinkLabel();
this.SuspendLayout();
//
// lbMsg
//
this.lbMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.lbMsg.AutoSize = true;
this.lbMsg.Location = new System.Drawing.Point(, );
this.lbMsg.Name = "lbMsg";
this.lbMsg.Size = new System.Drawing.Size(, );
this.lbMsg.TabIndex = ;
this.lbMsg.Tag = "共{0}条 {1}条/页 当前第{2}页/{3}页";
this.lbMsg.Text = "共{0}条 {1}条/页 当前第{2}页/{3}页";
this.lbMsg.UseCompatibleTextRendering = true;
//
// llFirst
//
this.llFirst.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.llFirst.AutoSize = true;
this.llFirst.Location = new System.Drawing.Point(, );
this.llFirst.Name = "llFirst";
this.llFirst.Size = new System.Drawing.Size(, );
this.llFirst.TabIndex = ;
this.llFirst.TabStop = true;
this.llFirst.Text = "首页";
this.llFirst.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llFirst_LinkClicked);
//
// llPrev
//
this.llPrev.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.llPrev.AutoSize = true;
this.llPrev.Location = new System.Drawing.Point(, );
this.llPrev.Name = "llPrev";
this.llPrev.Size = new System.Drawing.Size(, );
this.llPrev.TabIndex = ;
this.llPrev.TabStop = true;
this.llPrev.Text = "上一页";
this.llPrev.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llPrev_LinkClicked);
//
// llNext
//
this.llNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.llNext.AutoSize = true;
this.llNext.Location = new System.Drawing.Point(, );
this.llNext.Name = "llNext";
this.llNext.Size = new System.Drawing.Size(, );
this.llNext.TabIndex = ;
this.llNext.TabStop = true;
this.llNext.Text = "下一页";
this.llNext.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llNext_LinkClicked);
//
// llLast
//
this.llLast.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.llLast.AutoSize = true;
this.llLast.Location = new System.Drawing.Point(, );
this.llLast.Name = "llLast";
this.llLast.Size = new System.Drawing.Size(, );
this.llLast.TabIndex = ;
this.llLast.TabStop = true;
this.llLast.Text = "末页";
this.llLast.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llLast_LinkClicked);
//
// WinFormPager
//
this.Controls.Add(this.llLast);
this.Controls.Add(this.llNext);
this.Controls.Add(this.llPrev);
this.Controls.Add(this.llFirst);
this.Controls.Add(this.lbMsg);
this.Name = "WinFormPager";
this.Size = new System.Drawing.Size(, );
this.ResumeLayout(false);
this.PerformLayout(); } private void llFirst_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
PageAction(PAGE_INDEX_START);
SetBtnPrePageAndBtnNextPage();
} public void PageAction(int pageNumOperation) {
CurrentPage = pageNumOperation;
if (CurrentPage < PAGE_INDEX_START)
{
CurrentPage = PAGE_INDEX_START;
}
if (CurrentPage > PageTotal) {
CurrentPage = PageTotal;
} if (PageChanged != null)
{
PageChanged();
}
} private void llLast_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
PageAction(PageTotal);
} private void llPrev_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
PageAction(CurrentPage-);
} private void llNext_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
PageAction(CurrentPage + );
} }

调用

public ListViewExtendPager()
{//分页List 控件(此控件包含分页控件)构造函数
InitializeComponent();
this.wfpPager.PageSize = ;
this.wfpPager.PageChanged += new WinFormPager.PageChangeDelegate(
() =>
{
DataBind();
}
);
}
public Action<ListViewExtendPager> dataBindAction;
private void ListViewExtendPager_Load(object sender, EventArgs e)
{
this.wfpPager.CurrentPage = ;
DataBind();
} private void DataBind() {
if (dataBindAction != null) {
dataBindAction(this);
}
}

【NET】Winform分页控件初探的更多相关文章

  1. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  2. winform 分页控件

    http://www.cnblogs.com/liuyunsheng/p/4853387.html http://www.cnblogs.com/wuhuacong/archive/2011/07/0 ...

  3. 开发框架模块视频系列(2)-Winform分页控件介绍

    在软件开发过程中,为了节省开发时间,提高开发效率,统一用户处理界面,尽可能使用成熟.功能强大的分页控件,这款Winform环境下的分页控件,集成了数据分页.内容提示.数据打印.数据导出.表头中文转义等 ...

  4. 类似web风格的 Winform 分页控件

    背景 最近做一个Winform的小程序,需要用到分页,由于之前一直在用 TonyPagerForWinForm.dll ,但该库没有源代码,网上找的也不全面,索性就准备自己改造一个.在园子里翻了一下, ...

  5. [原创]WinForm分页控件制作

    先简单说一下思路: 1.做一个分页控件的导航类,即记录总页数.当前页.每页记录数,下一页.上一页.跳转等操作的页数变更. class PageNavigation{/// <summary> ...

  6. OCUI界面设计:滚动视图与分页控件初探

    滚动视图(UIScrollView) 简单介绍 1.UIScrollView滚动视图能够排列并显示超出自身显示范围的内容. 2.UIScrollView内部整合了多种手势来达到丰富的界面展示效果. 3 ...

  7. Winform分页控件

    设计界面: 控件代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  8. 如何Windows分页控件中增加统计功能

    在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是 ...

  9. winform基础控件总结

    转自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基础 - 常用控件 C# WinForm开发系列 - CheckBox/B ...

随机推荐

  1. 无废话WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  2. linux复制文件命令scp

    linux大多数复制我们的递送工具使用,有着ftp,scp等一下. 当中scp命令很easy快捷, 本机到远程:scp (-r) 本地目录或者文件路径 远程ip:目录 远程到本机:scp (-r) 远 ...

  3. Socket 由浅入深系列--------- 简单实现编程(三)

    socket 由浅入深 原理(一)介绍了一些,以下也就是简单实现,并未考虑其它性能化! 使用TCP的server客户机举例 server 设置一个简单的TCPserver涉及下列步骤: 调用 sock ...

  4. AlphaBlend參数BLENDFUNCTION

    AlphaBlend是Window自带的GDI函数,在作GUI的时候为了达到更美丽的效果我们经常常使用它. BLENDFUNCTION是AlphaBlend用控制透明效果的重要參数. 定义例如以下: ...

  5. android ListView之BaseAdapter的使用方式

    通常在使用自己定义适配器的时候,我们都会掌握一种固定的模式.充分利用convertView+缓存的方式. private ArrayList<ListBean> list ; privat ...

  6. A WebBrowser Toy

    原文:A WebBrowser Toy 记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了 ...

  7. Android单元测试Junit (一)

    1.在eclips中建立一个Android工程,具体信息如下: 2.配置单元测试环境,打开AndroidManifest.xml,具体代码如下所示: <?xml version="1. ...

  8. - C#编程大幅提高OUTLOOK的邮件搜索能力!

    原文:[原创] - C#编程大幅提高OUTLOOK的邮件搜索能力! 使用OUTLOOK, 你有没有遇到过上图的问题? 多达18419封邮件! 太多了, 每次想找一个邮件都非常耗时, 想办法解决这个问题 ...

  9. 图解:SQL Server SSIS包和job的部署攻略

    原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...

  10. 1001 - Another A+B

    1001 - Another A+B Description Give you an integer a, you are to find two another integers which sum ...