WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件 

.CS:

  1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.Data.SqlClient;
10
11 namespace allenPageTest
12 {
13 public partial class Form2 : Form
14 {
15 public Form2()
16 {
17 InitializeComponent();
18 }
19
20 private void Form2_Load(object sender, EventArgs e)
21 {
22 BindDataWithPage(1);
23 }
24
25 //总记录数
26 public int RecordCount = 0;
27 private string strConn = @"server=.;database=test;uid=sa;pwd=1234";
28 private string strProcedure = "PageTest ";
29
30
31 /// <summary>
32 /// 绑定第Index页的数据
33 /// </summary>
34 /// <param name="Index"></param>
35 private void BindDataWithPage(int Index)
36 {
37 allenPage1.PageIndex = Index;
38 //winFormPager1.PageSize = 10;
39 DataTable dt = GetData(strConn, strProcedure, Index, allenPage1.PageSize);
40
41 dataGridView1.DataSource = dt;
42
43 //获取并设置总记录数
44 allenPage1.RecordCount = RecordCount;
45 }
46
47
48 /// <summary>
49 /// 获取数据源
50 /// </summary>
51 /// <param name="conn">连接对象</param>
52 /// <param name="strProcedure">存储过程名称</param>
53 /// <param name="pageIndex">页码</param>
54 /// <param name="pageSize">每一页显示的行数</param>
55 /// <returns></returns>
56 private DataTable GetData(string conn, string strProcedure, int pageIndex, int pageSize)
57 {
58
59 using (SqlConnection connection = new SqlConnection(conn))
60 {
61 SqlCommand command = new SqlCommand(strProcedure, connection);
62 command.CommandType = CommandType.StoredProcedure;//采用存储过程
63 command.Parameters.Add("@Table", SqlDbType.NVarChar, 1000).Value = "TableName";//对应的数据表名
64 command.Parameters.Add("@TIndex", SqlDbType.NVarChar, 100).Value = "Index";//主键ID
65 command.Parameters.Add("@Column", SqlDbType.NVarChar, 2000).Value = "*";//要查询的字段,*为全部字段
66 command.Parameters.Add("@Sql", SqlDbType.NVarChar, 3000).Value = " 1=1 ";//查询条件
67 command.Parameters.Add("@PageIndex", SqlDbType.Int, 8).Value = pageIndex.ToString();//当前页码
68 command.Parameters.Add("@PageSize", SqlDbType.Int, 8).Value = pageSize.ToString();//每一页显示的行数
69 command.Parameters.Add("@Sort", SqlDbType.NVarChar, 200).Value = " Column Name asc";//排序的字段
70 //打开连接
71 if (connection.State != ConnectionState.Open)
72 {
73 connection.Open();
74 }
75 try
76 {
77 //填充数据
78 SqlDataAdapter da = new SqlDataAdapter(command);
79 DataSet ds = new DataSet();
80 da.Fill(ds);
81 //获取总记录数
82 RecordCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
83 //返回数据集
84 return ds.Tables[0];
85
86 }
87 catch (SqlException err)
88 {
89 MessageBox.Show(err.Message);
90 return null; ;
91 }
92 finally
93 {
94 connection.Close();
95 }
96 }
97 }
98
99 private void allenPage1_PageIndexChanged(object sender, EventArgs e)
100 {
101 BindDataWithPage(allenPage1.PageIndex);
102 }
103 }
104 }

存储过程:

 1 IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME='PageTest')
2 DROP PROC PageTest
3 GO
4 CREATE PROCEDURE [dbo].[PageTest]
5 @Table VARCHAR(1000), --表名,多表是请使用 tA a inner join tB b On a.AID = b.AID
6 @TIndex NVARCHAR(100), --主键
7 @Column NVARCHAR(2000) = '*',--要查询的字段,全部字段就为*
8 @Sql NVARCHAR(3000) = '',--Where条件
9 @PageIndex INT = 1, --开始页码
10 @PageSize INT = 10, --每页查询数据的行数
11 @Sort NVARCHAR(200) = '' --排序的字段
12
13 AS
14
15
16
17 DECLARE @strWhere VARCHAR(2000)
18 DECLARE @strsql NVARCHAR(3900)
19 IF @Sql IS NOT NULL AND len(LTRIM(RTRIM(@Sql)))>0
20 BEGIN
21 SET @strWhere = ' WHERE ' + @Sql + ' '
22 END
23 ELSE
24 BEGIN
25 SET @strWhere = ''
26 END
27
28 IF (charindex(LTRIM(RTRIM(@TIndex)),@Sort)=0)
29 BEGIN
30 IF(@Sort='')
31 SET @Sort = @TIndex + ' DESC '
32 ELSE
33 SET @Sort = @Sort+ ' , '+@TIndex + ' DESC '
34 END
35 IF @PageIndex < 1
36 SET @PageIndex = 1
37
38 IF @PageIndex = 1
39 BEGIN
40 SET @strsql = 'SELECT TOP ' + str(@PageSize) +' '+@Column+ ' FROM ' + @Table + ' ' + @strWhere + ' ORDER BY '+ @Sort
41 END
42 ELSE
43 BEGIN
44
45 DECLARE @START_ID NVARCHAR(50)
46 DECLARE @END_ID NVARCHAR(50)
47 SET @START_ID = convert(NVARCHAR(50),(@PageIndex - 1) * @PageSize + 1)
48 SET @END_ID = convert(NVARCHAR(50),@PageIndex * @PageSize)
49 SET @strsql = ' SELECT '+@Column+ '
50 FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS RowNum,
51 '+@Column+ '
52 FROM '+@Table +' WITH(NOLOCK) ' + @strWhere +') AS D
53 WHERE RowNum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
54 END
55 EXEC(@strsql)
56 PRINT @strsql
57 SET @strsql = 'SELECT Count(1) as TotalRecords FROM ' + @Table +' WITH(NOLOCK) ' + @strWhere
58 PRINT @strsql
59 EXEC(@strsql)

