加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

winform 分页控件,源码下载

发布时间:2021-05-20 14:34:22 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:winform 分页控件,源码下载 http://files.cnblogs.com/nosnowwolf/Pager.rar?控件下载 以前都是从事B/S开发,由于公司有个比较大的C/S项目,在使用DATAGRIDVIEW的时候,显示数据量比较大,所以才用分页模式,也不知道这样是否正确。 想找个C/S下面的分页控

winform 分页控件,源码下载

http://files.cnblogs.com/nosnowwolf/Pager.rar?控件下载

以前都是从事B/S开发,由于公司有个比较大的C/S项目,在使用DATAGRIDVIEW的时候,显示数据量比较大,所以才用分页模式,也不知道这样是否正确。

想找个C/S下面的分页控件,都没有什么好的,就自己跟B/S下的分页控件,修改成WINFORM下面的。

首先创建一个用户控件名称为pager,在控件中拖入bindingNavigator和bindingSource,修改bindingNavigator,加入必要的一些控件。

效果如下:

代码实现如下:

?

复制代码

namespace ?WindowsApp.MyControl

{

????
///?<summary>

????
?申明委托

????
</summary><param?name="e"></param>

????
<returns></returns>

????public?delegate?int?EventPagingHandler(EventPagingArg?e);

????
?分页控件呈现

????
</summary>

????partial?class?Pager?:?UserControl

????
{

????????
public?Pager()

????????
{

????????????InitializeComponent();

????????}

????????
event?EventPagingHandler?EventPaging;

????????

????????
?每页显示记录数

????????
</summary>

????????private?int?_pageSize?=?20;

????????
int?PageSize

????????
{

????????????
get?{?return?_pageSize;?}

????????????
set

????????????
{

????????????????_pageSize?
=?value;

????????????????GetPageCount();

????????????}

????????}


????????
int?_nMax?=?0;

????????
?总记录数

????????
int?NMax

????????
{

????????????
get?{?return?_nMax;?}

????????????
set

????????????
{

????????????????_nMax?
=?value;

????????????????GetPageCount();

????????????}

????????}


????????
int?_pageCount?=?0;

????????
?页数=总记录数/每页显示记录数

????????
int?PageCount

????????
{

????????????
get?{?return?_pageCount;?}

????????????
set?{?_pageCount?=?value;?}

????????}


????????
int?_pageCurrent?=?0;

????????
@H_878_502@?当前页号

????????
int?PageCurrent

????????
{

????????????
get?{?return?_pageCurrent;?}

????????????
set?{?_pageCurrent?=?value;?}

????????}



????????
void?GetPageCount()

????????
{

????????????
if?(this.NMax?>?0)

????????????
{

????????????????
this.PageCount?=?Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.NMax)?/?Convert.ToDouble(this.PageSize)));

????????????}

????????????
else

????????????
{

????????????????
this.PageCount?=?0;

????????????}

????????}


????????
?翻页控件数据绑定的方法

????????
void?Bind()

????????
{

????????????
this.EventPaging?!=?null)

????????????
{

????????????????
this.NMax?=?this.EventPaging(new?EventPagingArg(this.PageCurrent));

????????????}


????????????
this.PageCurrent?>?this.PageCount)

????????????
{

????????????????
this.PageCurrent?=?this.PageCount;

????????????}

????????????
this.PageCount?==?1)

????????????
{

????????????????
this.PageCurrent?=?1;

????????????}

????????????lblPageCount.Text?
=?this.PageCount.ToString();

????????????
this.lblMaxPage.Text?=?""+this.NMax.ToString()+条记录";

????????????
this.txtCurrentPage.Text?=?this.PageCurrent.ToString();


????????????
this.PageCurrent?==?1)

????????????
{

????????????????
this.btnPrev.Enabled?=?false;

????????????????
this.btnFirst.Enabled?=?false;

????????????}

????????????
else

