原創企業級控件庫之大數據量分頁控件
原創企業級控件庫之大數據量分頁控件
發布日期:2010年12月18日星期六作者:EricHu
在上篇:我介紹了原創企業級控件庫之組合查詢控件,這篇我將給大家介紹:企業級控件庫之大數據量分頁控件。
摘要
說到分頁,大家采用的方法各有千秋,分頁在一個中大型軟件項目中對數據的快速呈現起到很關鍵的作用,試想一個數據量上幾十萬或者幾百萬的數據表,要是沒有分頁功能會是一個什么樣的效果。總的說來,大家采用的分頁方法大同小異,但到底那種方法才是最佳的呢,各有各的看法,讓數據說話最有效。今天我給大家分享一個WinForm下大數據量分頁控件(當然分頁思想也可用于WebForm)。雖然不能說是最佳的,但在我的幾個實際項目中,用的都是它,效果不錯,可放心使用。
成就別人、等于成就自己。我沒什么要求,歡迎大家多多支持與評論,覺得不錯的,記得點擊文章左下角的”關注博客”,就這么簡單。同時,你要用什么好的想法,也可以與我交流,謝謝。
分頁控件運行效果如下圖:

用到的分頁存儲過程:
代碼
-- =============================================
-- Author: EricHu QQ:406590790 WebSite:http://www.rzrgm.cn/huyong/
-- Create date: 2008-10-25
-- Description: 千萬數量級分頁存儲過程
-- Modify Date: 2010-10-26
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTERPROCEDURE[dbo].[uspDividePage]
/*
***************************************************************
** 千萬數量級分頁存儲過程**
***************************************************************
參數說明:
1.Tables :表名或視圖名
2.PrimaryKey :主關鍵字
3.Sort :排序語句,不帶Order By 比如:UserId Desc,CreateDate Asc
4.CurrentPage :當前頁碼
5.PageSize :分頁尺寸
6.Fields :字段列表(默認為:*)
7.Filter :過濾語句,不帶Where
8.Group :Group語句,不帶Group By
***************************************************************/
(
@Tablesvarchar(2000),
@PrimaryKeyvarchar(500),
@Sortvarchar(500) =NULL,
@CurrentPageint=1,
@PageSizeint=10,
@Fieldsvarchar(2000) ='*',
@Filtervarchar(1000) =NULL,
@Groupvarchar(1000) =NULL
)
AS
/*默認排序*/
IF@SortISNULLOR@Sort=''
SET@Sort=@PrimaryKey
DECLARE@SortTablevarchar(1000)
DECLARE@SortNamevarchar(1000)
DECLARE@strSortColumnvarchar(1000)
DECLARE@operatorchar(2)
DECLARE@typevarchar(1000)
DECLARE@precint
/*設定排序語句.*/
IFCHARINDEX('DESC',@Sort)>0
BEGIN
SET@strSortColumn=REPLACE(@Sort, 'DESC', '')
SET@operator='<='
END
ELSE
BEGIN
IFCHARINDEX('ASC', @Sort) =0
SET@strSortColumn=REPLACE(@Sort, 'ASC', '')
SET@operator='>='
END
IFCHARINDEX('.', @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 =@SortTableAND c.name =@SortName
IFCHARINDEX('char', @type) >0
SET@type=@type+'('+CAST(@precASvarchar) +')'
DECLARE@strPageSizevarchar(500)
DECLARE@strStartRowvarchar(500)
DECLARE@strFiltervarchar(1000)
DECLARE@strSimpleFiltervarchar(1000)
DECLARE@strGroupvarchar(1000)
/*默認當前頁*/
IF@CurrentPage<1
SET@CurrentPage=1
/*設置分頁參數.*/
SET@strPageSize=CAST(@PageSizeASvarchar(500))
SET@strStartRow=CAST(((@CurrentPage-1)*@PageSize+1) ASvarchar(500))
/*篩選以及分組語句.*/
IF@FilterISNOTNULLAND@Filter!=''
BEGIN
SET@strFilter=' WHERE '+@Filter+''
SET@strSimpleFilter=' AND '+@Filter+''
END
ELSE
BEGIN
SET@strSimpleFilter=''
SET@strFilter=''
END
IF@GroupISNOTNULLAND@Group!=''
SET@strGroup=' GROUP BY '+@Group+''
ELSE
SET@strGroup=''
/*執行查詢語句*/
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+'
')
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
本控件類圖

本控件UcpageControl類詳細信息

本控件PageData類詳細信息

本控件核心代碼
一、數據源提供類PageData,主要負責與存儲過程進行交互。
數據源提供(PageData)
#region 數據源提供(PageData)
///<summary>
/// 數據源提供
///</summary>
publicclass PageData
{
DataSet ds =null;
privateint _PageSize =50; //分頁大小
privateint _PageIndex =1; //當前頁
privateint _PageCount =0; //總頁數
privateint _TotalCount =0; //總記錄數
privatestring _QueryFieldName ="*"; //表字段FieldStr
privatebool _isQueryTotalCounts =true; //是否查詢總的記錄條數
privatestring _TableName =string.Empty; //表名
privatestring _OrderStr =string.Empty; //排序_SortStr
privatestring _QueryCondition =string.Empty; //查詢的條件 RowFilter
privatestring _PrimaryKey =string.Empty; //主鍵
///<summary>
/// 是否查詢總的記錄條數
///</summary>
publicbool IsQueryTotalCounts
{
get { return _isQueryTotalCounts; }
set { _isQueryTotalCounts = value; }
}
///<summary>
/// 分頁大小(每頁顯示多少條數據)
///</summary>
publicint PageSize
{
get
{
return _PageSize;
}
set
{
_PageSize = value;
}
}
///<summary>
/// 當前頁
///</summary>
publicint PageIndex
{
get
{
return _PageIndex;
}
set
{
_PageIndex = value;
}
}
///<summary>
/// 總頁數
///</summary>
publicint PageCount
{
get
{
return _PageCount;
}
}
///<summary>
/// 總記錄數
///</summary>
publicint TotalCount
{
get
{
return _TotalCount;
}
}
///<summary>
/// 表名或視圖名
///</summary>
publicstring TableName
{
get
{
return _TableName;
}
set
{
_TableName = value;
}
}
///<summary>
/// 表字段FieldStr
///</summary>
publicstring QueryFieldName
{
get
{
return _QueryFieldName;
}
set
{
_QueryFieldName = value;
}
}
///<summary>
/// 排序字段
///</summary>
publicstring OrderStr
{
get
{
return _OrderStr;
}
set
{
_OrderStr = value;
}
}
///<summary>
/// 查詢條件
///</summary>
publicstring QueryCondition
{
get
{
return _QueryCondition;
}
set
{
_QueryCondition = value;
}
}
///<summary>
/// 主鍵
///</summary>
publicstring PrimaryKey
{
get
{
return _PrimaryKey;
}
set
{
_PrimaryKey = value;
}
}
///<summary>
/// 得到分頁數據
///</summary>
///<param name="connectionstring">連接字符串</param>
///<returns>DataSet</returns>
public DataSet QueryDataTable(string connectionstring)
{
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;
ds =null;
ds =new DataSet();
ds = DbHelperSQL.RunProcedure(connectionstring, "uspDividePage", parameters, "tbPageData");
if (_isQueryTotalCounts)
{
_TotalCount = GetTotalCount(connectionstring);
}
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(connectionstring);
}
}
return ds;
}
///<summary>
/// 得到總的記錄數
///</summary>
///<param name="connectionstring">連接字符串</param>
///<returns>總的記錄數</returns>
publicint GetTotalCount(string connectionstring)
{
string strSql =" select count(1) from "+_TableName;
if (_QueryCondition !=string.Empty)
{
strSql +=" where "+ _QueryCondition;
}
return Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString(), connectionstring));
}
}
#endregion
窗體調用方法
一、設置窗體調用公共方法。
#region 綁定DataGridView
///<summary>
/// 綁定DataGridView
///</summary>
///<param name="sTb">表名</param>
///<param name="sPk">主鍵</param>
///<param name="sOrderField">排序字段</param>
///<param name="sWhere">查詢條件</param>
///<param name="sQueryFieldName">字段列表</param>
///<returns>總記錄數</returns>
private int dgvBind(string sTb, string sPk, string sOrderField, string sWhere, string sQueryFieldName)
{
pageData =null;
dtPub =null;
pageData =new PageData();
dtPub =new DataTable();
pageData.TableName = sTb;
pageData.PrimaryKey = sPk;
pageData.OrderStr = sOrderField;
pageData.PageIndex =this.ucPageControlTest.PageCurrent;
pageData.PageSize =200;
pageData.QueryCondition = sWhere;
pageData.QueryFieldName = sQueryFieldName;
dtPub = pageData.QueryDataTable(ConfigurationSettings.AppSettings["DbConnection"]).Tables["tbPageData"];
this.ucPageControlTest.bindingSource.DataSource = dtPub;
this.ucPageControlTest.bindingNavigator.BindingSource = ucPageControlTest.bindingSource;
dgvUcPageControlTest.DataSource =null;
dgvUcPageControlTest.DataSource =this.ucPageControlTest.bindingSource;
if (dgvUcPageControlTest.Rows.Count >0)
{
dgvUcPageControlTest[4, ucPageControlTest.bindingSource.Position].Selected =true;
}
return pageData.TotalCount;
}
#endregion
二、在控件的EventPaging事件代碼中調用即可。
三、SqlServer測試數據代碼如下:
-- =============================================
-- Author: EricHu QQ:80368704 WebSite:http://www.rzrgm.cn/huyong/
-- Create date: 2010-12-18
-- Description: 原創企業級控件庫之大數據量分頁控件---測試數據
-- Modify Date: 2010-12-18
-- =============================================
/*一、創建數據庫dbTest*/
CREATEDATABASE dbTest
go
/*二、創建數據表*/
USE[dbTest]
GO
CREATETABLE[dbo].[tbTestData](
[UniqueID][bigint]IDENTITY(20000,1) NOTNULL,
[CompanyName][varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[CompanyCode][varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Address][varchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[Owner][varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Memo][varchar](2000) COLLATE Chinese_PRC_CI_AS NULL,
[InsetDataTime][datetime]NULLCONSTRAINT[DF_tbTestData_InsetDataTime]DEFAULT (getdate()),
CONSTRAINT[PK_tbTestData]PRIMARYKEYCLUSTERED
(
[UniqueID]ASC
)WITH (IGNORE_DUP_KEY =OFF) ON[PRIMARY]
) ON[PRIMARY]
GO
/*三、增加測試數據*/
declare@countbigint
select@count=1
while@count<=5000000
begin
insertinto tbTestData
values('Company'+cast(@countasvarchar),'CompanyCode'+cast(@countasvarchar)
,'Address'+cast(@countasvarchar),'Owner'+cast(@countasvarchar)
,'Memo'+cast(@countasvarchar),getdate())
select@count=@count+1
end
下面給出本控件完整代碼
#region 版權信息
/*---------------------------------------------------------------------*
// Copyright (C) 2010 http://www.rzrgm.cn/huyong
// 版權所有。
// 項目 名稱:《Winform通用控件庫》
// 文 件 名: UcPageControl.cs
// 類 全 名: DotNet.Controls.UcPageControl
// 描 述: 分頁控件
// 創建 時間: 2010-06-05
// 創建人信息: [**** 姓名:胡勇 QQ:406590790 E-Mail:406590790@qq.com *****]
*----------------------------------------------------------------------*/
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using DotNet.Common;
using DotNet.DBUtility;
namespace DotNet.Controls
{
#region 委托申明
///<summary>
/// 申明委托
///</summary>
///<param name="e"></param>
///<returns></returns>
publicdelegateint EventPagingHandler(EventPagingArg e);
#endregion
#region 分頁控件
///<summary>
/// 分頁控件
///
/// 修改紀錄(此分頁控件經過多次修改,已趨于完美,可放心使用。)
/// 2010-12-06 胡勇 對上一條、下一條、首條、末條數據導航的隱藏,因為控件本身已做了處理。
/// 2010-12-05 胡勇 對分頁控件代碼做了相應優化
/// 2010-06-05 胡勇 創建分頁控件
///
///<author>
///<name>胡勇</name>
///<QQ>406590790</QQ>
///<Email>406590790@qq.com</Email>
///</author>
///</summary>
[ToolboxItem(true)]
[DefaultEvent("EventPaging")]
[ToolboxBitmap(typeof(UcPageControl), "DotNet.Controls.Images.UcPageControl.bmp")]
[Description("分頁控件")]
publicpartialclass UcPageControl : UserControl
{
#region 申明事件
///<summary>
/// 單擊移動到當前頁上一末記錄時發生
///</summary>
[Category("數據分頁"), Description("單擊移動到當前頁上一末記錄時發生。"),Browsable(false)]
publicevent EventHandler OnBindingNavigatorMovePreviousItemClick;
///<summary>
/// 單擊移動到當前頁第一條記錄時發生
///</summary>
[Category("數據分頁"), Description("單擊移動到當前頁第一條記錄時發生。"), Browsable(false)]
publicevent EventHandler OnBindingNavigatorMoveFirstItemClick;
///<summary>
/// 單擊移動到當前頁下一條記錄時發生
///</summary>
[Category("數據分頁"), Description("單擊移動到當前頁下一條記錄時發生。"), Browsable(false)]
publicevent EventHandler OnBindingNavigatorMoveNextItemClick;
///<summary>
/// 單擊移動到當前頁最后一條記錄時發生
///</summary>
[Category("數據分頁"), Description("單擊移動到當前頁最后一條記錄時發生。"), Browsable(false)]
publicevent EventHandler OnBindingNavigatorMoveLastItemClick;
///<summary>
/// 單擊各分頁按鈕(上一頁、下一頁、第一頁、最后一頁和轉到某頁)時發生
///</summary>
[Category("數據分頁"), Description("分頁時發生。")]
publicevent EventPagingHandler EventPaging;
#endregion
#region 構造函數
public UcPageControl()
{
InitializeComponent();
}
#endregion
#region 屬性
privateint _pageSize =50; //每頁顯示記錄數
privateint _nMax =0; //總記錄數
privateint _pageCount =0; //頁數=總記錄數/每頁顯示記錄數
privateint _pageCurrent =0; //當前頁號
///<summary>
/// 每頁顯示記錄數
///</summary>
[Category("數據分頁"), Description("每頁顯示記錄數。"), Browsable(false)]
publicint PageSize
{
get
{
return _pageSize;
}
set
{
_pageSize = value;
GetPageCount();//頁數
}
}
///<summary>
/// 記錄總數
///</summary>
[Category("數據分頁"), Description("記錄總數。"),Browsable(false)]
publicint NMax
{
get
{
return _nMax;
}
set
{
_nMax = value;
GetPageCount();
}
}
///<summary>
/// 頁數
///</summary>
[Category("數據分頁"), Description("頁數。"), Browsable(false)]
publicint PageCount
{
get
{
return _pageCount;
}
set
{
_pageCount = value;
}
}
///<summary>
/// 當前頁號
///</summary>
[Category("數據分頁"), Description("當前頁號。"), Browsable(false)]
publicint PageCurrent
{
get
{
return _pageCurrent;
}
set
{
_pageCurrent = value;
}
}
#endregion
#region 方法
[Category("數據分頁"), Description("bindingNavigator。"), Browsable(false)]
public BindingNavigator ToolBar
{
get
{
returnthis.bindingNavigator;
}
}
///<summary>
/// 得到總頁數
///</summary>
privatevoid GetPageCount()
{
if (this.NMax >0)
{
this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.NMax) / Convert.ToDouble(this.PageSize)));
}
else
{
this.PageCount =0;
}
}
///<summary>
/// 綁定分頁控件(關鍵代碼)
///</summary>
publicvoid Bind()
{
if (this.EventPaging !=null)
{
this.NMax =this.EventPaging(new EventPagingArg(this.PageCurrent));
}
if (this.PageCurrent >this.PageCount)
{
this.PageCurrent =this.PageCount;
}
if (this.PageCount ==1)
{
this.PageCurrent =1;
}
lblPageCount.Text =this.PageCount.ToString();
this.lblMaxPage.Text ="共"+this.NMax.ToString()+"條記錄";
this.txtCurrentPage.Text =this.PageCurrent.ToString();
if (this.PageCurrent ==1)
{
this.btnPrev.Enabled =false;
this.btnFirst.Enabled =false;
}
else
{
btnPrev.Enabled =true;
btnFirst.Enabled =true;
}
if (this.PageCurrent ==this.PageCount)
{
this.btnLast.Enabled =false;
this.btnNext.Enabled =false;
}
else
{
btnLast.Enabled =true;
btnNext.Enabled =true;
}
if (this.NMax ==0)
{
btnNext.Enabled =false;
btnLast.Enabled =false;
btnFirst.Enabled =false;
btnPrev.Enabled =false;
}
}
#endregion
#region 按鈕事件
privatevoid btnFirst_Click(object sender, EventArgs e)
{
PageCurrent =1;
this.Bind();
}
privatevoid btnPrev_Click(object sender, EventArgs e)
{
PageCurrent -=1;
if (PageCurrent <=0)
{
PageCurrent =1;
}
this.Bind();
}
privatevoid btnNext_Click(object sender, EventArgs e)
{
this.PageCurrent +=1;
if (PageCurrent > PageCount)
{
PageCurrent = PageCount;
}
this.Bind();
}
privatevoid btnLast_Click(object sender, EventArgs e)
{
PageCurrent = PageCount;
this.Bind();
}
privatevoid btnGo_Click(object sender, EventArgs e)
{
if (this.txtCurrentPage.Text !=null&& txtCurrentPage.Text !="")
{
if (Int32.TryParse(txtCurrentPage.Text, out _pageCurrent))
{
this.Bind();
}
else
{
DialogHelper.ShowErrorMsg("輸入數字格式錯誤!");
}
}
}
privatevoid txtCurrentPage_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.Bind();
}
}
privatevoid bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e)
{
if(OnBindingNavigatorMovePreviousItemClick !=null)
{
OnBindingNavigatorMovePreviousItemClick(this, null);
}
}
privatevoid bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e)
{
if (OnBindingNavigatorMoveFirstItemClick !=null)
{
OnBindingNavigatorMoveFirstItemClick(this, null);
}
}
privatevoid bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
{
if (OnBindingNavigatorMoveNextItemClick !=null)
{
OnBindingNavigatorMoveNextItemClick(this, null);
}
}
privatevoid bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
{
if (OnBindingNavigatorMoveLastItemClick !=null)
{
OnBindingNavigatorMoveLastItemClick(this, null);
}
}
#endregion
}
#endregion
#region 自定義事件數據基類
///<summary>
/// 自定義事件數據基類
///</summary>
publicclass EventPagingArg : EventArgs
{
privateint _intPageIndex;
public EventPagingArg(int PageIndex)
{
_intPageIndex = PageIndex;
}
}
#endregion
#region 數據源提供(PageData)
///<summary>
/// 數據源提供
///</summary>
publicclass PageData
{
DataSet ds =null;
privateint _PageSize =50; //分頁大小
privateint _PageIndex =1; //當前頁
privateint _PageCount =0; //總頁數
privateint _TotalCount =0; //總記錄數
privatestring _QueryFieldName ="*"; //表字段FieldStr
privatebool _isQueryTotalCounts =true; //是否查詢總的記錄條數
privatestring _TableName =string.Empty; //表名
privatestring _OrderStr =string.Empty; //排序_SortStr
privatestring _QueryCondition =string.Empty; //查詢的條件 RowFilter
privatestring _PrimaryKey =string.Empty; //主鍵
///<summary>
/// 是否查詢總的記錄條數
///</summary>
publicbool IsQueryTotalCounts
{
get { return _isQueryTotalCounts; }
set { _isQueryTotalCounts = value; }
}
///<summary>
/// 分頁大小(每頁顯示多少條數據)
///</summary>
publicint PageSize
{
get
{
return _PageSize;
}
set
{
_PageSize = value;
}
}
///<summary>
/// 當前頁
///</summary>
publicint PageIndex
{
get
{
return _PageIndex;
}
set
{
_PageIndex = value;
}
}
///<summary>
/// 總頁數
///</summary>
publicint PageCount
{
get
{
return _PageCount;
}
}
///<summary>
/// 總記錄數
///</summary>
publicint TotalCount
{
get
{
return _TotalCount;
}
}
///<summary>
/// 表名或視圖名
///</summary>
publicstring TableName
{
get
{
return _TableName;
}
set
{
_TableName = value;
}
}
///<summary>
/// 表字段FieldStr
///</summary>
publicstring QueryFieldName
{
get
{
return _QueryFieldName;
}
set
{
_QueryFieldName = value;
}
}
///<summary>
/// 排序字段
///</summary>
publicstring OrderStr
{
get
{
return _OrderStr;
}
set
{
_OrderStr = value;
}
}
///<summary>
/// 查詢條件
///</summary>
publicstring QueryCondition
{
get
{
return _QueryCondition;
}
set
{
_QueryCondition = value;
}
}
///<summary>
/// 主鍵
///</summary>
publicstring PrimaryKey
{
get
{
return _PrimaryKey;
}
set
{
_PrimaryKey = value;
}
}
///<summary>
/// 得到分頁數據
///</summary>
///<param name="connectionstring">連接字符串</param>
///<returns>DataSet</returns>
public DataSet QueryDataTable(string connectionstring)
{
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;
ds =null;
ds =new DataSet();
ds = DbHelperSQL.RunProcedure(connectionstring, "uspDividePage", parameters, "tbPageData");
if (_isQueryTotalCounts)
{
_TotalCount = GetTotalCount(connectionstring);
}
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(connectionstring);
}
}
return ds;
}
///<summary>
/// 得到總的記錄數
///</summary>
///<param name="connectionstring">連接字符串</param>
///<returns>總的記錄數</returns>
publicint GetTotalCount(string connectionstring)
{
string strSql =" select count(1) from "+_TableName;
if (_QueryCondition !=string.Empty)
{
strSql +=" where "+ _QueryCondition;
}
return Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString(), connectionstring));
}
}
#endregion
}
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

摘要
說到分頁,大家采用的方法各有千秋,分頁在一個中大型軟件項目中對數據的快速呈現起到很關鍵的作用,試想一個數據量上幾十萬或者幾百萬的數據表,要是沒有分頁功能會是一個什么樣的效果。總的說來,大家采用的分頁方法大同小異,但到底那種方法才是最佳的呢,各有各的看法,讓數據說話最有效。今天我給大家分享一個WinForm下大數據量分頁控件(當然分頁思想也可用于WebForm)。雖然不能說是最佳的,但在我的幾個實際項目中,用的都是它,效果不錯,可放心使用。
成就別人、等于成就自己。我沒什么要求,歡迎大家多多支持與評論,覺得不錯的,記得點擊文章左下角的”關注博客”,就這么簡單。同時,你要用什么好的想法,也可以與我交流,謝謝。
浙公網安備 33010602011771號