还有一种存储过程写法,仅供参考:

 1 CREATE PROCEDURE pro_DataPageRowNumber
2 @SQL nvarchar(2000),--主句
3 @Order nvarchar(20),--排序
4 @PageIndex int,--当前页
5 @PageSize int,--每页显示数
6 @TotalRow int output--记录总数
7 AS
8 SET NOCOUNT ON;
9 declare @ExceSQL nvarchar(4000)--主句
10 declare @startRow as int--开始行
11 set @startRow=(@PageIndex-1)*@PageSize+1
12 declare @lastRow int--结束行
13 set @lastRow=@PageSize*@PageIndex
14 declare @RowNumber nvarchar(100)
15 set @RowNumber=',Row_NUMBER() OVER(ORDER BY '+@Order+') as RowNumber from '
16 set @SQL=Replace(@SQL,' from ',@RowNumber)
17 set @ExceSQL='select @TotalRow=max(RowNumber) from ('+@SQL+') as tmp'
18 execute sp_executesql @ExceSQl,N'@TotalRow in output',@TotalRow output
19 set @ExceSQL='select * from('+@SQL+') as tmp where RowNumber between'+ Convert(nvarchar,@startRow)
20 +' and '+Convert(nvarchar,@lastRow)
21 execute(@ExceSQL)
22
23 GO

分页的控件是自己写的一个用户控件,生成之后是一个DLL文件,直接引用在项目里面即可,有需要的可以留下邮箱。

WinForm DataGridView分页功能的更多相关文章

  1. C# Winform DataGridView分页功能的实现

    // 1.定义几个所需的公有成员: ; //每页显示行数 ; //总记录数 ; //页数=总记录数/每页显示行数 ; //当前页号 ; //当前记录行 DataSet ds = new DataSet ...

  2. C# 实现DataGridView分页功能

    C#实现DataGridView分页功能 2010-07-17 13:45:42|  分类: C#|字号 订阅     从界面可以看到,在设计时需要一个DataGridView.BindingNavi ...

  3. C# datagridview分页功能

    winform开发是或多或少都会接触datagridview控件,如果数据量大,那么必须使用分页功能,但是datagridview自身并没有分页,所以我们要自己实现.在网上搜了一些发现没有太适合自己的 ...

  4. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  5. winform中DataGridView实现分页功能

    WinForm轻松实现自定义分页 (转载) WinForm轻松实现自定义分页 (转载)   转载至http://xuzhihong1987.blog.163.com/blog/static/26731 ...

  6. DataGridView使用BindingNavigator实现简单分页功能

    接上一篇<DataGridView使用自定义控件实现简单分页功能>,本篇使用BindingNavigator来实现简单分页功能.其实也只是借用了一个BindingNavigator空壳, ...

  7. winform里dataGridView分页代码,access数据库

    winform里dataGridView分页,默认dataGridView是不分页的和webform里不一样,webform中GridView自带自带了分页. 现在c/s的程序很多时候也需要webfo ...

  8. 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一

    简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页  和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...

  9. C#实现WinForm DataGridView控件支持叠加数据绑定

    我们都知道WinForm DataGridView控件支持数据绑定,使用方法很简单,只需将DataSource属性指定到相应的数据源即可,但需注意数据源必须支持IListSource类型,这里说的是支 ...

随机推荐

  1. Python循环语句

    1.Python循环类型 1.while循环:在某条件下,循环执行某段程序 a. while语句有两个重要命令:continue,break来跳出循环. continue用来跳出该次循环 break用 ...

  2. iPhone应用开发 UITableView学习点滴详解

    iPhone应用开发 UITableView学习点滴详解是本文要介绍的内容,内容不多,主要是以代码实现UITableView的学习点滴,我们来看内容. -.建立 UITableView DataTab ...

  3. Github账户注册的过程

    首先我通过冯老师的博客园帖子中的链接进入了注册地址,填写了用户名,邮箱,和密码.然后我进入我的邮箱验证了Github网站给我发送的验证信息,至此,我的GITHUB账户便注册完成了.

  4. 解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客 http://hsj69106.blog.51cto.com/1017401/595598/

    解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客  http://hsj69106.blog.51cto.com/1017401/595598/

  5. HDU 1403-Longest Common Substring (后缀数组)

    Description Given two strings, you have to tell the length of the Longest Common Substring of them. ...

  6. Docker学习---ubuntu环境

    添加Docker的ATP仓库 sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sour ...

  7. python 3 学习笔记(二)

    1.python中的数据类型 python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是在初始化生成一个对象,即所有数据都是对象对象三个特性 身份:内存地址,可以用i ...

  8. 修复FreeBSD上的ufs文件系统

    昨天在两台FreeBSD上配置好Heartbeat服务(两台机器是用网线连通的,做为Heartbeat的两个节点),启动服务时Heartbeat检测到crmd守护进程没起来,于是它就尝试重启两台机器以 ...

  9. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  10. JAVA访问权限

      同一个类 同一个包 不同包的子类 不同包的非子类 Private √       Default √ √     Protected √ √ √   Public √ √ √ √