惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
F
Fortinet All Blogs
博客园_首页
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
D
Docker
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
罗磊的独立博客
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
博客园 - 三生石上(FineUI控件)
量子位
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Blog of Author Tim Ferriss
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
Cloudbric
Cloudbric
博客园 - 司徒正美
H
Help Net Security
人人都是产品经理
人人都是产品经理
Application and Cybersecurity Blog
Application and Cybersecurity Blog
L
LangChain Blog
Latest news
Latest news
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
博客园 - Franky
S
Security Affairs
W
WeLiveSecurity
F
Full Disclosure
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
美团技术团队
PCI Perspectives
PCI Perspectives
C
Check Point Blog
Spread Privacy
Spread Privacy

博客园 - love .net FrameWork

SQL Server 2005 中的分区表和索引应用 WPF 插件开发(.NET Framework 3.5 System.Addin) 一生回味的100句凡人语录 经典短句 一生中必看的30个故事 别人看不懂的悲伤 Most of the 10 classic love sentence 5月28日 《魔兽争霸3》微操作基础教程 数据访问抽象基础类 无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login” - love .net FrameWork 看到一很好的SQL代码 拼接sql语句 关于ibatis.net框架(NPetshop学习) Stratrgy 策略模式 Factory Method 工厂方法模式(创建型模式) SQL各种日期转换代码大全 在ASP.NET中使用Session常见问题集锦(转) Sys.ArgumentOutOfRangeException: Value must be an integer - love .net FrameWork
Windows Forms 分页控件
love .net FrameWork · 2009-07-28 · via 博客园 - love .net FrameWork

开发WinForm项目中自己写的一个分页控件,没有什么技术含量,不过自己感觉还是蛮好用的,拿出来和大家分享一下。
一、使用到的WinForm控件有连个toolStrip和一个imageList, imageList主要负责保存四个翻页的小图片,

二、分页控件工作原理
      1.首先让控件继承UserControl, INotifyPropertyChanged,继承INotifyPropertyChanged,主要是实现当用户点击翻页或者更改文本框里的数字,那么当前列表自动更新信息,如果要做成点击按钮翻页可以直接写个委托来定义一个事件就可以了,这里这么实现也是为了操作方便。
     实现代码:

    public partial class WinFromPager : UserControl, INotifyPropertyChanged
    {
    }

      2. 定义事件模型,实际上时定义一个在列表页面执行翻页的事件

 public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName)
        {
            
if (PropertyChanged != null)
            {
                PropertyChanged(
thisnew PropertyChangedEventArgs(propertyName));
            }
        }

      3. 定义属性

        private int _mixPage = 1;
        
private int _maxPage = 1;
        
private int _currentPage = 1;
        
private int _RecordCount = 0;
        
private int _pageSize = 20;
        
private string _lblPageInfo = " 当前页({0})/总共({1})页,共({2})条记录,每页({3})条";

        /// <sumary>
        
/// 第一页索引值
        
/// </summary>
        public int MixPage
        {
            
get
            {
                
return _mixPage;
            }
            
set
            {
                _mixPage 
= value;
            }
        }
/// <summary>
        
/// 总页数
        
/// </summary>
        public int MaxPage
        {
            
get
            {
                
return _maxPage;
            }
            
set
            {
                _maxPage 
= value;
            }
        }
/// <summary>
        
/// 当前页索引
        
/// </summary>
        public int CurrentPage
        {
            
get
            {
                
return this._currentPage;
            }
            
set
            {
                
this._currentPage = value;
            }
        }
/// <summary>
        
/// 每页显示记录数
        
/// </summary>
        public int PageSize
        {
            
get
            {
                
return this._pageSize;
            }
            
set
            {
                
this._pageSize = value;
            }
        }
/// <summary>
        
/// 开始索引
        
