原创企业级控件库之大数据量分页控件

原创企业级控件库之大数据量分页控件

发布日期:2010年12月18日星期六作者:EricHu

 

  在上篇:我介绍了原创企业级控件库之组合查询控件,这篇我将给大家介绍:企业级控件库之大数据量分页控件。

   摘要

    说到分页,大家采用的方法各有千秋,分页在一个中大型软件项目中对数据的快速呈现起到很关键的作用,试想一个数据量上几十万或者几百万的数据表,要是没有分页功能会是一个什么样的效果。总的说来,大家采用的分页方法大同小异,但到底那种方法才是最佳的呢,各有各的看法,让数据说话最有效。今天我给大家分享一个WinForm下大数据量分页控件(当然分页思想也可用于WebForm)。虽然不能说是最佳的,但在我的几个实际项目中,用的都是它,效果不错,可放心使用。

   成就别人、等于成就自己。我没什么要求,欢迎大家多多支持与评论,觉得不错的,记得点击文章左下角的”关注博客”,就这么简单。同时,你要用什么好的想法,也可以与我交流,谢谢。

  分页控件运行效果如下图:

  

  用到的分页存储过程: 

代码
-- =============================================
-- Author: EricHu  QQ:406590790 WebSite:http://www.cnblogs.com/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事件代码中调用即可。

return dgvBind("tbTestData", "UniqueID", "UniqueID", sQueryWhere, "*"); 

         三、SqlServer测试数据代码如下:

-- =============================================
-- Author: EricHu  QQ:80368704 WebSite:http://www.cnblogs.com/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.cnblogs.com/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
}

 

  

 

 

posted @ 2010-12-18 22:52  .NET快速开发框架  阅读(11188)  评论(73编辑  收藏  举报