????????????
{

????????????????btnPrev.Enabled?
=?true;

????????????????btnFirst.Enabled?
=?true;

????????????}


????????????
this.PageCurrent?==?this.PageCount)

????????????
{

????????????????
this.btnLast.Enabled?=?this.btnNext.Enabled?=?else

????????????
{

????????????????btnLast.Enabled?
=?true;

????????????????btnNext.Enabled?
=?this.NMax?==?0)

????????????
{

????????????????btnNext.Enabled?
=?false;

????????????????btnLast.Enabled?
=?false;

????????????????btnFirst.Enabled?
=?false;

????????????????btnPrev.Enabled?
=?false;

????????????}

????????}


????????
void?btnFirst_Click(object?sender,?EventArgs?e)

????????
{

????????????PageCurrent?
=?1;

????????????
this.Bind();

????????}


????????
void?btnPrev_Click(

????????
{

????????????PageCurrent?
-=?if?(PageCurrent?<=?0)

????????????
{

????????????????PageCurrent?
=?1;

????????????}

????????????
void?btnNext_Click(

????????
{

????????????
this.PageCurrent?+=?if?(PageCurrent?>?PageCount)

????????????
{

????????????????PageCurrent?
=?PageCount;

????????????}

????????????
void?btnLast_Click(

????????
{

????????????PageCurrent?
=?PageCount;

????????????
void?btnGo_Click(

????????
{

????????????
this.txtCurrentPage.Text?!=?null?&&?txtCurrentPage.Text?!=?"")

????????????
{

????????????????
if?(Int32.TryParse(txtCurrentPage.Text,?out?_pageCurrent))

????????????????
{

????????????????????
this.Bind();

????????????????}

????????????????
else

????????????????
{

????????????????????Common.MessageProcess.ShowError(
输入数字格式错误!");

????????????????}

????????????}

????????}


????}

????
?自定义事件数据基类

????
class?EventPagingArg?:?EventArgs

????
{

????????
int?_intPageIndex;

????????
public?EventPagingArg(int?PageIndex)

????????
{

????????????_intPageIndex?
=?PageIndex;

????????}

????}

}

复制代码

?

控件功能基本实现。

如何绑定数据呢?

大数量分页,使用存储过程。

这个存储过程是网络上考的,呵呵。我把它给贴出来,希望原作者别砸我砖头。。。。。

?

复制代码




ALTER ???? PROCEDURE ?SP_Pagination

/*

***************************************************************

**?千万数量级分页存储过程?**

***************************************************************

参数说明:

1.Tables?:表名称,视图

2.PrimaryKey?:主关键字

3.Sort?:排序语句,不带Order?By?比如:NewsID?Desc,OrderRows?Asc

4.CurrentPage?:当前页码

5.PageSize?:分页尺寸

6.Filter?:过滤语句,不带Where?

7.Group?:Group语句,不带Group?By

效果演示:http://www.cn5135.com/_App/Enterprise/QueryResult.aspx

**************************************************************
*/

(

@Tables ? varchar ( 2000 ),

@PrimaryKey ? 500 ),0)">@Sort ? 500 )? = ? NULL ,0)">@CurrentPage ? int ? = ? 1 ,0)">@PageSize ? 10 ,0)">@Fields ? 2000 )? = ? ' * ' ,0)">@Filter ? 1000 )? @Group ? NULL

)

AS

默认排序*/

IF ? IS ? NULL ? OR ? @Sort ? ''

SET ? @PrimaryKey

DECLARE ? @SortTable ? 1000 )

@SortName ? @strSortColumn ? @operator ? char ( 2 )

@type ? @prec ? int

设定排序语句.IF ? CHARINDEX ( DESC @Sort ) > 0

BEGIN

@strSortColumn ? REPLACE ( @Sort ,? '' )

@operator ? <= '

END

ELSE

ASC @Sort )? >= . @strSortColumn )? > ? @SortTable ? SUBSTRING ( @strSortColumn ,? 0 ,0)">@strSortColumn ))