/// </summary>
        public int StartIndex
        {
            
get
            {
                
return ((CurrentPage - 1* PageSize) + 1;
            }
        }
/// <summary>
        
/// 结束索引
        
/// </summary>
        public int EndIndex
        {
            
get
            {
                
if ((RecordCount - ((CurrentPage - 1* PageSize)) >= PageSize)
                {
                    
return CurrentPage* PageSize;
                }
                
else
                {
                    
return RecordCount;
                }
            }
        }
/// <summary>
        
/// 总记录
        
/// </summary>
        public int RecordCount
        {
            
set
            {
                _RecordCount 
= value;
                GetPageCount();
            }
            
get
            {
                
return _RecordCount;
            }
        }
/// <summary>
        
/// 查询当前索引页
        
/// </summary>
        public int CurrentIndex
        {
            
set
            {
                
this._currentPage = value;
                
this.lblCurrectPage.Text = _mixPage.ToString();
            }
        }

     4. 显示页面分页信息

 /// <summary>
        
/// 显示页面分页信息
        
/// </summary>
        private void GetPageCount()
        {
            
if (RecordCount == 0)
            {
                MaxPage 
= 1;
            }
            
else
            {
                
if (this.RecordCount % PageSize == 0)
                {
                    MaxPage 
= this.RecordCount / PageSize;
                }
                
else
                {
                    MaxPage 
= this.RecordCount / PageSize + 1;
                }
            }
            
if (this.CurrentPage == MixPage)
            {
                
this.First.Enabled = false;
                
this.Pre.Enabled = false;if (RecordCount <= PageSize)
                {
                    
this.Next.Enabled = false;
                    
this.Last.Enabled = false;
                }
                
else
                {
                    
this.Next.Enabled = true;
                    
this.Last.Enabled = true;
                }
            }
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
        }

      5. 定义事件

        //首页
        private void First_Click(object sender, EventArgs e)
        {
            
this.CurrentPage = MixPage;
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
            
this.First.Enabled = false;
            
this.Pre.Enabled = false;
            
this.Next.Enabled = true;
            
this.Last.Enabled = true;
            OnPropertyChanged(
"CurrentPage");
        }
//上一页
        private void Pre_Click(object sender, EventArgs e)
        {
            
this.CurrentPage = this.CurrentPage - 1;
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
            
if (this.CurrentPage == this.MixPage)
            {
                
this.First.Enabled = false;
                
this.Pre.Enabled = false;
                
this.Next.Enabled = true;
                
this.Last.Enabled = true;
            }
            
else
            {
                
this.First.Enabled = true;
                
this.Pre.Enabled = true;
                
this.Next.Enabled = true;
                
this.Last.Enabled = true;
            }
            OnPropertyChanged(
"CurrentPage");
        }
//下一页
        private void Next_Click(object sender, EventArgs e)
        {
            
this.CurrentPage = this.CurrentPage + 1;
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
            
if (this.CurrentPage == MaxPage)
            {
                
this.First.Enabled = true;
                
this.Pre.Enabled = true;
                
this.Next.Enabled = false;
                
this.Last.Enabled = false;
            }
            
else
            {
                
this.First.Enabled = true;
                
this.Pre.Enabled = true;
                
this.Next.Enabled = true;
                
this.Last.Enabled = true;
            }
            OnPropertyChanged(
"CurrentPage");
        }
//末页
        private void Last_Click(object sender, EventArgs e)
        {
            
this.CurrentPage = MaxPage;
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
            
this.First.Enabled = true;
            
this.Pre.Enabled = true;
            
this.Next.Enabled = false;
            
this.Last.Enabled = false;
            OnPropertyChanged(
"CurrentPage");
        }
private void lblCurrectPage_TextChanged(object sender, EventArgs e)
        {
            
if (!String.IsNullOrEmpty(lblCurrectPage.Text))
            {
                
this.CurrentPage = int.Parse(lblCurrectPage.Text);
            }
            
else
            {
                
this.CurrentPage = MixPage;
            }
            
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
            
this.lblMaxPage.Text = "/" + MaxPage;
            
this.lblCurrectPage.Text = CurrentPage.ToString();
            
if (this.CurrentPage == this.MaxPage)
            {
                
this.First.Enabled = true;
                
this.Pre.Enabled = true;
                
this.Next.Enabled = false;
                
this.Last.Enabled = false;
            }
            
else if (this.CurrentPage == this.MixPage)
            {
                
this.First.Enabled = false;
                
this.Pre.Enabled = false;
                
this.Next.Enabled = true;
                
this.Last.Enabled = true;
            }
            
else
            {
                
this.First.Enabled = true;
                
this.Pre.Enabled = true;
                
this.Next.Enabled = true;
                
this.Last.Enabled = true;
            }
            
if (this.lblCurrectPage.Text != "")
            {
                
if (int.Parse(this.lblCurrectPage.Text) > MaxPage)
                {
                    MessageBox.Show(
"不存在输入页码数据!""输入信息错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    
this.lblCurrectPage.Text = MixPage.ToString();
                    
this.First.Enabled = false;
                    
this.Pre.Enabled = false;
                    
this.Next.Enabled = false;
                    
this.Last.Enabled = false;
                }
            }
            OnPropertyChanged(
"CurrentPage");
        }
private void lblCurrectPage_KeyPress(object sender, KeyPressEventArgs e)
        {
            
if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13)//文本框里只能输入数字
            {
                e.Handled 
= true;
            }
        }

控件基本完成。

三、调用方法
在列表页面的调用方法:
绑定列表信息:

 private void Bind()
 {
            DataList.DataBoxList(dataGridView1, winFromPager1.StartIndex, winFromPager1.EndIndex, strWhere.ToString());
 }

dataGridView1:绑定列表控件名称
winFromPager1.StartIndex:开始索引
winFromPager1.EndIndex:  结束索引
strWhere.ToString(): 查询条件

分页事件:

 private void winFromPager1_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
            Bind(); //绑定列表
 }

效果图: