微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

winform 分页控件,源码下载

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_661_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 ))

@H_404_2385@筛选以及分组语句.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;

            }

        }

        
 表名,包括视图

        
string TableName

        
{

            
get

            
{

                
return _TableName;

            }

            
set

            
{

                _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()

        
@H_502_3472@{

            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 控件下载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