认证考试winforms中datagridview控件做一个相似于网站那样的分页功效
WinForms中DataGridView控件做一个类似于网站那样的分页功能前几天有学员问了我一个问题,如何使用WinForms中DataGridView控件做一个类似于网站那样的分页功能!今天我放到空间里面,希望大家都能学会并且能够在开发中去使用它!,,,,,
,,,,,首先大家需要知道,为什么我们在开发中需要使用分页这一技术!那么今天我就来和大家一起讨论一下,在实际开发过程中,我们的数据库表里的数据肯定不止那么几条,没有经验的程序员往往会把表里的数据在Form_Load()事件里通过DataGirdView控件全部加载出来!那么这样的话给我们带来一个问题!也就是说如果数据库表里的数据非常多的情况下(10万条或100条),全部加载出来肯定会非常的慢,这就给程序的性能带来了一些问题,给我们的客户也带来了一些负面影响.那么我们如何解决这样的问题呢??这就需要使用到我们刚刚提到的分页!,,,,,
,,,,,具体的说,什么是分页呢?分页说白了就是一次我只加载那么几条数据,不需要把数据全部一次性加载出来,需要时再次加载,那么这样做的话就解决了我们刚刚提到的"性能"问题了!,,,,,
,,,,,废话少说,开始讲解如何使用这一技术了,在WinForms中使用DataGridView控件分页有两种情况:一、真分页.二、假分页。好,既然分了两种情况,那么我们就来谈一下什么是真分页,什么是假分页,先谈假分页吧~我们都知道,在C#中使用ADO.NET访问数据库中的数据,以Sql,,,,,Server为例,需要使用一个叫SqlDataAdapter的对象的Fill()方法来填充数据集,DataSet是一个虚拟表,在WinForms中操作数据其实就是操作SqlDataAdapter对象填充的DataSet,假分页就是把数据库的数据通过SqlDataAdapter对象填充到数据集里。然后在WinForms中或者在ASP.NET只显示DataSet里一条或者几条数据,这样也可以实现一个分页。但是这样做根本没有实际的意义,为什么呢,很简单,因为程序还是把数据库里的数据全部加载到DataSet里,只不过我们控制它的显示而已~这样,性能一点没有得到提升。大家可以实际的操作一下。这里我就不去演示了,今天我所讲的是真分页。真分页就是我要多少条数据,SqlDataAdapter对象就去数据库取多少条数据,那么这样的话在性能上就得到了一个很大的提升。因为我填充DataSet时只需要填充提取出来的数据~,,,,,
,,,,,好了,说了这么多理论概念,下面我就把实现好的代码添出来,大家可以参考一下:,,,,,
,,,,,1、在使用真分页时需要使用T-SQL创建一个分页的存储过程,具体代码如下:,,,,,
CREATE,,,,,PROCEDURE,,,,,proc_Page,,,,,
@Table,,,,,VARCHAR(1000),,,,,,--表名,,,,,
@Primarykey,,,,,VARCHAR(100),,,,,,--主键,,,,,
@Condition,,,,,VARCHAR(5000),,,,,,--查询条件,,,,,
@PageNumber,,,,,INT, ,,,,,--开始页数,,,,,
@PageSize,,,,,INT, ,,,,,--每页大小,,,,,
@IsCount,,,,,BIT ,,,,,--是否获得记录数,0为否,,,,,
AS,,,,,
,,,,,DECLARE,,,,,@SQL,,,,,VARCHAR(8000),,,,,
,,,,,IF,,,,,@IsCount,,,,,!=,,,,,0,,,,,
,,,,,SET,,,,,@SQL,,,,,=,,,,,'SELECT,,,,,Count(*),,,,,FROM,,,,,'
,,,,,+,,,,,@Table,,,,,+,,,,,',,,,,WHERE,,,,,',,,,,+,,,,,@Condition,,,,,
,,,,,ELSE,,,,,
,,,,,BEGIN,,,,,
,,,,,IF,,,,,@PageNumber,,,,,=,,,,,1,,,,,
,,,,,SET,,,,,@SQL,,,,,=,,,,,'SELECT,,,,,TOP,,,,,',,,,,+,,,,,STR(@PageSize),,,,,+,,,,,',,,,,*,,,,,FROM,,,,,',,,,,+,,,,,@Table,,,,,+,,,,,',,,,,WHERE,,,,,',,,,,+,,,,,@Condition,,,,,
,,,,,ELSE,,,,,
,,,,,SET,,,,,@SQL,,,,,=,,,,,'SELECT,,,,,TOP,,,,,',,,,,+,,,,,STR(@PageSize),,,,,+,,,,,',,,,,*,,,,,FROM,,,,,',,,,,+,,,,,@Table,,,,,+,,,,,
,,,,,',,,,,WHERE,,,,,',,,,,+,,,,,@Primarykey,,,,,+,,,,,',,,,,NOT,,,,,IN,,,,,(SELECT,,,,,TOP,,,,,',,,,,+,,,,,STR(@PageSize*(@PageNumber,,,,,-,,,,,1)),,,,,
+,,,,,',,,,,',,,,,+,,,,,@Primarykey,,,,,+,,,,,',,,,,FROM,,,,,',,,,,+,,,,,@Table,,,,,+,,,,,',,,,,WHERE,,,,,',,,,,+,,,,,@Condition,,,,,+ ,,
,,,'),,,,,AND,,,,,',,,,,+,,,,,@Condition,,,,,
,,,,,END,,,,,
,,,,,EXEC(@SQL),,,,,
,,,,,2、写完存储过程之后,下面就是建一个Windows窗体应用程序。首先在
窗体里拖放一个DataGridView控件,将name属性修改为dgbPage,在拖放四个
Button,第一个Text值为"首页",name属性为"btnFirst",第二个Text值为"
上一页",name属性为"btnFirstPage",第三个Text值为"下一页",name属性为
"btnNext",第四个Text值为"尾页",name属性为"btnLast".在拖放一个Label
控件,Text属性暂时不需要设置,待会通过程序动态实现,name属性为
"lblPageInfo",具体实现代码如下:,,,,,
/*,,,,,
*,,,,,编写者:黄彬,,,,,
*,,,,,版权所有,严禁拷贝!,,,,,
*/,,,,,
using,,,,,System;,,,,,
using,,,,,System.Collections.Generic;,,,,,
using,,,,,System.ComponentModel;,,,,,
using,,,,,System.Data;,,,,,
using,,,,,System.Drawing;,,,,,
using,,,,,System.Text;,,,,,
using,,,,,System.Windows.Forms;,,,,,
using,,,,,System.Data.SqlClient;,,,,,
namespace,,,,,北大青鸟APTECH.MarkingPage,,,,,
{,,,,,
,,,,,public,,,,,partial,,,,,class,,,,,frmMarkingPage,,,,,:,,,,,Fo
rm,,,,,
,,,,,{,,,,,
,,,,,int,,,,,pageCount,,,,,=,,,,,1; ,,,,,//当
前页数,,,,,
,,,,,int,,,,,pageSum,,,,,=,,,,,0;
,,,,,//总页数,,,,,
,,,,,int,,,,,resultCount,,,,,=,,,,,10;
,,,,,//每页记录数,,,,,
,,,,,int,,,,,resultSum,,,,,=,,,,,0;
,,,,,//总记录条数,,,,,
,,,,,string,,,,,where,,,,,=,,,,,"1,,,,,=,,,,,1"; ,,,,,//查询条件,,,,,
,,,,,public,,,,,frmMarkingPage(),,,,,
,,,,,{,,,,,
,,,,,InitializeComponent();,,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,frmMarkingPage_Load(object,,,,,send
er,,,,,,EventArgs,,,,,e),,,,,
,,,,,{,,,,,
,,,,,pageCount,,,,,=,,,,,1;,,,,,
,,,,,Page();,,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,btnFirst_Click(object,,,,,sender,,,
,,,EventArgs,,,,,e),,,,,
,,,,,{,,,,,
,,,,,pageCount,,,,,=,,,,,1;,,,,,
,,,,,Page();,,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,Page(),,,,,
,,,,,{,,,,,
,,,,,this.dgbPage.DataSource,,,,,=,,,,,this.GetStudentInf
o(where,,,,,,pageCount,,,,,,resultCount,,,,,,0);,,,,,
,,,,,resultSum,,,,,=,,,,,Convert.ToInt32(this.GetStudentI
nfo(where,,,,,,0,,,,,,0,,,,,,1).Rows[0][0]);,,,,,
,,,,,if,,,,,(resultSum,,,,,%,,,,,resultCount,,,,,==,,,,,0
),,,,,
,,,,,pageSum,,,,,=,,,,,resultSum,,,,,/,,,,,resultCount;,,,,,
,,,,,else,,,,,
,,,,,pageSum,,,,,=,,,,,resultSum,,,,,/,,,,,resultCoun
t,,,,,+,,,,,1;,,,,,
,,,,,this.lblPageInfo.Text,,,,,=,,,,,"第,,,,,",,,,,+,,,,,pageCount,,,,,+,,,,,",,,,,页,,,,,|,,,,,
共,,,,,",,,,,+,,,,,pageSum,,,,,+,,,,,",,,,,页,,,,,|,,,,,每
页,,,,,",,,,,+,,,,,resultCount,,,,,+,,,,,",,,,,条,,,,,|,,,,,
共,,,,,",,,,,+,,,,,resultSum,,,,,+,,,,,",,,,,条";,,,,,
,,,,,},,,,,
,,,,,public,,,,,DataTable,,,,,GetStudentInfo(string,,,,,Condi
tion,,,,,,int,,,,,pageNumber,,,,,,int,,,,,PageSize,,,,,,int,,,,,isCount),,,,,
,,,,,{,,,,,
,,,,,SqlParameter[],,,,,sqlParameter,,,,,=,,,,,
,,,,,{,,,,,
,,,,,new,,,,,SqlParameter("@Table","student"),,,,
,,
,,,,,new,,,,,SqlParameter("@Primarykey","stuID"),,,,,,
,,,,,new,,,,,SqlParameter("@Condition",Condition),,,,,,
,,,,,
,,,,,new,,,,,SqlParameter("@PageNumber",pageNumber),,,,,,
,,,,,new,,,,,SqlParameter("@PageSize",PageSize),,,,,,
,,,,,new,,,,,SqlParameter("@IsCount",isCount),,,,,
,,,,,};,,,,,
,,,,,using,,,,,(SqlConnection,,,,,sqlConnection,,,,,=,,,,,new,,,,,SqlConnection("Data,,,,,Source=.;Initial,,,,,Catalog=TestData;Integrated,,,,,Security=True")),,,,,
,,,,,{,,,,,
,,,,,try,,,,,
,,,,,{,,,,,
,,,,,sqlConnection.Open();,,,,,
,,,,,SqlCommand,,,,,sqlcommand,,,,,=,,,,,new,,,,,SqlCommand("proc_Page",,,,,,sqlConnection);,,,,,
,,,,,sqlcommand.CommandType,,,,,=,,,,,CommandType.StoredProcedure;,,,,,
,,,,,sqlcommand.Parameters.AddRange(sqlParameter);,,,,,
,,,,,SqlDataAdapter,,,,,sqlDataAdapter,,,,,=,,,,,new,,,,,SqlDataAdapter();,,,,,
,,,,,sqlDataAdapter.SelectCommand,,,,,=,,,,,sqlcommand;,,,,,
,,,,,DataTable,,,,,dt,,,,,=,,,,,new,,,,,DataTable();,,,,,
,,,,,sqlDataAdapter.Fill(dt);,,,,,
,,,,,return,,,,,dt;,,,,,
,,,,,},,,,,
,,,,,catch,,,,,(SqlException,,,,,ex),,,,,
,,,,,{,,,,,
,,,,,throw,,,,,ex;,,,,,
,,,,,},,,,,
,,,,,catch,,,,,(Exception,,,,,ex),,,,,
,,,,,{,,,,,
,,,,,throw,,,,,ex;,,,,,
,,,,,},,,,,
,,,,,},,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,btnFirstPage_Click(object,,,,,sende
r,,,,,,EventArgs,,,,,e),,,,,
,,,,,{,,,,,
,,,,,if,,,,,(pageCount,,,,,==,,,,,1),,,,,
,,,,,MessageBox.Show("已经到达首页!");,,,,,
,,,,,else,,,,,
,,,,,{,,,,,
,,,,,pageCount--;,,,,,
,,,,,Page();,,,,,
,,,,,},,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,btnNext_Click(object,,,,,sender,,,,
,,EventArgs,,,,,e),,,,,
,,,,,{,,,,,
,,,,,if,,,,,(pageCount,,,,,==,,,,,pageSum),,,,,
,,,,,MessageBox.Show("已经到达尾页!");,,,,,
,,,,,else,,,,,
,,,,,{,,,,,
,,,,,pageCount++;,,,,,
,,,,,Page();,,,,,
,,,,,},,,,,
,,,,,},,,,,
,,,,,private,,,,,void,,,,,btnLast_Click(object,,,,,sender,,,,
,,EventArgs,,,,,e),,,,,
,,,,,{,,,,,
,,,,,pageCount,,,,,=,,,,,pageSum;,,,,,
,,,,,Page();,,,,,
,,,,,},,,,,
,,,,,},,,,,
},,,,,
本文档为【认证考试winforms中datagridview控件做一个相似于网站那样的分页功效】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。