@SortName ? + ? LEN ( @Tables

@strSortColumn

SELECT ? @type = t.name,0)">@prec = c.prec

FROM ?sysobjects?o?

JOIN ?syscolumns?c? on ?o.id = c.id

JOIN ?systypes?t? on ?c.xusertype = t.xusertype

WHERE ?o.name? AND ?c.name? @SortName

char @type )? @type ? + ? ( ' ? CAST ( AS ? varchar )? ) @strPageSize ? 500 )

@strStartRow ? @strFilter ? @strSimpleFilter ? @strGroup ? 1000 )

默认当前页@CurrentPage ? < ? 1

1

设置分页参数.@strPageSize ? 500 ))

@strStartRow ? CAST ((( - ? 1 ) * @PageSize ? 1 )? 500 ))

筛选以及分组语句.IS ? NOT ? AND ? @Filter ? != ? @strFilter ? ?WHERE? + ? ? @strSimpleFilter ? ?AND? @Group ? @strGroup ? ?GROUP?BY? ''

执行查询语句EXEC (


DECLARE?@SortColumn?

SET?ROWCOUNT?

SELECT?@SortColumn=
?FROM? @Tables ? ?ORDER?BY?

SELECT?
@Fields ? ?@SortColumn?

'

)



复制代码

?

使用该存储过陈,得到数据,将数据绑定到数据控件,提供了一个pageData类

复制代码

???? ?数据源提供

????
</summary>

???? public ? class ?PageData

????
{

????????
int?_PageSize?=?10;

????????
int?_PageIndex?=?1;

????????
int?_PageCount?=?0;

????????
int?_TotalCount?=?string?_TableName;//表名

????????string?_QueryFieldName?=?*";表字段FieldStrstring?_OrderStr?=?string.Empty;?排序_SortStrstring?_QueryCondition?=?string.Empty;查询的条件?RowFilterstring?_PrimaryKey?=?主键

?????????显示页数

????????
int?PageSize

????????
{

????????????
get

????????????
{

????????????????
return?_PageSize;


????????????}

????????????
set

????????????
{

????????????????_PageSize?
=?value;

????????????}

????????}

????????
?当前页

????????
int?PageIndex

????????
{

????????????
get

????????????
{

????????????????
return?_PageIndex;

????????????}

????????????
set

????????????
{

????????????????_PageIndex?
=?value;

????????????}

????????}

????????
?总页数

????????
int?PageCount

????????
{

????????????
get

????????????
{

????????????????
return?_PageCount;

????????????}

????????}

????????
int?TotalCount

????????
{

????????????
get

????????????
{

????????????????
return?_TotalCount;

????????????}

????????}

????????
@H_690_3012@?表名,包括视图

????????
string?TableName

????????
{

????????????
get

????????????
{

????????????????
return?_TableName;

????????????}

????????????
set

@H_301_3071@

????????????
{

????????????????_TableName?
=?value;

????????????}

????????}

????????
?表字段FieldStr

????????
string?QueryFieldName

????????
{

????????????
get

????????????
{

????????????????
return?_QueryFieldName;

????????????}

????????????
set

????????????
{

????????????????_QueryFieldName?
=?value;

????????????}

????????}

????????
?排序字段

????????
string?OrderStr

????????
{

????????????
get

????????????
{

????????????????
return?_OrderStr;

????????????}

????????????
set

????????????
{

????????????????_OrderStr?
=?value;

????????????}

????????}

????????
?查询条件

????????
string?QueryCondition

????????
{

????????????
get

????????????
{

????????????????
return?_QueryCondition;

????????????}

????????????
set

????????????
{

????????????????_QueryCondition?
=?value;

????????????}

????????}

????????
?主键

????????
string?PrimaryKey

????????
{

????????????
get?{

????????????????
return?_PrimaryKey;

????????????}

????????????
set?{

????????????????_PrimaryKey?
=?value;

????????????}

????????}

????????
public?DataSet?QueryDataTable()

????????
{

????????????sqlParameter[]?parameters?
=?{

????????????????????
new?sqlParameter(@Tables",?sqlDbType.VarChar,?255),

????????????????????
@PrimaryKey"?,?sqlDbType.VarChar?,????

????????????????????
@Sort255?),0)">@CurrentPage@PageSize

????????????????????
@Fields@Filter1000),0)">@Group1000?)

