winform 分页控件分享(二)
大數(shù)量分頁(yè),使用存儲(chǔ)過(guò)程。
這個(gè)存儲(chǔ)過(guò)程是網(wǎng)絡(luò)上考的,呵呵。我把它給貼出來(lái),希望原作者別砸我磚頭。。。。。
?
ALTER????PROCEDURE?SP_Pagination
/**//*
***************************************************************
**?千萬(wàn)數(shù)量級(jí)分頁(yè)存儲(chǔ)過(guò)程?**
***************************************************************
參數(shù)說(shuō)明:
1.Tables?:表名稱,視圖
2.PrimaryKey?:主關(guān)鍵字
3.Sort?:排序語(yǔ)句,不帶Order?By?比如:NewsID?Desc,OrderRows?Asc
4.CurrentPage?:當(dāng)前頁(yè)碼
5.PageSize?:分頁(yè)尺寸
6.Filter?:過(guò)濾語(yǔ)句,不帶Where?
7.Group?:Group語(yǔ)句,不帶Group?By
效果演示:http://www.cn5135.com/_App/Enterprise/QueryResult.aspx
***************************************************************/
(
@Tables?varchar(2000),
@PrimaryKey?varchar(500),
@Sort?varchar(500)?=?NULL,
@CurrentPage?int?=?1,
@PageSize?int?=?10,
@Fields?varchar(2000)?=?'*',
@Filter?varchar(1000)?=?NULL,
@Group?varchar(1000)?=?NULL
)
AS
/**//*默認(rèn)排序*/
IF?@Sort?IS?NULL?OR?@Sort?=?''
SET?@Sort?=?@PrimaryKey
DECLARE?@SortTable?varchar(1000)
DECLARE?@SortName?varchar(1000)
DECLARE?@strSortColumn?varchar(1000)
DECLARE?@operator?char(2)
DECLARE?@type?varchar(1000)
DECLARE?@prec?int
/**//*設(shè)定排序語(yǔ)句.*/
IF?CHARINDEX('DESC',@Sort)>0
BEGIN
SET?@strSortColumn?=?REPLACE(@Sort,?'DESC',?'')
SET?@operator?=?'<='
END
ELSE
BEGIN
IF?CHARINDEX('ASC',?@Sort)?=?0
SET?@strSortColumn?=?REPLACE(@Sort,?'ASC',?'')
SET?@operator?=?'>='
END
IF?CHARINDEX('.',?@strSortColumn)?>?0
BEGIN
SET?@SortTable?=?SUBSTRING(@strSortColumn,?0,?CHARINDEX('.',@strSortColumn))
SET?@SortName?=?SUBSTRING(@strSortColumn,?CHARINDEX('.',@strSortColumn)?+?1,?LEN(@strSortColumn))
END
ELSE
BEGIN
SET?@SortTable?=?@Tables
SET?@SortName?=?@strSortColumn
END
SELECT?@type=t.name,?@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?=?@SortTable?AND?c.name?=?@SortName
IF?CHARINDEX('char',?@type)?>?0
SET?@type?=?@type?+?'('?+?CAST(@prec?AS?varchar)?+?')'
DECLARE?@strPageSize?varchar(500)
DECLARE?@strStartRow?varchar(500)
DECLARE?@strFilter?varchar(1000)
DECLARE?@strSimpleFilter?varchar(1000)
DECLARE?@strGroup?varchar(1000)
/**//*默認(rèn)當(dāng)前頁(yè)*/
IF?@CurrentPage?<?1
SET?@CurrentPage?=?1
/**//*設(shè)置分頁(yè)參數(shù).*/
SET?@strPageSize?=?CAST(@PageSize?AS?varchar(500))
SET?@strStartRow?=?CAST(((@CurrentPage?-?1)*@PageSize?+?1)?AS?varchar(500))
/**//*篩選以及分組語(yǔ)句.*/
IF?@Filter?IS?NOT?NULL?AND?@Filter?!=?''
BEGIN
SET?@strFilter?=?'?WHERE?'?+?@Filter?+?'?'
SET?@strSimpleFilter?=?'?AND?'?+?@Filter?+?'?'
END
ELSE
BEGIN
SET?@strSimpleFilter?=?''
SET?@strFilter?=?''
END
IF?@Group?IS?NOT?NULL?AND?@Group?!=?''
SET?@strGroup?=?'?GROUP?BY?'?+?@Group?+?'?'
ELSE
SET?@strGroup?=?''
/**//*執(zhí)行查詢語(yǔ)句*/
EXEC(
'
DECLARE?@SortColumn?'?+?@type?+?'
SET?ROWCOUNT?'?+?@strStartRow?+?'
SELECT?@SortColumn='?+?@strSortColumn?+?'?FROM?'?+?@Tables?+?@strFilter?+?'?'?+?@strGroup?+?'?ORDER?BY?'?+?@Sort?+?'
SET?ROWCOUNT?'?+?@strPageSize?+?'
SELECT?'?+?@Fields?+?'?FROM?'?+?@Tables?+?'?WHERE?'?+?@strSortColumn?+?@operator?+?'?@SortColumn?'?+?@strSimpleFilter?+?'?'?+?@strGroup?+?'?ORDER?BY?'?+?@Sort?+?'
'
)
?
使用該存儲(chǔ)過(guò)陳,得到數(shù)據(jù),將數(shù)據(jù)綁定到數(shù)據(jù)控件,提供了一個(gè)pageData類
????/**?<summary>
????///?數(shù)據(jù)源提供
????///?</summary>
????public?class?PageData
???? {
????????private?int?_PageSize?=?10;
????????private?int?_PageIndex?=?1;
????????private?int?_PageCount?=?0;
????????private?int?_TotalCount?=?0;
????????private?string?_TableName;//表名
????????private?string?_QueryFieldName?=?"*";//表字段FieldStr
????????private?string?_OrderStr?=?string.Empty;?//排序_SortStr
????????private?string?_QueryCondition?=?string.Empty;//查詢的條件?RowFilter
????????private?string?_PrimaryKey?=?string.Empty;//主鍵
????????/**?<summary>
????????///?顯示頁(yè)數(shù)
????????///?</summary>
????????public?int?PageSize
???????? {
????????????get
???????????? {
????????????????return?_PageSize;
????????????}
????????????set
???????????? {
????????????????_PageSize?=?value;
????????????}
????????}
????????/**?<summary>
????????///?當(dāng)前頁(yè)
????????///?</summary>
????????public?int?PageIndex
???????? {
????????????get
???????????? {
????????????????return?_PageIndex;
????????????}
????????????set
???????????? {
????????????????_PageIndex?=?value;
????????????}
????????}
????????/**?<summary>
????????///?總頁(yè)數(shù)
????????///?</summary>
????????public?int?PageCount
???????? {
????????????get
???????????? {
????????????????return?_PageCount;
????????????}
????????}
????????/**?<summary>
????????///?總記錄數(shù)
????????///?</summary>
????????public?int?TotalCount
???????? {
????????????get
???????????? {
????????????????return?_TotalCount;
????????????}
????????}
????????/**?<summary>
????????///?表名,包括視圖
????????///?</summary>
????????public?string?TableName
???????? {
????????????get
???????????? {
????????????????return?_TableName;
????????????}
????????????set
???????????? {
????????????????_TableName?=?value;
????????????}
????????}
????????/**?<summary>
????????///?表字段FieldStr
????????///?</summary>
????????public?string?QueryFieldName
???????? {
????????????get
???????????? {
????????????????return?_QueryFieldName;
????????????}
????????????set
???????????? {
????????????????_QueryFieldName?=?value;
????????????}
????????}
????????/**?<summary>
????????///?排序字段
????????///?</summary>
????????public?string?OrderStr
???????? {
????????????get
???????????? {
????????????????return?_OrderStr;
????????????}
????????????set
???????????? {
????????????????_OrderStr?=?value;
????????????}
????????}
????????/**?<summary>
????????///?查詢條件
????????///?</summary>
????????public?string?QueryCondition
???????? {
????????????get
???????????? {
????????????????return?_QueryCondition;
????????????}
????????????set
???????????? {
????????????????_QueryCondition?=?value;
????????????}
????????}
????????/**?<summary>
????????///?主鍵
????????///?</summary>
????????public?string?PrimaryKey
???????? {
????????????get? {
????????????????return?_PrimaryKey;
????????????}
????????????set? {
????????????????_PrimaryKey?=?value;
????????????}
????????}
????????public?DataSet?QueryDataTable()
???????? {
????????????SqlParameter[]?parameters?=? {
????????????????????new?SqlParameter("@Tables",?SqlDbType.VarChar,?255),
????????????????????new?SqlParameter("@PrimaryKey"?,?SqlDbType.VarChar?,?255),????
????????????????????new?SqlParameter("@Sort",?SqlDbType.VarChar?,?255?),
????????????????????new?SqlParameter("@CurrentPage",?SqlDbType.Int),
????????????????????new?SqlParameter("@PageSize",?SqlDbType.Int),????????????????????????????????????
????????????????????new?SqlParameter("@Fields",?SqlDbType.VarChar,?255),
????????????????????new?SqlParameter("@Filter",?SqlDbType.VarChar,1000),
????????????????????new?SqlParameter("@Group"?,SqlDbType.VarChar?,?1000?)
????????????????????};
????????????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_Pagination",?parameters,?"dd");
????????????_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;
????????}
????????public?int?GetTotalCount()
???????? {
????????????string?strSql?=?"?select?count(1)?from?"+_TableName;
????????????if?(_QueryCondition?!=?string.Empty)
???????????? {
????????????????strSql?+="?where?"?+?_QueryCondition;
????????????}
????????????return?int.Parse(DbHelperSQL.GetSingle(strSql).ToString());
????????}
????}
?
好了,在頁(yè)面放個(gè)DATAGRIDVIEW 拖入控件pager
?
?
??private?void?ReceiveOrderJLForm_Load(object?sender,?EventArgs?e)
???????? {
????????????this.pager1.PageCurrent?=?1;
????????????this.pager1.Bind();
????????}
????????private?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;
????????}
????????private?int?pager1_EventPaging(WindowsApp.MyControl.EventPagingArg?e)
???????? {
????????????return?dgvBind();
????????}
?
http://files.cnblogs.com/nosnowwolf/Pager.rar?控件下載
轉(zhuǎn)載于:https://www.cnblogs.com/bingoyan/archive/2012/10/23/2735959.html
總結(jié)
以上是生活随笔為你收集整理的winform 分页控件分享(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Robocode教程2——你的第一个ro
- 下一篇: 通过udp及vlc传递视频流