原创企业级控件库之大数据量分页控件
原创企业级控件库之大数据量分页控件
发布日期:2010年12月18日星期六作者:EricHu
在上篇:我介绍了原创企业级控件库之组合查询控件,这篇我将给大家介绍:企业级控件库之大数据量分页控件。
摘要
说到分页,大家采用的方法各有千秋,分页在一个中大型软件项目中对数据的快速呈现起到很关键的作用,试想一个数据量上几十万或者几百万的数据表,要是没有分页功能会是一个什么样的效果。总的说来,大家采用的分页方法大同小异,但到底那种方法才是最佳的呢,各有各的看法,让数据说话最有效。今天我给大家分享一个WinForm下大数据量分页控件(当然分页思想也可用于WebForm)。虽然不能说是最佳的,但在我的几个实际项目中,用的都是它,效果不错,可放心使用。
成就别人、等于成就自己。我没什么要求,欢迎大家多多支持与评论,觉得不错的,记得点击文章左下角的”关注博客”,就这么简单。同时,你要用什么好的想法,也可以与我交流,谢谢。
分页控件运行效果如下图:
用到的分页存储过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | 代码 -- ============================================= -- 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,主要负责与存储过程进行交互。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | 数据源提供(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 |
窗体调用方法
一、设置窗体调用公共方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #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测试数据代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | -- ============================================= -- 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 |
下面给出本控件完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 | #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 } |
作者:
RDIF
出处:
http://www.cnblogs.com/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手机号)
框架官网:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.cnblogs.com/huyong
国思RDIF开发框架
,
给用户和开发者最佳的.Net框架平台方案,为企业快速构建跨平台、企业级的应用提供强大支持。
关于作者:系统架构师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,在面向对象、面向服务以及数据库领域有一定的造诣。现主要从事基于
RDIF
框架的技术开发、咨询工作,主要服务于金融、医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。
如有问题或建议,请多多赐教!
本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过微信、邮箱、QQ等联系我,非常感谢。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步