????????????????????}
;

????????????parameters[
0].Value?=?_TableName;

????????????parameters[
1].Value?=?_PrimaryKey;

????????????parameters[
2].Value?=?_OrderStr;

????????????parameters[
3].Value?=?PageIndex;

????????????parameters[
4].Value?=?PageSize;

????????????parameters[
5].Value?=_QueryFieldName;

????????????parameters[
6].Value?=?_QueryCondition;

????????????parameters[
7].Value?=?string.Empty;

????????????DataSet?ds?
=?DbHelpersql.RunProcedure(SP_Paginationdd");

????????????_TotalCount?
=?GetTotalCount();

????????????
if?(_TotalCount?==?0)

????????????
{

????????????????_PageIndex?
=?0;

????????????????_PageCount?
=?0;

????????????}

????????????
else

????????????
{

????????????????_PageCount?
=?_TotalCount?%?_PageSize?==?0???_TotalCount?/?_PageSize?:?_TotalCount?/?_PageSize?+?1;

????????????????
if?(_PageIndex?>?_PageCount)

????????????????
{

????????????????????_PageIndex?
=?_PageCount;


????????????????????parameters[
4].Value?=?_PageSize;


????????????????????ds?
=?QueryDataTable();

????????????????}

????????????}

????????????
return?ds;

????????}


????????
int?GetTotalCount()

????????
{

????????????
string?strsql?=??select?count(1)?from?"+_TableName;

????????????
if?(_QueryCondition?!=?string.Empty)

????????????
{

????????????????strsql?
+=?where?"?+?_QueryCondition;

????????????}

????????????
return?int.Parse(DbHelpersql.GetSingle(strsql).ToString());

????????}

????}

复制代码

?

好了,在页面放个DATAGRIDVIEW 拖入控件pager

?

?

复制代码

?? private ? void ?ReceiveOrderJLForm_Load( object ?sender,?EventArgs?e)

????????
{

????????????
this.pager1.PageCurrent?=?this.pager1.Bind();

????????}

????????
int ?dgvBind()

????????
{

????????????WindowsApp.MyControl.PageData?pageData?
=?new?WindowsApp.MyControl.PageData();

????????????pageData.TableName?
=?T_ReceiveOrder";

????????????pageData.PrimaryKey?
=?ReceiveOrderID";

????????????pageData.OrderStr?
=?ReceiveOrderID?desc";

????????????pageData.PageIndex?
=?this.pager1.PageCurrent;

????????????pageData.PageSize?
=?this.pager1.PageSize;

????????????pageData.QueryCondition?
=?_strsql?+?strWhere.ToString();

????????????pageData.QueryFieldName?
=?";


????????????
this.pager1.bindingSource.DataSource?=?pageData.QueryDataTable().Tables[0];

????????????
this.pager1.bindingNavigator.BindingSource?=?pager1.bindingSource;

????????????dgvReceiveOrder.AutoGenerateColumns?
=?false;

????????????dgvReceiveOrder.DataSource?
=?this.pager1.bindingSource;

????????????
return?pageData.TotalCount;

????????}

????????
int ?pager1_EventPaging(WindowsApp.MyControl.EventPagingArg?e)

????????
{

????????????
return?dgvBind();

????????}

复制代码

?效果如下

?

?

?http://files.cnblogs.com/nosnowwolf/Pager.rar?控件下载

分类:? WinForm 标签:? 分页控件,? winfrom,? datagridview

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读