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

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

用户控件全部代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace One.UI
{
public partial class PagerControl : UserControl
{
public PagerControl()
{
InitializeComponent();
}
#region 分页字段和属性 private int pageIndex = ;
/// <summary>
/// 当前页数
/// </summary>
public virtual int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
} private int pageSize = ;
/// <summary>
/// 每页记录数
/// </summary>
public virtual int PageSize
{
get { return pageSize; }
set { pageSize = value; }
} private int recordCount = ;
/// <summary>
/// 总记录数
/// </summary>
public virtual int RecordCount
{
get { return recordCount; }
set { recordCount = value; }
} private int pageCount = ;
/// <summary>
/// 总页数
/// </summary>
public int PageCount
{
get
{
if (pageSize != )
{
pageCount = GetPageCount();
}
return pageCount;
}
} #endregion
#region 页码变化时触发事件
public event EventHandler OnPageChanged; #endregion #region 分页及相关事件功能实现 /// <summary>
/// 设窗体控件全部可用
/// </summary>
private void SetFormCtrEnabled()
{
linkFirst.Enabled = true;
linkPrevious.Enabled = true;
linkNext.Enabled = true;
linkLast.Enabled = true;
} /// <summary>
/// 计算总页数
/// </summary>
/// <returns></returns>
private int GetPageCount()
{
if (PageSize == )
{
return ;
}
int pageCount = RecordCount / PageSize;
if (RecordCount % PageSize == )
{
pageCount = RecordCount / PageSize;
}
else
{
pageCount = RecordCount / PageSize + ;
}
return pageCount;
}
/// <summary>
/// 用于客户端调用
/// </summary>
public void DrawControl(int count)
{
recordCount = count;
DrawControl(false);
}
/// <summary>
/// 根据不同的条件,改变页面控件的呈现状态
/// </summary>
private void DrawControl(bool callEvent)
{ txtCurrentPage.Text = PageIndex.ToString();//当前页
lblPageCount.Text = PageCount.ToString();//总页数
lblTotalCount.Text = RecordCount.ToString();//总记录数
txtPageSize.Text = PageSize.ToString();//每页记录数 if (callEvent && OnPageChanged != null)
{
OnPageChanged(this, null);//当前分页数字改变时,触发委托事件
}
SetFormCtrEnabled();
if (PageCount == )//有且仅有一页时
{
linkFirst.Enabled = false;
linkPrevious.Enabled = false;
linkNext.Enabled = false;
linkLast.Enabled = false;
}
else if (PageIndex == )//当前页为第一页时
{
linkFirst.Enabled = false;
linkPrevious.Enabled = false;
}
else if (PageIndex == PageCount)//当前页为最后一页时
{
linkNext.Enabled = false;
linkLast.Enabled = false;
}
} #endregion #region 相关控件事件 //首页按钮
private void linkFirst_Click(object sender, EventArgs e)
{
PageIndex = ;
DrawControl(true);
} //上一页按钮
private void linkPrevious_Click(object sender, EventArgs e)
{
PageIndex = Math.Max(, PageIndex - );
DrawControl(true);
} //下一页按钮
private void linkNext_Click(object sender, EventArgs e)
{
PageIndex = Math.Min(PageCount, PageIndex + );
DrawControl(true);
} //尾页按钮
private void linkLast_Click(object sender, EventArgs e)
{
PageIndex = PageCount;
DrawControl(true);
} /// <summary>
/// 按下enter键,执行跳转页面功能
/// </summary>
private void txtPageNum_KeyPress(object sender, KeyPressEventArgs e)
{
int num = ;
if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > )
{
PageIndex = num;
DrawControl(true);
}
} /// <summary>
/// 跳转页数限制
/// </summary>
private void txtCurrentPage_TextChanged(object sender, EventArgs e)
{
int num = ;
if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > )
{ //TryParse 函数,将字符串转换成等效的整数,返回bool型,判断是否转换成功。
//输入除数字以外的字符是转换不成功的 if (num > PageCount) //输入数量大于最大页数时,文本框自动显示最大页数
{
txtCurrentPage.Text = PageCount.ToString();
}
}
} #endregion
bool isTextChanged = false;
/// <summary>
/// 每页显示的记录数改变时
/// </summary>
private void txtPageSize_TextChanged(object sender, EventArgs e)
{
int num = ;
//输入不符合规范时,默认设置为100
if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= )
{
num = ;
txtPageSize.Text = "";
}
else
{
isTextChanged = true; }
pageSize = num;
}
/// <summary>
/// 光标离开 每页设置文本框时,显示到首页
private void txtPageSize_Leave(object sender, EventArgs e)
{
if (isTextChanged)
{
isTextChanged = false;
linkFirst_Click(null, null);
}
} }
}
用户控件完成后,生成解决方案就会在左侧工具栏中看到刚写好的分页控件,拖入到需要分页的窗体中赋值调用即可;
在窗体加载事件中激活分页控件方法
private void OneForm_Load(object sender, EventArgs e)
{
ShowData();
//激活OnPageChanged事件
pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged); }
分页控件页码发生变化时执行方法
private void pagerControl1_OnPageChanged(object sender, EventArgs e)
{
ShowData();
}
绑定Datagridview方法
private void ShowData()
{
int count;///4.6日
string strWhere = " 1=1 ";
//可以添加where条件 pagerControl1.PageSize = ;//设置显示记录数
ds = bll.GetList(pagerControl1.PageIndex, pagerControl1.PageSize, strWhere, out count);//4.6
dataGridViewX1.DataSource = ds.Tables[];
pagerControl1.DrawControl(count);
}
bll.GetList为数据读取返回dataset类型
public DataSet GetList(int PageIndex, int PageSize, string strWhere, out int count)
{
StringBuilder strSql = new StringBuilder();
//strSql.Append(" select * from ( ");
strSql.Append(" select ROW_NUMBER() over(order by Material_TimeAdd) num,* ");
strSql.Append(" FROM tabel");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
count = DbHelperSQL.Query(strSql.ToString()).Tables[].Rows.Count; strSql.Append(" ) t where t.num between " + ((PageIndex - ) * PageSize + ) + " and " + PageSize * PageIndex);
DataSet ds = DbHelperSQL.Query(" select * from ( " + strSql.ToString()); return ds; }
第一次写东西,希望能够帮助需要的人。。。。。。
winform 自定义分页控件 及DataGridview数据绑定的更多相关文章
- Winform自定义分页控件的实现
实现效果 有点丑陋 但是功能是没问题的 测试过 实现思路 先创建一个用户控件 代码实现 public partial class PagerControl : UserControl { ; /// ...
- 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 ...
随机推荐
- 使用hubuild,mui开发微信app—首页(一)
写在前面 本系列文章我将介绍一下从零开始利用hubuild,mui实现微信app的开发,该系列是个人学习记录,所以在每篇文章中,都是从怎么去实现开始讲解,然后再把实例中涉及知识点做一个概述. 创建一个 ...
- linux下载时提示请尝试移除磁盘中不需要的文件并重试,或者保存到其他位置
因为我是用虚拟机装的linux,所以当时就分配了20G硬盘,下载了几个应用后再下载就提示我这个了.一开始我还以为是因为下载链接的问题,后来才知道原来是因为/tmp的满了. 然后我输入以下连个命令就能正 ...
- 初识Html:Html和CSS的关系
学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户 ...
- 对本地Solr服务器添加IK中文分词器实现全文检索功能
在上一篇随笔中我们提到schema.xml中<field/>元素标签的配置,该标签中有四个属性,分别是name.type.indexed与stored,这篇随笔将讲述通过设置type属性的 ...
- 2017-2-21 C#基础 if条件语句,作用域
今天学了if 条件语句和作用域.作用域可以用一句话来概括:儿子可以用爹的所有东西,爹不可以用儿子的任何东西.If条件语句我用几个练习题来解释. 1."请输入年份:" 判断是否是闰年 ...
- HAProxy实战
实验目的 测试基于haproxy的反代和负载均衡配置 测试keepalived高可用haproxy的效果 实验要点 (1) 动静分离discuzx,动静都要基于负载均衡实现: (2) 进一步测试在ha ...
- webservice基本功能介绍
WebService, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据WebService规范实施的应用之间, 无论它们所使用的语言. 平台或内 ...
- 启程、对C的继承
Cocoa和Object-c是苹果公司OS X和IOS操作系统的核心. .m扩展名表示文件使用的是Objective-c代码. 与C语言一样,Objective-c使用头文件来包含结构体.符号 ...
- Laravel路由和控制器的绑定
路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由. Route::get('/', function () { return view('welcom ...
- ARZhu的数论初步
数论 2017年3月4日02:11:35 gcd 1. 原理: gcd( a, b ) = gcd( b, a - b ) -> gcd( a, b ) = gcd( b, b % a ) 2. ...