您的位置:首页 > 其它

Flash ActionScript (16) 3D工具实例和骨骼工具

2012-03-15 14:53 429 查看
原创企业级控件库之大数据量分页控件
发布日期:2010年12月18日星期六作者:EricHu

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

  摘要

  说到分页,大家采用的方法各有千秋,分页在一个中大型软件项目中对数据的快速呈现起到很关键的作用,试想一个数据量上几十万或者几百万的数据表,要是没有分页功能会是一个什么样的效果。总的说来,大家采用的分页方法大同小异,但到底那种方法才是最佳的呢,各有各的看法,让数据说话最有效。今天我给大家分享一个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




© 2010EricHu

原创作品,转贴请注明作者和出处,留此信息。

------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
CSDNhttp://blog.csdn.net/chinahuyong
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: