[Transfer][VB]DataGrid分页机制,通过编程做一个十分有个性、功能十分完善的分页效果...

本文介绍如何使用ASP.NET中的DataGrid控件实现自定义分页功能。通过编程控制,可以实现更加灵活和个性化的分页效果,包括每页记录数的选择、跳转至指定页等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们来分析DataGrid控件的分页功能在以上两个实例中应用。通过分析代码我们知道:当客户端请求翻页时候,ASP.NET将执行由.NET框架委托的同名事件――PageIndexChanged事件,通过这个事件过程达到分页目的。分页机制主要体现在上段的DataGrid1.CurrentPageIndex = e.NewPageIndex语句中。在利用OleDbDataAdapter 对象读取数据后,往DataSet对象中填充数据的就是CurrentPageIndex和PageSize两个属性。OleDbDataAdapter从数据库中按照一定的记录排序方式读出数据后,把从第(CurrentPageIndex*PageSize)条记录开始到第(CurrentPageIndex*PageSize+PageSize)条记录填充到DataSet里,组成一个满页的记录,然后在绑定到DataGrid,然后通过DataGrid控件显示出来,就是请求的页面。本质上就是利用DataAdapter对象Fill方法的几个重载。但是这个过程对于使用这种分页方式的用户来说是透明的,因此我们无需编写任何代码,一切由.NET框架运行库完成。这样的好处是并不需要多少编程技巧,只需指指点点,分页效果就实现了。不好的地方就是缺少灵活性。当我们需要一个多样化,个性化的分页效果的时候,我们就要利用简单编程的方式来实现。



下面这个实例中,我们将可以根据DataGrid分页机制,通过编程做一个十分有个性、功能十分完善的分页效果。

 

在DataCon Web项目里新建一个Web 窗体,命名为DataGrid_Sample3.aspx,并添加一个DataGrid控件,四个LinkButton控件,一个DropDownList控件,一个Label1控件,一个TextBox控件,一个Button控件,一个正规则表达式验证控件。
DataGrid_Sample3.aspx的主要HTML代码如下:

 1None.gif<form id="Form1" method="post" runat="server">
 2None.gif <FONT face="宋体">
 3None.gif <asp:DataGrid 
 4None.gif       id="DataGrid1" 
 5None.gif        runat="server" Width="368px" Height="144px" AllowPaging="True" AllowCustomPaging="True"
 6None.gif  PageSize="999">
 7None.gif  <ItemStyle Font-Size="X-Small"></ItemStyle>
 8None.gif  <HeaderStyle BackColor="SkyBlue"></HeaderStyle>
 9None.gif <PagerStyle Visible="False" PageButtonCount="5" Mode="NumericPages"></PagerStyle>
10None.gif </asp:DataGrid><br>
11None.gif <asp:LinkButton    
12None.gifid="LinkButton1" runat="server"
13None.gif Font-Size="X-Small">第一页</asp:LinkButton>  
14None.gif    <asp:LinkButton 
15None.gifid="LinkButton2" runat="server"
16None.gif Font-Size="X-Small">上一页</asp:LinkButton>
17None.gif <asp:LinkButton 
18None.gifid="LinkButton3" runat="server" 
19None.gifFont-Size="X-Small">下一页</asp:LinkButton>
20None.gif <asp:LinkButton 
21None.gifid="LinkButton4" runat="server" 
22None.gifFont-Size="X-Small">最后页</asp:LinkButton>
23None.gif <asp:Label 
24None.gifid="Label1" runat="server" Width="168px" 
25None.gifFont-Size="X-Small">Label</asp:Label>
26None.gif <br>
27None.gif  每页记录条数
28None.gif <asp:DropDownList
29None.gif id="DropDownList1" runat="server" 
30None.gifHeight="32px" Width="48px" AutoPostBack="True">
31None.gif  <asp:ListItem value="3">3</asp:ListItem>
32None.gif  <asp:ListItem value="5">5</asp:ListItem>
33None.gif  <asp:ListItem value="7" Selected="True">7</asp:ListItem>
34None.gif  <asp:ListItem value="9">9</asp:ListItem>
35None.gif  <asp:ListItem value="12">12</asp:ListItem>
36None.gif  <asp:ListItem value="15">15</asp:ListItem>
37None.gif </asp:DropDownList>
38None.gif    跳转至
39None.gif <asp:TextBox 
40None.gifid="TextBox1" runat="server" Width="48px"></asp:TextBox>
41None.gif <asp:Button id="Button1" runat="server" 
42None.gifWidth="40px" Text="->Go"></asp:Button>
43None.gif <asp:RegularExpressionValidator 
44None.gifid="RegularExpressionValidator1" runat="server" 
45None.gifFont-Size="XX-Small" ErrorMessage="请输入正确的页码"
46None.gif     ValidationExpression="[1-9]{1}\d{0,}" 
47None.gifControlToValidate="TextBox1" >
48None.gif</asp:RegularExpressionValidator>
49None.gif</FONT>
50None.gif</form>
51None.gif
52None.gifhttp://www.sucsky.com/info/8120.htm
53None.gif


DataGrid_Sample3.aspx.vb的代码如下:

'----code begin----

  1None.gif'引入名称空间
  2None.gifImports System
  3None.gifImports System.Data
  4None.gifImports System.Web.UI
  5None.gifPublic Class DataGrid_Sample3_aspx
  6None.gif    Inherits System.Web.UI.Page
  7ContractedBlock.gifExpandedBlockStart.gifWeb 窗体设计器生成的代码#Region " Web 窗体设计器生成的代码 "
  8InBlock.gif    '此处省略了窗体设计器生成的代码,以节约篇幅
  9ExpandedBlockEnd.gif#End Region

 10None.gif Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 11None.gif        '在此处放置初始化页的用户代码
 12None.gif        If Not IsPostBack Then
 13None.gif            viewstate("startpage"= 0
 14None.gif            '利用viewstate("startpage")来保存DataGrid1当前页码索引
 15None.gif            '初始化为0,即第一页
 16None.gif            viewstate("PageSize"= 7
 17None.gif            'viewstate("PageSize")来保存PageSize,初始化为7
 18None.gif        End If
 19None.gif        getdata() '条用分页过程
 20None.gifEnd Sub
 21None.gif    '编写读取数据通用过程,利用该过程读出数据,根据指定数据进行分页,
 22None.gif    '并绑定到DataGrid控件上
 23None.gif    Sub getdata()
 24None.gif        Dim connstr As String  '声明数据库连接字符
 25None.gif        Dim mycon As OleDb.OleDbConnection
 26None.gif        '因为使用Aeecss数据库,所以声明OleDConnention对象
 27None.gif        Dim mycmd As OleDb.OleDbDataAdapter
 28None.gif        '声明DataAdapter对象
 29None.gif        Dim mysql As String
 30None.gif        '声明Command命令的 SQL字符串
 31None.gif        Try
 32None.gif            connstr = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("."+ "\StudentInfor.mdb"
 33None.gif            '为连接字符串赋值
 34None.gif            mycon = New OleDb.OleDbConnection(connstr)
 35None.gif            '实例化Connection对象
 36None.gif            mysql = "Select id,name,sex,class,tel ,email from student"
 37None.gif            '设置SQL语句,即查询数据库中所有内容
 38None.gif            mycmd = New OleDb.OleDbDataAdapter(mysql, mycon)
 39None.gif            Dim dt As Data.DataSet = New Data.DataSet
 40None.gif            '声明DataSet对象,并实例话
 41None.gif            mycmd.Fill(dt, viewstate("startpage"* viewstate("PageSize"), viewstate("PageSize"), "infor")
 42None.gif            '填充数据,即在内存中生成DataSet模型数据库
 43None.gif            '利用DataAdapter.Fill的重载功能, viewstate("startpage") * viewstate("PageSize")乘机结果是第几条记录
 44None.gif            DataGrid1.DataSource = dt.Tables("infor")
 45None.gif            '为DataGrid1控件指定数据源
 46None.gif            DataGrid1.DataBind()
 47None.gif            '执行绑定
 48None.gif        Catch ex As Exception
 49None.gif            Response.Write("程序出错,信息描述如下:<br>" & ex.Message)
 50None.gif        Finally
 51None.gif            mycon.Close()
 52None.gif        End Try
 53None.gif        getpages()
 54None.gifEnd Sub
 55None.gif    '获取记录分页信息
 56None.gif    Sub getpages()
 57None.gif        Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(" provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("."& "\StudentInfor.mdb")
 58None.gif        mycon.Open()
 59None.gif        Try
 60None.gif            Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("select count(*) from student", mycon)
 61None.gif            viewstate("pc"= mycmd.ExecuteScalar \ viewstate("PageSize"+ 1
 62None.gif            Label1.Text = "当前为第[" & (viewstate("startpage"+ 1).ToString & "]页/共[" & (viewstate("pc")) & "]页"
 63None.gif        Catch ex As Exception
 64None.gif            Response.Write("程序出错,信息描述如下:<br>" & ex.Message)
 65None.gif        Finally
 66None.gif            mycon.Close()
 67None.gif        End Try
 68None.gifEnd Sub
 69None.gif    '跳转至第一页
 70None.gif Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
 71None.gif        If viewstate("startpage"<> 0 Then
 72None.gif            '如果当前页面不是第一页则执行
 73None.gif            viewstate("startpage"= 0
 74None.gif        End If
 75None.gif        getdata()
 76None.gifEnd Sub
 77None.gif    '跳转至上一页 ,即页码减1
 78None.gif Private Sub LinkButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton2.Click
 79None.gif        If viewstate("startpage"> 0 Then
 80None.gif            '如果当前页码索引大于0则执行
 81None.gif            viewstate("startpage"= viewstate("startpage"- 1
 82None.gif        End If
 83None.gif        getdata()
 84None.gifEnd Sub
 85None.gif    '跳转至下一页 ,即页码加1
 86None.gif Private Sub LinkButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton3.Click
 87None.gif        If viewstate("startpage"< viewstate("pc"- 1 Then
 88None.gif            '如果当前页码索引小于(总页数-1)时 则执行
 89None.gif            viewstate("startpage"= viewstate("startpage"+ 1
 90None.gif        End If
 91None.gif        getdata()
 92None.gifEnd Sub
 93None.gif    ' 跳转至最后一页
 94None.gif Private Sub LinkButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton4.Click
 95None.gif        If viewstate("startpage"<> viewstate("pc"- 1 Then
 96None.gif            '如果当前页面不是最后一页则执行
 97None.gif            viewstate("startpage"= viewstate("pc"- 1
 98None.gif        End If
 99None.gif        getdata()
100None.gifEnd Sub
101None.gif    '跳转至选中页码
102None.gif Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
103None.gif        viewstate("PageSize"= DropDownList1.Selectedvalue
104None.gif        viewstate("startpage"= 0
105None.gif        getdata()
106None.gifEnd Sub
107None.gif    '跳转至手工输入的代码页码
108None.gif Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
109None.gif        If Int(TextBox1.Text) <= viewstate("pc"Then
110None.gif            viewstate("startpage"= Int(TextBox1.Text) - 1
111None.gif            getdata()
112None.gif        End If
113None.gifEnd Sub
114None.gifEnd Class
115None.gif'-----code end ----------
116None.gif

转载于:https://www.cnblogs.com/apiapia/archive/2007/02/24/655170.html

VB DataGrid分页 请看: 数据库:test2000.mdb 表:numbers 字段:Id(自动编号),anumber(数字) 因为DataGrid控件我们采用直接绑定记录集来显示数据.所以分页处理我们采用了间接的办法,定义另一个记录集objrs,将分页后的记录集付给objrs.然后绑定DataGrid ''效果还不错 , 我加了详细地注释,像pagesize, AbsolutePage的用法可参考msdn VB中新建工程,form中添加DataGrid控件,按钮cmdPrevious和cmdNext,文本框txtPage ''引用microsoft active data object 2.x object library Option Explicit Dim conn As ADODB.Connection Dim lCurrentPage As Long Private Sub cmdNext_Click() lCurrentPage = lCurrentPage + 1 Call Loadcontrol(lCurrentPage) End Sub Private Sub cmdPrevious_Click() If lCurrentPage > 1 Then lCurrentPage = lCurrentPage - 1 Call Loadcontrol(lCurrentPage) End If End Sub Private Sub Form_Load() Set conn = New ADODB.Connection conn.CursorLocation = adUseClient conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test2000.mdb;" lCurrentPage = 1 Call Loadcontrol(lCurrentPage) End Sub Private Sub Loadcontrol(lPage As Long) Dim adoPrimaryRS As ADODB.Recordset Dim lPageCount As Long Dim nPageSize As Integer Dim lCount As Long ''每页显示的纪录 nPageSize = 10 Set adoPrimaryRS = New ADODB.Recordset adoPrimaryRS.Open "select * from numbers", conn, adOpenStatic, adLockOptimistic adoPrimaryRS.PageSize = nPageSize ''页数 lPageCount = adoPrimaryRS.PageCount If lCurrentPage > lPageCount Then lCurrentPage = lPageCount End If adoPrimaryRS.AbsolutePage = lCurrentPage ''定义另一个记录集 Dim objrs As New ADODB.Recordset ''添加字段名称 For lCount = 0 To adoPrimaryRS.Fields.Count - 1 objrs.Fields.Append adoPrimaryRS.Fields(lCount).Name, adVarChar, adoPrimaryRS.Fields(lCount).DefinedSize Next ''打开记录集 objrs.Open ''将指定记录数循环添加到objrs中 For lCount = 1 To nPageSize objrs.AddNew objrs!id = adoPrimaryRS!id objrs!anumber = adoPrimaryRS!anumber adoPrimaryRS.MoveNext Next ''绑定 Set DataGrid1.DataSource = objrs ''在文本框显示页数 txtPage = lPage & "/" & adoPrimaryRS.PageCount End Sub Private Sub Form_Unload(Cancel As Integer) If Not conn Is Nothing Then conn.Close End If Set conn = Nothing End Sub ‘文本框中输入页数,回车跳转到指定位置 Private Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer) lCurrentPage = Val(txtPage.Text) Call Loadcontrol(lCurrentPage) End Sub
DataGridView打印控件和.NET打印控件5.5版(含报表模板设计组件)2014年2月8日修改完成,完全免费,在.NET2.0及以上环境下都可以使用(VB打印、C#打印都是可以的),有帮助文档与使用实例。 与上一版本的5.4版相比,新控件5.5版的主要更改如下: 1、对控件进行了完善,DGVPrint、VB2008Print、EasyReport组件的打印预览速度有较大的提升; 2、VB2008Print与EasyReport添加了二维码打印的功能,该功能使用开源的Zxing.NET实现; 3、添加了DrawDGVEx函数,一方面可以以DGVprint对象中的参数在VB2008Print组件中打印,另一方面提供了并排打印多个表格的重载函数; 4、DGVPrint组件添加了报表头与报表尾内容的设置属性和参数; 5、DGVPrint与VB2008Print组件在以工资条方式打印表格时,添加了是否自动换行续打的功能(即,如果工资条列太多在一行中打印不下时,可以指定自动换行续打); 6、修改了EasyReport组件的设计界面,每个区域的属性放在属性窗口中显示; 7、EasyReport组件添加了简单的多栏打印支持功能; 8、VB2008Print组件添加了PrintDGVFixedWidth函数,方便将DataGridView按指定宽度进行打印; 9、去掉了网页打印功能(因为在IE11下没法使用,所以干脆去掉),去掉了打印RDLC报表的功能10、其他一些完善,比如在导出Excel时,如果Columheader不可见,则不导出;解决了快速导出Excel时部分特殊列没有表格线问题(比如是数值列,但使用了%等格式);VB2008Print组件添加了PageScale可以指定打印时的缩放比例等等。 本控件特色: 1、强大的DataGridView打印功能,不仅可以以多种形式(普通打印、分栏打印、跨页打印、工资条打印)打印DGV表格,基本上能完全按DGV控件本身设置的格式如字体、字号、背景颜色、前景颜色、单元格对齐方式等打印出来,文字图像都可以打印,而且是完全根据表格当前的显示顺序进行打印的,基本上到了所见即所得的打印。 2、报表设计功能。报表模板设计组件EasyReport与WebEasyReport组件可以设计普通报表、分组报表、套打模板等,分别以DataGridView为数据源。控件的位置以毫米为计量单位,定位准确,很适合套打单据设计。 3、强大的图表打印功能。5.2版控件新增了一个Chartlet的组件,使用非常方便,可以生成柱形图、饼图、折线图等多种图形,而且可以设置2D或3D效果,既可以在打印控件中打印出来,也可以在Graphics对象中显示。 4、分组汇总打印DataGridVeiw功能,每组还可以自动换新页打印,还可以自动增加行号。 5、强大的文本打印输出功能,控件提供多个文本打印重载函数,打印文本时,如果需要,控件会自动换行和换页打印输出。还增加了以指定行间距及字符间距打印文本的功能,可以用固定行距,也可以用单倍或多倍行距打印文本。 6、强大的绘图功能,基本上.NET的GDI+的绘图函数(如直线、矩形、路径、多边形、曲线等)都有,只有个别函数的名称有点区别。 7、支持同一文档多种版面格式打印(类似于Word中的节的功能):对同一份文档,不同的页面可以设置不同的格式(纸张大小、纸张方向、页边 距),只需要在新增一页时在NewPage方法中指定要使用的页面格式即可,使用非常简单。 8、报表文件保存功能。本控件允许将当前打印预览的内容保存为报表文件,以后使用本控件重新打开该报表文件即可重现原来保存报表时的打印内容。 9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版控件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能10、打印DataGridView时的打印方案保存与读取功能。可以将当前打印参数保存为打印方案文件,或者从保存的打印方案文件中读取打印参数。 11、水印打印功能。根据需要,可以在页面中打印或不打印以半透明空心文字打印水印。 12、强大的容器控件打印功能(DrawPanel函数)。借助该函数,您只需要在您的容器控件中设计好要打印的内容及打印内容的相对位置,控件轻松帮你打印出来(如果超过一页,控件会自动换页续打)。 13、特殊文字效果打印功能。控件具有打印浮雕文字、阴影文字、空心文字、块文字的功能14、页眉页脚中既可打印文字,也可打印图像,或者即打印图像又打印输出文字。 15、图像与图标打印输出功能16、多表头(跨行跨列的复杂表头)打印功能,多表头组件支持多表头显示与打印、单元格内容的合并显示、打印与导出。 17、自定义纸张支持功能18、纸张背景图片设置打印功能19、.NET4.0支持功能(是单独的一个文件) 20、直接打印窗口中的TreeView控件功能 21、打印窗口中的ListView功能。 22、RichTextBox控件的RTF文本打印功能。 23、斜线表头打印功能(5.4版新增)。 24、二维码打印功能(5.5版本增加)。 我将持续改进该控件,并将不断推出控件的新版本,要查看或下载控件的升级版本,请登陆网站:http://myyouping.download.csdn.net/ 。具体使用方法请参见帮助文件与实例文件,如有疑问或好的建议,请与我联系: 邮箱:myyouping@139.com Q Q:479781502
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值