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

简介:

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

   摘要

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

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

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

  

       用到的分页存储过程:  

 

代码
1  --  =============================================
2  --  Author: EricHu QQ:80368704 WebSite:http://www.cnblogs.com/huyong/
3  --  Create date: 2008-10-25 
4  --  Description: 千万数量级分页存储过程
5  --  Modify Date: 2010-10-26 
6  --  ============================================= 
7   
8    SET  ANSI_NULLS  ON
9    GO
10    SET  QUOTED_IDENTIFIER  ON
11    GO
12 
13    ALTER PROCEDURE [ dbo ] . [ uspDividePage ]
14  /*
15  ***************************************************************
16  ** 千万数量级分页存储过程**
17  ***************************************************************
18  参数说明:
19  1.Tables :表名或视图名
20  2.PrimaryKey :主关键字
21  3.Sort :排序语句,不带Order By 比如:UserId Desc,CreateDate Asc
22  4.CurrentPage :当前页码
23  5.PageSize :分页尺寸
24  6.Fields :字段列表(默认为:*)
25  7.Filter :过滤语句,不带Where 
26  8.Group :Group语句,不带Group By
27  ************************************************************** */
28  (
29  @Tables varchar ( 2000 ),
30  @PrimaryKey varchar ( 500 ),
31  @Sort varchar ( 500 = NULL ,
32  @CurrentPage int = 1 ,
33  @PageSize int = 10 ,
34  @Fields varchar ( 2000 = ' * ' ,
35  @Filter varchar ( 1000 = NULL ,
36  @Group varchar ( 1000 = NULL
37  )
38  AS
39  /* 默认排序 */
40  IF @Sort IS NULL OR @Sort = ''
41  SET @Sort = @PrimaryKey
42 
43  DECLARE @SortTable varchar ( 1000 )
44  DECLARE @SortName varchar ( 1000 )
45  DECLARE @strSortColumn varchar ( 1000 )
46  DECLARE @operator char ( 2 )
47  DECLARE @type varchar ( 1000 )
48  DECLARE @prec int
49 
50  /* 设定排序语句. */
51  IF CHARINDEX ( ' DESC ' , @Sort ) > 0
52  BEGIN
53  SET @strSortColumn = REPLACE ( @Sort ' DESC ' '' )
54  SET @operator = ' <= '
55  END
56  ELSE
57  BEGIN
58  IF CHARINDEX ( ' ASC ' @Sort = 0
59  SET @strSortColumn = REPLACE ( @Sort ' ASC ' '' )
60  SET @operator = ' >= '
61  END
62 
63  IF CHARINDEX ( ' . ' @strSortColumn > 0
64  BEGIN
65  SET @SortTable = SUBSTRING ( @strSortColumn 0 CHARINDEX ( ' . ' , @strSortColumn ))
66  SET @SortName = SUBSTRING ( @strSortColumn CHARINDEX ( ' . ' , @strSortColumn + 1 LEN ( @strSortColumn ))
67  END
68  ELSE
69  BEGIN
70  SET @SortTable = @Tables
71  SET @SortName = @strSortColumn
72  END
73 
74  SELECT @type = t.name,  @prec = c.prec
75  FROM  sysobjects o 
76  JOIN  syscolumns c  on  o.id = c.id
77  JOIN  systypes t  on  c.xusertype = t.xusertype
78  WHERE  o.name  = @SortTable AND  c.name  = @SortName
79 
80  IF CHARINDEX ( ' char ' @type > 0
81  SET @type = @type + ' ( ' + CAST ( @prec AS varchar + ' ) '
82 
83  DECLARE @strPageSize varchar ( 500 )
84  DECLARE @strStartRow varchar ( 500 )
85  DECLARE @strFilter varchar ( 1000 )
86  DECLARE @strSimpleFilter varchar ( 1000 )
87  DECLARE @strGroup varchar ( 1000 )
88  /* 默认当前页 */
89  IF @CurrentPage < 1
90  SET @CurrentPage = 1
91 
92  /* 设置分页参数. */
93  SET @strPageSize = CAST ( @PageSize AS varchar ( 500 ))
94  SET @strStartRow = CAST ((( @CurrentPage - 1 ) * @PageSize + 1 AS varchar ( 500 ))
95 
96  /* 筛选以及分组语句. */
97  IF @Filter IS NOT NULL AND @Filter != ''
98  BEGIN
99  SET @strFilter = '  WHERE  ' + @Filter + ' '
100  SET @strSimpleFilter = '  AND  ' + @Filter + ' '
101  END
102  ELSE
103  BEGIN
104  SET @strSimpleFilter = ''
105  SET @strFilter = ''
106  END
107 
108  IF @Group IS NOT NULL AND @Group != ''
109  SET @strGroup = '  GROUP BY  ' + @Group + ' '
110  ELSE
111  SET @strGroup = ''
112 
113  /* 执行查询语句 */
114  EXEC (
115  '
116  DECLARE @SortColumn  ' + @type + '
117  SET ROWCOUNT  ' + @strStartRow + '
118  SELECT @SortColumn= ' + @strSortColumn + '  FROM  ' + @Tables + @strFilter + ' ' + @strGroup + '  ORDER BY ' + @Sort + '
119  SET ROWCOUNT  ' + @strPageSize + '
120  SELECT  ' + @Fields + '  FROM  ' + @Tables + '  WHERE  ' + @strSortColumn + @operator + '  @SortColumn  ' + @strSimpleFilter + ' ' + @strGroup + '  ORDER BY  ' + @Sort + '
121  ' )
122  GO
123 
124  SET  ANSI_NULLS  OFF
125  GO
126  SET  QUOTED_IDENTIFIER  OFF
127  GO
128

   本控件类图  

 

   本控件UcpageControl类详细信息


   本控件PageData类详细信息


   本控件核心代码

    一、数据源提供类PageData,主要负责与存储过程进行交互。

数据源提供(PageData)
1  #region  数据源提供(PageData)
2  /// <summary>
3  ///  数据源提供
4  /// </summary>
5  public class  PageData
6  {
7  DataSet ds  = null ;
8  private int  _PageSize  = 50 // 分页大小
9  private int  _PageIndex  = 1 // 当前页
10  private int  _PageCount  = 0 // 总页数
11  private int  _TotalCount  = 0 // 总记录数
12  private string  _QueryFieldName  = " * " // 表字段FieldStr
13  private bool  _isQueryTotalCounts  = true // 是否查询总的记录条数
14  private string  _TableName  = string .Empty;  // 表名 
15  private string  _OrderStr  = string .Empty;  // 排序_SortStr
16  private string  _QueryCondition  = string .Empty;  // 查询的条件 RowFilter
17  private string  _PrimaryKey  = string .Empty;  // 主键
18 
19  /// <summary>
20  ///  是否查询总的记录条数
21  /// </summary>
22  public bool  IsQueryTotalCounts
23  {
24  get  {  return  _isQueryTotalCounts; }
25  set  { _isQueryTotalCounts  =  value; }
26  }
27 
28  /// <summary>
29  ///  分页大小(每页显示多少条数据)
30  /// </summary>
31  public int  PageSize
32  {
33  get
34  {
35  return  _PageSize;
36 
37  }
38  set
39  {
40  _PageSize  =  value;
41  }
42  }
43 
44  /// <summary>
45  ///  当前页
46  /// </summary>
47  public int  PageIndex
48  {
49  get
50  {
51  return  _PageIndex;
52  }
53  set
54  {
55  _PageIndex  =  value;
56  }
57  }
58 
59  /// <summary>
60  ///  总页数
61  /// </summary>
62  public int  PageCount
63  {
64  get
65  {
66  return  _PageCount;
67  }
68  }
69 
70  /// <summary>
71  ///  总记录数
72  /// </summary>
73  public int  TotalCount
74  {
75  get
76  {
77  return  _TotalCount;
78  }
79  }
80 
81  /// <summary>
82  ///  表名或视图名
83  /// </summary>
84  public string  TableName
85  {
86  get
87  {
88  return  _TableName;
89  }
90  set
91  {
92  _TableName  =  value;
93  }
94  }
95 
96  /// <summary>
97  ///  表字段FieldStr
98  /// </summary>
99  public string  QueryFieldName
100  {
101  get
102  {
103  return  _QueryFieldName;
104  }
105  set
106  {
107  _QueryFieldName  =  value;
108  }
109  }
110 
111  /// <summary>
112  ///  排序字段
113  /// </summary>
114  public string  OrderStr
115  {
116  get
117  {
118  return  _OrderStr;
119  }
120  set
121  {
122  _OrderStr  =  value;
123  }
124  }
125 
126  /// <summary>
127  ///  查询条件
128  /// </summary>
129  public string  QueryCondition
130  {
131  get
132  {
133  return  _QueryCondition;
134  }
135  set
136  {
137  _QueryCondition  =  value;
138  }
139  }
140 
141  /// <summary>
142  ///  主键
143  /// </summary>
144  public string  PrimaryKey
145  {
146  get  
147  {
148  return  _PrimaryKey;
149  }
150  set  
151  {
152  _PrimaryKey  =  value;
153  }
154  }
155 
156  /// <summary>
157  ///  得到分页数据
158  /// </summary>
159  /// <param name="connectionstring"> 连接字符串 </param>
160  /// <returns> DataSet </returns>
161  public  DataSet QueryDataTable( string  connectionstring)
162  {
163  SqlParameter[] parameters  =  {
164  new  SqlParameter( " @Tables " , SqlDbType.VarChar,  255 ),
165  new  SqlParameter( " @PrimaryKey "  , SqlDbType.VarChar ,  255 ), 
166  new  SqlParameter( " @Sort " , SqlDbType.VarChar ,  255 ),
167  new  SqlParameter( " @CurrentPage " , SqlDbType.Int ),
168  new  SqlParameter( " @PageSize " , SqlDbType.Int ), 
169  new  SqlParameter( " @Fields " , SqlDbType.VarChar,  255 ),
170  new  SqlParameter( " @Filter " , SqlDbType.VarChar,  1000 ),
171  new  SqlParameter( " @Group "  , SqlDbType.VarChar,  1000 )
172  };
173  parameters[ 0 ].Value  =  _TableName;
174  parameters[ 1 ].Value  =  _PrimaryKey;
175  parameters[ 2 ].Value  =  _OrderStr;
176  parameters[ 3 ].Value  =  PageIndex;
177  parameters[ 4 ].Value  =  PageSize;
178  parameters[ 5 ].Value  = _QueryFieldName;
179  parameters[ 6 ].Value  =  _QueryCondition;
180  parameters[ 7 ].Value  = string .Empty;
181  ds  = null ;
182  ds  = new  DataSet();
183  ds  =  DbHelperSQL.RunProcedure(connectionstring,  " uspDividePage " , parameters,  " tbPageData " );
184 
185  if  (_isQueryTotalCounts)
186  {
187  _TotalCount  =  GetTotalCount(connectionstring);
188  }
189 
190  if  (_TotalCount  == 0 )
191  {
192  _PageIndex  = 0 ;
193  _PageCount  = 0 ;
194  }
195  else
196  {
197  _PageCount  =  _TotalCount  %  _PageSize  == 0 ?  _TotalCount  /  _PageSize : _TotalCount  /  _PageSize  + 1 ;
198 
199  if  (_PageIndex  >  _PageCount)
200  {
201  _PageIndex  =  _PageCount;
202  parameters[ 4 ].Value  =  _PageSize;
203  ds  =  QueryDataTable(connectionstring);
204  }
205  }
206 
207  return  ds;
208  }
209 
210  /// <summary>
211  ///  得到总的记录数
212  /// </summary>
213  /// <param name="connectionstring"> 连接字符串 </param>
214  /// <returns> 总的记录数 </returns>
215  public int  GetTotalCount( string  connectionstring)
216  {
217  string  strSql  = "  select count(1) from  " + _TableName;
218 
219  if  (_QueryCondition  != string .Empty)
220  {
221  strSql  += "  where  " +  _QueryCondition;
222  }
223 
224  return  Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString(), connectionstring));
225  }
226  }
227  #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 */
CREATE DATABASE  dbTest
go

/* 二、创建数据表 */
USE [ dbTest ]
GO

CREATE TABLE [ dbo ] . [ tbTestData ] (
[ UniqueID ] [ bigint ] IDENTITY ( 20000 , 1 NOT NULL ,
[ 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 ] NULL CONSTRAINT [ DF_tbTestData_InsetDataTime ] DEFAULT  ( getdate ()),
CONSTRAINT [ PK_tbTestData ] PRIMARY KEY CLUSTERED  
(
[ UniqueID ] ASC
)
WITH  (IGNORE_DUP_KEY  = OFF ON [ PRIMARY ]
ON [ PRIMARY ]
GO

/* 三、增加测试数据 */
declare @count bigint
select @count = 1
while @count <= 5000000
begin
insert into  tbTestData
values ( ' Company ' + cast ( @count as varchar ), ' CompanyCode ' + cast ( @count as varchar )
,
' Address ' + cast ( @count as varchar ), ' Owner ' + cast ( @count as varchar )
,
' Memo ' + cast ( @count as varchar ), getdate ())
select @count = @count + 1  
end

 

        下面给出本控件完整代码

原创企业级控件库之大数据量分页控件
1  #region  版权信息
2  /* ---------------------------------------------------------------------*
3  // Copyright (C) 2010  http://www.cnblogs.com/huyong
4  // 版权所有。 
5  // 项目 名称:《Winform通用控件库》
6  // 文 件 名: UcPageControl.cs
7  // 类 全 名: DotNet.Controls.UcPageControl 
8  // 描 述: 分页控件
9  // 创建 时间: 2010-06-05
10  // 创建人信息: [**** 姓名:胡勇 QQ:80368704 E-Mail:80368704@qq.com *****]
11  *---------------------------------------------------------------------- */
12  #endregion
13 
14  using  System;
15  using  System.Collections.Generic;
16  using  System.ComponentModel;
17  using  System.Drawing;
18  using  System.Data;
19  using  System.Data.SqlClient;
20  using  System.Windows.Forms;
21  using  DotNet.Common;
22  using  DotNet.DBUtility;
23 
24  namespace  DotNet.Controls
25  {
26  #region  委托申明
27  /// <summary>
28  ///  申明委托
29  /// </summary>
30  /// <param name="e"></param>
31  /// <returns></returns>
32  public delegate int  EventPagingHandler(EventPagingArg e);
33  #endregion
34 
35  #region  分页控件
36  /// <summary>
37  ///  分页控件
38  ///  
39  ///  修改纪录(此分页控件经过多次修改,已趋于完美,可放心使用。)
40  ///  2010-12-06 胡勇 对上一条、下一条、首条、末条数据导航的隐藏,因为控件本身已做了处理。
41  ///  2010-12-05 胡勇 对分页控件代码做了相应优化
42  ///  2010-06-05 胡勇 创建分页控件
43  ///  
44  /// <author>
45  /// <name> 胡勇 </name>
46  /// <QQ> 80368704 </QQ>
47  /// <Email> 80368704@qq.com </Email>
48  /// </author>
49  /// </summary>
50  [ToolboxItem( true )]
51  [DefaultEvent( " EventPaging " )]
52  [ToolboxBitmap( typeof (UcPageControl),  " DotNet.Controls.Images.UcPageControl.bmp " )]
53  [Description( " 分页控件 " )]
54  public partial class  UcPageControl : UserControl
55  {
56  #region  申明事件
57  /// <summary>
58  ///  单击移动到当前页上一末记录时发生
59  /// </summary>
60  [Category( " 数据分页 " ), Description( " 单击移动到当前页上一末记录时发生。 " ),Browsable( false )]
61  public event  EventHandler OnBindingNavigatorMovePreviousItemClick;
62 
63  /// <summary>
64  ///  单击移动到当前页第一条记录时发生
65  /// </summary>
66  [Category( " 数据分页 " ), Description( " 单击移动到当前页第一条记录时发生。 " ), Browsable( false )]
67  public event  EventHandler OnBindingNavigatorMoveFirstItemClick;
68 
69  /// <summary>
70  ///  单击移动到当前页下一条记录时发生
71  /// </summary>
72  [Category( " 数据分页 " ), Description( " 单击移动到当前页下一条记录时发生。 " ), Browsable( false )]
73  public event  EventHandler OnBindingNavigatorMoveNextItemClick;
74 
75  /// <summary>
76  ///  单击移动到当前页最后一条记录时发生
77  /// </summary>
78  [Category( " 数据分页 " ), Description( " 单击移动到当前页最后一条记录时发生。 " ), Browsable( false )]
79  public event  EventHandler OnBindingNavigatorMoveLastItemClick;
80 
81  /// <summary>
82  ///  单击各分页按钮(上一页、下一页、第一页、最后一页和转到某页)时发生
83  /// </summary>
84  [Category( " 数据分页 " ), Description( " 分页时发生。 " )]
85  public event  EventPagingHandler EventPaging;
86  #endregion
87 
88  #region  构造函数
89  public  UcPageControl()
90  {
91  InitializeComponent();
92  }
93  #endregion
94 
95  #region  属性
96 
97  private int  _pageSize  = 50 // 每页显示记录数
98  private int  _nMax  = 0 // 总记录数
99  private int  _pageCount  = 0 // 页数=总记录数/每页显示记录数
100  private int  _pageCurrent  = 0 // 当前页号
101 
102  /// <summary>
103  ///  每页显示记录数
104  /// </summary>
105  [Category( " 数据分页 " ), Description( " 每页显示记录数。 " ), Browsable( false )]
106  public int  PageSize
107  {
108  get  
109 
110  return  _pageSize;
111  }
112  set
113  {
114  _pageSize  =  value;
115  GetPageCount(); // 页数
116  }
117 
118 
119  /// <summary>
120  ///  记录总数
121  /// </summary>
122  [Category( " 数据分页 " ), Description( " 记录总数。 " ),Browsable( false )]
123  public int  NMax
124  {
125  get  
126 
127  return  _nMax; 
128  }
129  set
130  {
131  _nMax  =  value;
132  GetPageCount();
133  }
134 
135 
136  /// <summary>
137  ///  页数
138  /// </summary>
139  [Category( " 数据分页 " ), Description( " 页数。 " ), Browsable( false )]
140  public int  PageCount
141  {
142  get  
143 
144  return  _pageCount;
145  }
146  set  
147 
148  _pageCount  =  value; 
149  }
150 
151 
152  /// <summary>
153  ///  当前页号
154  /// </summary>
155  [Category( " 数据分页 " ), Description( " 当前页号。 " ), Browsable( false )]
156  public int  PageCurrent
157  {
158  get  
159  {
160  return  _pageCurrent;
161  }
162  set  
163  {
164  _pageCurrent  =  value; 
165  }
166  }
167  #endregion
168 
169  #region  方法
170  [Category( " 数据分页 " ), Description( " bindingNavigator。 " ), Browsable( false )]
171  public  BindingNavigator ToolBar
172  {
173  get  
174 
175  return this .bindingNavigator;
176  }
177  }
178 
179  /// <summary>
180  ///  得到总页数
181  /// </summary>
182  private void  GetPageCount()
183  {
184  if  ( this .NMax  > 0 )
185  {
186  this .PageCount  =  Convert.ToInt32(Math.Ceiling(Convert.ToDouble( this .NMax)  /  Convert.ToDouble( this .PageSize)));
187  }
188  else
189  {
190  this .PageCount  = 0 ;
191  }
192  }
193 
194  /// <summary>
195  ///  绑定分页控件(关键代码)
196  /// </summary>
197  public void  Bind()
198  {
199  if  ( this .EventPaging  != null )
200  {
201  this .NMax  = this .EventPaging( new  EventPagingArg( this .PageCurrent));
202  }
203 
204  if  ( this .PageCurrent  > this .PageCount)
205  {
206  this .PageCurrent  = this .PageCount;
207  }
208  if  ( this .PageCount  == 1 )
209  {
210  this .PageCurrent  = 1 ;
211  }
212  lblPageCount.Text  = this .PageCount.ToString();
213  this .lblMaxPage.Text  = " " + this .NMax.ToString() + " 条记录 " ;
214  this .txtCurrentPage.Text  = this .PageCurrent.ToString();
215 
216  if  ( this .PageCurrent  == 1 )
217  {
218  this .btnPrev.Enabled  = false ;
219  this .btnFirst.Enabled  = false ;
220  }
221  else
222  {
223  btnPrev.Enabled  = true ;
224  btnFirst.Enabled  = true ;
225  }
226 
227  if  ( this .PageCurrent  == this .PageCount)
228  {
229  this .btnLast.Enabled  = false ;
230  this .btnNext.Enabled  = false ;
231  }
232  else
233  {
234  btnLast.Enabled  = true ;
235  btnNext.Enabled  = true ;
236  }
237 
238  if  ( this .NMax  == 0 )
239  {
240  btnNext.Enabled  = false ;
241  btnLast.Enabled  = false ;
242  btnFirst.Enabled  = false ;
243  btnPrev.Enabled  = false ;
244  }
245  }
246 
247  #endregion
248 
249  #region  按钮事件
250  private void  btnFirst_Click( object  sender, EventArgs e)
251  {
252  PageCurrent  = 1 ;
253  this .Bind();
254  }
255 
256  private void  btnPrev_Click( object  sender, EventArgs e)
257  {
258  PageCurrent  -= 1 ;
259  if  (PageCurrent  <= 0 )
260  {
261  PageCurrent  = 1 ;
262  }
263  this .Bind();
264  }
265 
266  private void  btnNext_Click( object  sender, EventArgs e)
267  {
268  this .PageCurrent  += 1 ;
269  if  (PageCurrent  >  PageCount)
270  {
271  PageCurrent  =  PageCount;
272  }
273  this .Bind();
274  }
275 
276  private void  btnLast_Click( object  sender, EventArgs e)
277  {
278  PageCurrent  =  PageCount;
279  this .Bind();
280  }
281 
282  private void  btnGo_Click( object  sender, EventArgs e)
283  {
284  if  ( this .txtCurrentPage.Text  != null &&  txtCurrentPage.Text  != "" )
285  {
286  if  (Int32.TryParse(txtCurrentPage.Text,  out  _pageCurrent))
287  {
288  this .Bind();
289  }
290  else
291  {
292  DialogHelper.ShowErrorMsg( " 输入数字格式错误! " );
293  }
294  }
295  }
296 
297  private void  txtCurrentPage_KeyDown( object  sender, KeyEventArgs e)
298  {
299  if  (e.KeyCode  ==  Keys.Enter)
300  {
301  this .Bind();
302  }
303  }
304 
305  private void  bindingNavigatorMovePreviousItem_Click( object  sender, EventArgs e)
306  {
307  if (OnBindingNavigatorMovePreviousItemClick  != null )
308  {
309  OnBindingNavigatorMovePreviousItemClick( this null );
310  }
311  }
312 
313  private void  bindingNavigatorMoveFirstItem_Click( object  sender, EventArgs e)
314  {
315  if  (OnBindingNavigatorMoveFirstItemClick  != null )
316  {
317  OnBindingNavigatorMoveFirstItemClick( this null );
318  }
319  }
320 
321  private void  bindingNavigatorMoveNextItem_Click( object  sender, EventArgs e)
322  {
323  if  (OnBindingNavigatorMoveNextItemClick  != null )
324  {
325  OnBindingNavigatorMoveNextItemClick( this null );
326  }
327  }
328 
329  private void  bindingNavigatorMoveLastItem_Click( object  sender, EventArgs e)
330  {
331  if  (OnBindingNavigatorMoveLastItemClick  != null )
332  {
333  OnBindingNavigatorMoveLastItemClick( this null );
334  }
335  }
336  #endregion
337  }
338  #endregion
339 
340  #region  自定义事件数据基类
341  /// <summary>
342  ///  自定义事件数据基类
343  /// </summary>
344  public class  EventPagingArg : EventArgs
345  {
346  private int  _intPageIndex;
347  public  EventPagingArg( int  PageIndex)
348  {
349  _intPageIndex  =  PageIndex;
350  }
351  }
352  #endregion
353 
354  #region  数据源提供(PageData)
355  /// <summary>
356  ///  数据源提供
357  /// </summary>
358  public class  PageData
359  {
360  DataSet ds  = null ;
361  private int  _PageSize  = 50 // 分页大小
362  private int  _PageIndex  = 1 // 当前页
363  private int  _PageCount  = 0 // 总页数
364  private int  _TotalCount  = 0 // 总记录数
365  private string  _QueryFieldName  = " * " // 表字段FieldStr
366  private bool  _isQueryTotalCounts  = true // 是否查询总的记录条数
367  private string  _TableName  = string .Empty;  // 表名 
368  private string  _OrderStr  = string .Empty;  // 排序_SortStr
369  private string  _QueryCondition  = string .Empty;  // 查询的条件 RowFilter
370  private string  _PrimaryKey  = string .Empty;  // 主键
371 
372  /// <summary>
373  ///  是否查询总的记录条数
374  /// </summary>
375  public bool  IsQueryTotalCounts
376  {
377  get  {  return  _isQueryTotalCounts; }
378  set  { _isQueryTotalCounts  =  value; }
379  }
380 
381  /// <summary>
382  ///  分页大小(每页显示多少条数据)
383  /// </summary>
384  public int  PageSize
385  {
386  get
387  {
388  return  _PageSize;
389 
390  }
391  set
392  {
393  _PageSize  =  value;
394  }
395  }
396 
397  /// <summary>
398  ///  当前页
399  /// </summary>
400  public int  PageIndex
401  {
402  get
403  {
404  return  _PageIndex;
405  }
406  set
407  {
408  _PageIndex  =  value;
409  }
410  }
411 
412  /// <summary>
413  ///  总页数
414  /// </summary>
415  public int  PageCount
416  {
417  get
418  {
419  return  _PageCount;
420  }
421  }
422 
423  /// <summary>
424  ///  总记录数
425  /// </summary>
426  public int  TotalCount
427  {
428  get
429  {
430  return  _TotalCount;
431  }
432  }
433 
434  /// <summary>
435  ///  表名或视图名
436  /// </summary>
437  public string  TableName
438  {
439  get
440  {
441  return  _TableName;
442  }
443  set
444  {
445  _TableName  =  value;
446  }
447  }
448 
449  /// <summary>
450  ///  表字段FieldStr
451  /// </summary>
452  public string  QueryFieldName
453  {
454  get
455  {
456  return  _QueryFieldName;
457  }
458  set
459  {
460  _QueryFieldName  =  value;
461  }
462  }
463 
464  /// <summary>
465  ///  排序字段
466  /// </summary>
467  public string  OrderStr
468  {
469  get
470  {
471  return  _OrderStr;
472  }
473  set
474  {
475  _OrderStr  =  value;
476  }
477  }
478 
479  /// <summary>
480  ///  查询条件
481  /// </summary>
482  public string  QueryCondition
483  {
484  get
485  {
486  return  _QueryCondition;
487  }
488  set
489  {
490  _QueryCondition  =  value;
491  }
492  }
493 
494  /// <summary>
495  ///  主键
496  /// </summary>
497  public string  PrimaryKey
498  {
499  get  
500  {
501  return  _PrimaryKey;
502  }
503  set  
504  {
505  _PrimaryKey  =  value;
506  }
507  }
508 
509  /// <summary>
510  ///  得到分页数据
511  /// </summary>
512  /// <param name="connectionstring"> 连接字符串 </param>
513  /// <returns> DataSet </returns>
514  public  DataSet QueryDataTable( string  connectionstring)
515  {
516  SqlParameter[] parameters  =  {
517  new  SqlParameter( " @Tables " , SqlDbType.VarChar,  255 ),
518  new  SqlParameter( " @PrimaryKey "  , SqlDbType.VarChar ,  255 ), 
519  new  SqlParameter( " @Sort " , SqlDbType.VarChar ,  255 ),
520  new  SqlParameter( " @CurrentPage " , SqlDbType.Int ),
521  new  SqlParameter( " @PageSize " , SqlDbType.Int ), 
522  new  SqlParameter( " @Fields " , SqlDbType.VarChar,  255 ),
523  new  SqlParameter( " @Filter " , SqlDbType.VarChar,  1000 ),
524  new  SqlParameter( " @Group "  , SqlDbType.VarChar,  1000 )
525  };
526  parameters[ 0 ].Value  =  _TableName;
527  parameters[ 1 ].Value  =  _PrimaryKey;
528  parameters[ 2 ].Value  =  _OrderStr;
529  parameters[ 3 ].Value  =  PageIndex;
530  parameters[ 4 ].Value  =  PageSize;
531  parameters[ 5 ].Value  = _QueryFieldName;
532  parameters[ 6 ].Value  =  _QueryCondition;
533  parameters[ 7 ].Value  = string .Empty;
534  ds  = null ;
535  ds  = new  DataSet();
536  ds  =  DbHelperSQL.RunProcedure(connectionstring,  " uspDividePage " , parameters,  " tbPageData " );
537 
538  if  (_isQueryTotalCounts)
539  {
540  _TotalCount  =  GetTotalCount(connectionstring);
541  }
542 
543  if  (_TotalCount  == 0 )
544  {
545  _PageIndex  = 0 ;
546  _PageCount  = 0 ;
547  }
548  else
549  {
550  _PageCount  =  _TotalCount  %  _PageSize  == 0 ?  _TotalCount  /  _PageSize : _TotalCount  /  _PageSize  + 1 ;
551 
552  if  (_PageIndex  >  _PageCount)
553  {
554  _PageIndex  =  _PageCount;
555  parameters[ 4 ].Value  =  _PageSize;
556  ds  =  QueryDataTable(connectionstring);
557  }
558  }
559 
560  return  ds;
561  }
562 
563  /// <summary>
564  ///  得到总的记录数
565  /// </summary>
566  /// <param name="connectionstring"> 连接字符串 </param>
567  /// <returns> 总的记录数 </returns>
568  public int  GetTotalCount( string  connectionstring)
569  {
570  string  strSql  = "  select count(1) from  " + _TableName;
571 
572  if  (_QueryCondition  != string .Empty)
573  {
574  strSql  += "  where  " +  _QueryCondition;
575  }
576 
577  return  Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString(), connectionstring));
578  }
579  }
580  #endregion
581  }
582

 



本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321376,如需转载请自行联系原作者

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
分布式计算 DataWorks 关系型数据库
DataWorks支持将ODPS表拆分并回流到MySQL的多个库和表中
【2月更文挑战第14天】DataWorks支持将ODPS表拆分并回流到MySQL的多个库和表中
56 8
|
4月前
|
分布式计算 大数据 调度
大数据计算MaxCompute怎么将一个Quota的资源优先供给给标准模式的生产库调度使用?
大数据计算MaxCompute怎么将一个Quota的资源优先供给给标准模式的生产库调度使用?
33 2
|
4月前
|
消息中间件 存储 算法
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
76 0
|
8月前
|
存储 easyexcel 大数据
探索EasyExcel库:简化大数据Excel操作的利器
在企业应用和数据处理中,Excel表格是常用的数据交换和存储方式。然而,处理大量数据的Excel文件可能是一项繁琐的任务。EasyExcel库作为一款强大的Excel操作工具,可以帮助我们更轻松地进行大数据量的Excel文件读写、导入导出等操作。本文将深入探讨EasyExcel库的基本概念、特点,以及如何在实际应用中使用它进行Excel操作。
212 0
|
10月前
|
数据采集 SQL 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之基本命令和使用的查询库/表
在大数据领域中,Sqoop是一款非常流行的数据迁移工具。它可以将关系型数据库中的数据快速地移动到Hadoop生态系统中,方便我们进行更深入的分析和处理。本文将介绍Sqoop的基本命令及如何使用Sqoop来查询库表,希望能够为大家提供一些参考和帮助。
124 0
|
存储 分布式计算 算法
云计算和大数据库的应用
当今时代云计算和大数据在日常生活中扮演越来越重要的角色
|
SQL 存储 分布式计算
图解大数据 | Hive与HBase详解@海量数据库查询
HBase是建立在Hadoop文件系统之上的、分布式面向列的数据库,包含Region Server、HBase Master、ZooKeeper等三个组件。Hive是基于Hadoop的一个数据仓库工具,用于结构化数据的查询、分析和汇总。
794 0
图解大数据 | Hive与HBase详解@海量数据库查询
|
存储 关系型数据库 MySQL
记一次Mysql大数据分页优化问题
记一次Mysql大数据分页优化问题
|
监控 关系型数据库 MySQL
[MySQL FAQ]系列 — 大数据量时如何部署MySQL Replication从库
[MySQL FAQ]系列 — 大数据量时如何部署MySQL Replication从库
|
前端开发 Java 大数据
select2,利用ajax高效查询大数据列表2(可搜索、可分页)
select2,利用ajax高效查询大数据列表(可搜索、可分页)
154 0