GridView控件数据分页方法研究
gridview实现分页
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class GridView_Page : System.Web.UI.Page
GridView1.PagerSettings.NextPageImageUrl = "img/next.gif";
GridView1.PagerSettings.PreviousPageImageUrl = "img/pre.gif";
GridView1.PagerSettings.FirstPageImageUrl = "img/first.gif";
如果是用代码实现,则需要这么做:
1、允许分页:设置AllowPaging=True;
2、设置GridView属性栏中PagerSetting里的一些属性中,定义分页的样式;
3、数据部署:将数据显示到GridView上;
4、加入相关事件:PageIndexChanged()、PageIndexChanging();
gridview分页模型
gridview分页模型GridView的本身支持分页,一般情况下我们可以通过如下几个步骤实现分页:1、更改GrdView控件的AllowPaging属性为true;2、更改GrdView控件的PageSize属性为一个数值(默认为10);3、更改GrdView控件的PageSetting属性;4、为GridView添加事件:OnPageIndexChanging大多数情况下通过上边的步骤就可以实现GridView的分页了,当然很多代码需要你自己来写。
但是有时候我们需要自定义分页模板,还希望能通过更统一以及更少的代码来实现这个分页功能。
考虑到这些问题,我实现了一个通用的GridView分页模型,发布出来,仅供大家参考。
1、创建一个基础页面类BasePage,继承System.Web.UI.Page在这个基类中,创建几个通用的分页属性和方法,然后需要分页的页面都继承这个基类。
查看源代码打印?public class BasePage : System.Web.UI.Page{public BasePage(){}#region 分页相关属性和方法/// <summary>/// 总的记录数,目前仅用于自定义记录数/// </summary>protected int GridView_RecordCount = 0;/// <summary>/// 使用自定义的记录数/// 需要设置GridView_RecordCount/// 如果一次性绑定全部数据,不需要使用自定义,GridView可以通过DataSource自己获取/// </summary>protected bool IsUseCustomRecordCount = false;/// <summary>/// 实现GridView数据绑定的虚方法/// 在具体的页面类中重写这个方法,在PageTurn方法中就会调用重写的方法,以实现分页后的数据重新绑定/// </summary>protected virtual void GridView_DataBind(){}/// <summary>/// 分页页码跳转/// </summary>/// <param name="sender">跳转按钮</param>/// <param name="e"></param>protected void GridView_PageTurn(object sender, EventArgs e)System.Web.UI.WebControls.Button btnGoPage;System.Web.UI.WebControls.GridView GridView1;System.Web.UI.WebControls.TextBox txtGoPage;try{btnGoPage = (System.Web.UI.WebControls.Button)sender;GridView1 = (System.Web.UI.WebControls.GridView)btnGoPage.NamingCont ainer.Parent.Parent;txtGoPage = (System.Web.UI.WebControls.TextBox)GridView1.BottomPagerR ow.FindControl("txtGoPage");}catch{MessageBox.Show(this.Page, "页码输入框和跳转按钮都必须在GridView的分页模板中!");return;}int pageIndex = 1;bool goSuccess = false;if (!string.IsNullOrEmpty(txtGoPage.Text.Trim())){if (int.TryParse(txtGoPage.Text.Trim(), out pageIndex)){pageIndex--;if (pageIndex >= 0 && pageIndex < GridView1.PageCount) {goSuccess = true;GridView1.PageIndex = pageIndex;GridView_DataBind();}}}if (!goSuccess){MessageBox.Show(this.Page, "无效的页码!");return;}}/// <summary>/// 页码改变时触发/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e) {System.Web.UI.WebControls.GridView GridView1 = sender as System.Web.UI.WebControls.GridView;GridView1.PageIndex = e.NewPageIndex;GridView_DataBind();/// <summary>/// GridView数据绑定完毕之后触发,显示记录数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView_DataBound(object sender, EventArgs e){//获取当前GridViewSystem.Web.UI.WebControls.GridView GridView1 = sender as System.Web.UI.WebControls.GridView;if (GridView1.BottomPagerRow == null){return;}//总是显示分页行GridView1.BottomPagerRow.Visible = true;bel lblRecorCount = (bel)GridView1.BottomPagerRow. FindControl("lblRecorCount");if (IsUseCustomRecordCount){lblRecorCount.Text = GridView_RecordCount.ToString();}elseif (GridView1.DataSource == null){return;}//根据数据类型,动态获取绑定的数据源的记录数if (GridView1.DataSource.GetType() == typeof(DataView)){lblRecorCount.Text = ((DataView)GridView1.DataSource).Count.T oString();}else if(GridView1.DataSource.GetType() == typeof(DataTable)){lblRecorCount.Text = ((DataTable)GridView1.DataSource).Rows.Count.T oString();}else if (GridView1.DataSource.GetType() == typeof(DataSet)) {lblRecorCount.Text = ((DataSet)GridView1.DataSource).Tables[0].Rows.Count.T oString( );}else if (GridView1.DataSource is Array){lblRecorCount.Text = ((Array)GridView1.DataSource).Length.ToString();}else if(GridView1.DataSource.GetType() isSystem.Collections.IList){lblRecorCount.Text = ((System.Collections.IList)GridView1.DataSource).Count.ToString( );}else if(GridView1.DataSource.GetType() is System.Collections.ICollection){lblRecorCount.Text = ((System.Collections.ICollection)GridView1.DataSource).Count.To String();}else{TspOALog.Write("绑定到GridView的数据类型未知:"+ GridView1.DataSource.GetType());}}}#endregion}2、页面cs文件继承基类:BasePagepublic partial class NewsList: BasePage3、在页面添加一个GridView并设置相关属性查看源代码打印?<asp:GridView ID="GridView1"BorderStyle="Solid"BorderWidth="1px"BorderColor="#73B7EA"Width="100%"runat="server" AutoGenerateColumns="False"HorizontalAlign="Center"BackColor="White"CellPadding="4" GridLines="None"OnPageIndexChanging="GridView_PageInd exChanging"PageSize="10"AllowPaging="true"OnDataBound="GridView_DataBound"> <Columns>...</Columns><PagerTemplate><div style="text-align: center;"><span style="color: Blue">共有<asp:label id="lblRecorCount" runat="server"></asp:label>条记录第<asp:Label ID="lblcurPage"ForeColor="Blue"runat="server" Text='<%#((GridView)Container.Parent.Parent).PageIndex+1 %>'></asp:La bel>页/共<asp:Label ID="lblPageCount"ForeColor="blue" runat="server"Text='<%# ((GridView)Container.Parent.Parent).PageCount %>'></asp:Labe l>页</span><asp:LinkButton ID="cmdFirstPage"runat="server" CommandName="Page"CommandArgument="First"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">首页</asp:LinkButton><asp:LinkButton ID="cmdPreview"runat="server" CommandArgument="Prev"CommandName="Page"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">上一页</asp:LinkButton><asp:LinkButton ID="cmdNext"runat="server" CommandName="Page"CommandArgument="Next"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Cont ainer.Parent.Parent).PageCount-1 %>">下一页</asp:LinkButton><asp:LinkButton ID="cmdLastPage"runat="server" CommandArgument="Last"CommandName="Page"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Cont ainer.Parent.Parent).PageCount-1 %>">尾页</asp:LinkButton> 到<asp:TextBox ID="txtGoPage"runat="server"Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1 %>' Width=" 30px" CssClass="simpletextbox"></asp:TextBox>页<asp:Button ID="Button3"runat="server" Width="40px"OnClick="GridView_PageTurn"Text="跳转" CssClass="simplebutton" /></div></PagerTemplate></asp:GridView>主要是:AllowPaging:允许GridView分页PageSize:默认10OnDataBound:绑定到基类的事件,用于显示总记录数OnPageIndexChanging:绑定到基类的事件,用于分页的数据处理PagerTemplate:包括记录数,当前页,总页数,首页,尾页,上一页,下一页,页码跳转其中页码跳转事件绑定到基类中的:GridView_PageTurn4、最后编写获取数据的方法重写基类的GridView_DataBind方法:其中查询数据,然后绑定到GridView。
使用ListView控件和DataPager实现数据分页显示
使用ListView数据绑定控件和DataPager实现数据分页显示为什么使用ListView+DataPager的方式实现分页显示?提供的诸多数据绑定控件,每一种都有它自己的优点和缺点。
如果需要对数据进行操作,如果数据量不大的情况下,DataList和GridView是最好的选择,但是他们会生产额外的<table><tr><tbody><td>标签。
如果只是罗列出来一些简单的数据,出于对性能的考虑,repeater必然是首选。
当然ListView和DataPager的组合必将是开发中的黄金组合,无论从性能上和功能实现上都是很棒的控件。
扩展性强,灵活度高:ListView控件集成了DataGrid、DataList、Repeater和GridView 控件的所有功能。
它可以像Repeater控件那样,让我们在控件内写任何HTML代码。
.NET 中给我们提供的新数据绑定控件ListView和DataPager,可以说,ListView就是DataGrid和Repeater的结合体,它既有Repeater控件的开放式模板,又具有DataGrid控件的编辑特性。
这绝对是一个可以引起你兴趣的好东东,因为它给你提供了比DataGird丰富得多的布局手段,同时又具有DataGrid 的所有特性。
具有分页功能:ListView控件本身并不提供分页功能,但是我们可以通过另一个控件– DataPager来实现分页的特性。
把分页的特性单独放到另一个控件里,会给我们带来很多好处,比如说可以让别的控件使用它,又比如说我们可以把它放在页面的任何地方。
实质上,DataPager就是一个扩展ListView分页功能的控件。
ListView控件ListView是用来显示数据的,它的使用类似于Repeater控件。
ListView控件中有n多模板,出示如下:·LayoutTemplate·ItemTemplate·AlternatingItemTemplate·SelectedItemTemplate·EmptyItemTemplate·EmptyDataTemplate·ItemSeparatorTemplate·GroupTemplate·GroupSeparatorTemplate·EditItemTemplate·InsertItemTemplate它有很多的模板。
让DataGridView控件里的记录分页显示
让DataGridView控件里的记录分页显示一、数据准备二、分页逻辑实现记录分页显示的核心逻辑是将数据按照每页显示的记录数量进行切割,然后根据用户的操作加载不同的数据页。
下面是一个简单的分页逻辑示例:1.定义分页相关的变量:```csharpint pageSize = 10; // 每页显示的记录数量int totalPages = (data.Count + pageSize - 1) / pageSize; // 总页数``````csharpList<Record> currentPageData = data.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(;dataGridView.DataSource = currentPageData;``````csharpprivate void PreviousButton_Click(object sender, EventArgs e) if (currentPage > 1)currentPage--;LoadPageData(;}private void NextButton_Click(object sender, EventArgs e)if (currentPage < totalPages)currentPage++;LoadPageData(;}```三、界面设计四、性能优化在虚拟模式下,DataGridView控件只维护当前可见区域的数据,并在需要显示时动态加载数据。
可以通过实现DataGridView控件的CellValueNeeded事件来实现懒加载和虚拟模式。
具体实现方法超出了本文的范围,但是可以在MSDN文档或者各种技术论坛上找到详细的教程和示例。
总结:。
Aspnetpager对GridView分页并顺利导出Excel
Aspnetpager对GridView分页并顺利导出Excel⼀、前⾔谈到分页,在⽹页上简直到处都是。
⽹络的资源越来越多,如果不⽤分页技术来显⽰,就会拖拉很长很长。
下⾯给⼤家分享分页技术。
⼆、基本要点当要显⽰数据量⾜够⼤的时候,我们往往采⽤分页显⽰的处理办法。
分页有真分页和假分页。
假分页:从数据库中取出所有的数据,然后分页在界⾯上显⽰。
访问⼀次数据库,但由于选择的数据量⽐较⼤,所以第⼀次花费时间⽐较长,但之后每⼀页的显⽰都是直接、快速的,避免对数据库的多次访问。
真分页:确定要显⽰的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量⼩,缺点是访问数据库频繁。
在⼤型⽹站中往往采⽤真分页,⽐如百度的图⽚获取。
三、实例展⽰下载好后,添加对Aspnetpager.dll控件的引⽤,然后在⼯具箱→右击→选择项→找到Aspnetpager →确定。
图⼀添加引⽤图⼆选择项图三添加⼯具图四展⽰效果前台代码:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AspNetPagerTest.aspx.cs" Inherits="test.AspNetPagerTest" %> <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %><!DOCTYPE html><html xmlns="/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>使⽤AspNetPager对GridView分页</title><%--引⽤分页控件的CSS--%><link href="css/Paging.css" rel="stylesheet" /></head><body><form id="form1" runat="server"><div><%--gridview控件--%><asp:GridView ID="GridView1" runat="server" Width="100%"CellPadding="4" ForeColor="#333333" GridLines="None"><AlternatingRowStyle BackColor="White" /><EditRowStyle BackColor="#2461BF" /><FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /><HeaderStyle BackColor="#507CD1" Font-Bold="True"ForeColor="White" Height="25px" HorizontalAlign="Center" /><PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /><RowStyle BackColor="#EFF3FB" Height="20px" HorizontalAlign="Center" /><SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /><SortedAscendingCellStyle BackColor="#F5F7FB" /><SortedAscendingHeaderStyle BackColor="#6D95E1" /><SortedDescendingCellStyle BackColor="#E9EBEF" /><SortedDescendingHeaderStyle BackColor="#4870BE" /></asp:GridView><%--分页控件--%><webdiyer:AspNetPager ID="AspNetPager1" runat="server"onpagechanged="AspNetPager1_PageChanged" CssClass="anpager"CurrentPageButtonClass="cpb" FirstPageText="⾸页" LastPageText="尾页"NextPageText="后页" PrevPageText="前页" PageSize="5" HorizontalAlign="Center"></webdiyer:AspNetPager><br /><%--导出按钮--%><asp:Button ID="btnExcel" runat="server" OnClick="btnExcel_Click" Text="导出Excel" /> <br /><br /><br /><br /></div></form></body></html>CSS代码:body { height: 382px;}.anpager{font: 11px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0;margin: 0px;}.anpager a{padding: 1px 6px;border: solid 1px #ddd;background: #fff;text-decoration: none;margin-right:2px}.anpager a:visited{padding: 1px 6px;border: solid 1px #ddd;background: #fff;text-decoration: none;}.anpager .cpb{padding: 1px 6px;font-weight: bold;font-size: 13px;border:none}.anpager a:hover{color: #fff;background: #ffa501;border-color:#ffa501;text-decoration: none;}后台的代码:/********************************************************************** 作者:王雷* ⼩组:暂⽆* 说明:【】Aspnetpager对GridView分页,并导出Excel* 创建⽇期:2016年4⽉25⽇20:23:00* 版本号:V1.0.0************************************************************************/using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.SqlClient;using System.IO; //导出Excel的时候⽤到namespace test{public partial class AspNetPagerTest : System.Web.UI.Page{public SqlConnection conn = null;public SqlCommand cmd = null;public SqlDataReader sdr = null;#region 界⾯加载--王雷--2016年4⽉25⽇20:21:29/// <summary>/// 界⾯加载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){//调⽤绑定分页和GridViewBindGridView();}}#endregion#region 绑定分页和GridView⽅法--王雷--2016年4⽉25⽇20:20:59///绑定分页和GridView⽅法private void BindGridView(){//查询语句string SQL = "select * from USERS";//获取数据表格DataTable dt = ExecuteQuery(SQL, CommandType.Text);//初始化分页数据源实例PagedDataSource pds = new PagedDataSource();//设置总⾏数AspNetPager1.RecordCount = dt.Rows.Count;//设置分页的数据源pds.DataSource = dt.DefaultView;//设置当前页pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;//设置每页显⽰页数,在前台界⾯中有设置pds.PageSize = AspNetPager1.PageSize;//启⽤分页pds.AllowPaging = true;//设置GridView的数据源为分页数据源GridView1.DataSource = pds;//绑定GridViewGridView1.DataBind();}#endregion#region 执⾏传⼊的SQL查询语句--王雷-2016年4⽉25⽇20:19:54///<summary >///执⾏传⼊的SQL查询语句/// </summary>/// <param name="cmdText" >要执⾏的SQL查询语句或者是存储过程</param>/// <param name="ct">命令类型</param>/// <returns >返回更新的记录数 </returns>public DataTable ExecuteQuery(string cmdText, CommandType ct){//建⽴数据连接字符串SqlConnection cnn = new SqlConnection("server=.;uid=sa;pwd=123456;database=Login");DataTable dt = new DataTable();cmd = new SqlCommand(cmdText, cnn);mandType = ct;cnn.Open();using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //关闭sdr的时候,也关闭连接。
利用ListView控件和DataPager实现数据分页显示
利用ListView数据绑定控件和DataPager实现数据分页显示什么缘故利用ListView+DataPager的方式实现分页显示?提供的诸多数据绑定控件,每一种都有它自己的优势和缺点。
若是需要对数据进行操作,若是数据量不大的情形下,DataList和GridView是最好的选择,可是他们会生产额外的<table><tr><tbody><td>标签。
若是只是罗列出来一些简单的数据,出于对性能的考虑,repeater必然是首选。
固然ListView和DataPager 的组合必将是开发中的黄金组合,无论从性能上和功能实现上都是很棒的控件。
扩展性强,灵活度高:ListView控件集成了DataGrid、DataList、Repeater和GridView控件的所有功能。
它能够像Repeater控件那样,让咱们在控件内写任何HTML代码。
.NET 中给咱们提供的新数据绑定控件ListView和DataPager,能够说,ListView确实是DataGrid和 Repeater的结合体,它既有Repeater控件的开放式模板,又具有DataGrid控件的编辑特性。
这绝对是一个能够引发你爱好的好东东,因为它给你提供了比DataGird丰硕得多的布局手腕,同时又具有DataGrid的所有特性。
具有分页功能: ListView控件本身并非提供分页功能,可是咱们能够通过另一个控件–DataPager来实现分页的特性。
把分页的特性单独放到另一个控件里,会给咱们带来很多益处,比如说能够让别的控件利用它,又比如说咱们能够把它放在页面的任何地址。
实质上,DataPager 确实是一个扩展ListView分页功能的控件。
ListView控件ListView是用来显示数据的,它的利用类似于Repeater控件。
ListView控件中有n多模板,出示如下:·LayoutTemplate·ItemTemplate·AlternatingItemTemplate·SelectedItemTemplate·EmptyItemTemplate·EmptyDataTemplate·ItemSeparatorTemplate·GroupTemplate·GroupSeparatorTemplate·EditItemTemplate·InsertItemTemplate它有很多的模板。
GridView控件分页显示记录
GridView控件分页显示记录MasterPageFile="~/Manage/master.Master"GridView控件具有内置分页功能,设置GridView控件分页的属性如表1所示。
表1 GridView控件分页属性AllowPaging属性用于获取或设置一个值,该值指示是否启用分页功能。
如果启用分页功能,则为True,否则为False,默认值为False。
分页的形式可以显示一组称为“页导航”的控件,例如以数字显示页面链接或“首页上一页下一页最后一页”显示页面链接,用户使用这些控件可以在控件内的页面之间跳转。
GridView控件使用PagerSettings 类来表示页导航的属性。
通常情况下,PagerSettings 对象存储在控件的PagerSettings 属性中,通过设置PagerSettings 对象的属性自定义页导航。
页导航支持几种不同的显示模式。
若要指定页导航的显示模式,可以设置Mode 属性。
表2介绍了这几种不同的模式。
表2 Mode属性分页模式当Mode 属性设置为NextPrevious、NextPreviousFirstLast 或NumericFirstLast 值时,可以通过设置表3中所示的属性来为非数字按钮指定自定义文字。
表3 设置按钮文字除了在按钮上设置自定义文字外,还可以通过设置表4中所示的属性为非数字按钮显示图像。
表4设置按钮显示图像如果设置GridView控件分页显示为“首页上一页下一页最后一页”的形式,可以设置AllowPaging=True,然后在PageSettings中设置Mode的模式为NextPreviousFirstLast,每一个按钮显示的文字,相关如下所示:。
使用ListView控件和DataPager实现数据分页显示
为什么使用地方式实现分页显示?提供地诸多数据绑定控件,每一种都有它自己地优点和缺点.如果需要对数据进行操作,如果数据量不大地情况下,和是最好地选择,但是他们会生产额外地<><><><>标签.如果只是罗列出来一些简单地数据,出于对性能地考虑,必然是首选.当然和地组合必将是开发中地黄金组合,无论从性能上和功能实现上都是很棒地控件.个人收集整理勿做商业用途扩展性强,灵活度高:控件集成了、、和控件地所有功能.它可以像控件那样,让我们在控件内写任何代码.个人收集整理勿做商业用途中给我们提供地新数据绑定控件和,可以说,就是和地结合体,它既有控件地开放式模板,又具有控件地编辑特性. 这绝对是一个可以引起你兴趣地好东东,因为它给你提供了比丰富得多地布局手段,同时又具有地所有特性.个人收集整理勿做商业用途具有分页功能:控件本身并不提供分页功能,但是我们可以通过另一个控件–来实现分页地特性. 把分页地特性单独放到另一个控件里,会给我们带来很多好处,比如说可以让别地控件使用它,又比如说我们可以把它放在页面地任何地方.实质上,就是一个扩展分页功能地控件.个人收集整理勿做商业用途控件是用来显示数据地,它地使用类似于控件. 控件中有多模板,出示如下:···········它有很多地模板. 其中有许多新增地模板,如和.但我一般常用地就是,,,这几个.继续摸索这个控件后,我发现它可以让你在它地模板内写任何标记或控件,这将给我们带来很大地自由度.用显示数据开始,你可以把当作是来使用,也就是说它是模板驱动型地控件. 参考如下示例:个人收集整理勿做商业用途< "" """"个人收集整理勿做商业用途"" ""个人收集整理勿做商业用途"""" "">个人收集整理勿做商业用途<>< "">< ""><("")><>< ""><("")><>< "">< "" "" '<("")>'><><>个人收集整理勿做商业用途< "">< "" "" "" >更新<>个人收集整理勿做商业用途< "" "" "" >取消<>个人收集整理勿做商业用途<><><><>< "">< ""><("")><>< ""><("")><>< ""><("")><>< "">< "" "" "" >编辑<>个人收集整理勿做商业用途< "" "" "" >删除<>个人收集整理勿做商业用途<><><><>< " ">< ""><("")><>< ""><("")><>< ""><("")><>< "">< "" "" "" >编辑<>个人收集整理勿做商业用途< "" "" "" >删除<>个人收集整理勿做商业用途<><><><>增加分页功能如果你想为增加分页功能地话,那么就需要使用控件了.这个分页控件是一个独立地控件,你可以把它放到页面地任何位置,然后使其联到你地控件就可以完成分页地工作了.该分页控件所呈现出来地标记为内联()元素,所以如果你想精确地设置其位置地话,可以参考下面地代码,为其包裹一个< >标记. 个人收集整理勿做商业用途给控件添加以下属性,在翻页时给控件绑定新地页面索引:""个人收集整理勿做商业用途你可以像下面这样设置分页控件,并可以把其放到页面地任何位置.< "" "" "">个人收集整理勿做商业用途<>< "" 个人收集整理勿做商业用途"" ""个人收集整理勿做商业用途"" ><><>通过上面地代码你会发现,我们可以通过设置控件地,从而达到手动设置分页布局地目地. 另外还有一个关键点,就是控件地属性,你需要把它设置为地.个人收集整理勿做商业用途当然你也可以把控件放到布局模板内.把分页功能作为一个单独地控件分离出来是一个非常好地注意–它会让我们有更多地布局和显示上地自由度.但是,目前地分页控件还是有其局限性地. 它只能结合控件一起工作–如果能用在或上就更好了.另外,它也是要依赖于地.还有,现在地控件没有分页事件,也没有属性.还有一点需要注意地是,没有内置排序功能.个人收集整理勿做商业用途。
GridView控件自定义分页详解
GridView控件自定义分页详解在这里我们将用一个隐藏字段来保存这个PageIndex,即当前页码.当点击上一页时,将它的值减一,知道为0,要注意的一点这里的第一页页码是0而不是1.下面看看代码,然后我们再分析分析!1<asp:GridView ID="NewsGrid" runat="server" AutoGenerateColumns="False" AllowPaging="false" Width="100%">2 <Columns>3 <asp:BoundField DataField="NewsId" HeaderText="新闻ID"/>4 <asp:HyperLinkField DataNavigateUrlFields="NewsId" DataNavigateUrlFormatString="~/Details.aspx?ID={0}"5 DataTextField="Title" HeaderText="新闻标题" ItemStyle-Width="70%"/>6 <asp:BoundField DataField="PostTime" HeaderText="发布时间"/>7 <asp:CommandField HeaderText="新闻管理" ShowCancelButton="False" ShowDeleteButton="True"8 ShowEditButton="True"/>9 </Columns>10 </asp:GridView>实用文档11 <div style=" height:16px; padding-top:5px; margin-right:30px; float:right">12 <asp:HiddenField ID="CurrentPage" runat="server" Value="0"/>13 <asp:LinkButton ID="First" runat="server" CommandArgument="first" OnClick="PagerButton_Click">首页</asp:LinkButton>14 <asp:LinkButton ID="Prev" runat="server" CommandArgument="prev" OnClick="PagerButton_Click">上一页</asp:LinkButton>15 <asp:LinkButton ID="Next" runat="server" CommandArgument="next" OnClick="PagerButton_Click">下一页</asp:LinkButton>16 <asp:LinkButton ID="Last" runat="server" CommandArgument="last" OnClick="PagerButton_Click">尾页</asp:LinkButton>17 </div> CS文件中的代码:1 protected void PagerButton_Click(object sender, EventArgs e)2 {3 int pageIndx = Convert.ToInt32(CurrentPage.Value);4 int totals = NewsManager.GetNews(0, pageSize).TotalRecords;5 int pages = (totals % pageSize) == 0 ? (totals / pageSize) : (totals / 实用文档pageSize + 1);6 string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();7 switch (arg)8 {9 case "prev":10 if (pageIndx > 0)11 {12 pageIndx -= 1;13 }14 break;15 case "next":16 if (pageIndx < pages - 1)17 {18 pageIndx += 1;19 }20 break;21 case "last":实用文档22 pageIndx = pages - 1;23 break;24 default:25 pageIndx = 0;26 break;27 }28 CurrentPage.Value = pageIndx.ToString();29 NewsGrid.DataSource = NewsManager.GetNews(pageIndx , pageSize).Entities;30 NewsGrid.DataBind();31 }如何在GridView中增加效果protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//将满足特定条件的行标为高亮if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行实用文档{int money = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "MONEY"));//取当前行的列值if (money == 77)e.Row.BackColor = Color.Red;//string customer = (string)DataBinder.Eval(e.Row.DataItem, "CUSTOMER");string customer = DataBinder.Eval(e.Row.DataItem, "CUSTOMER").ToString();if (customer == "sdf")e.Row.BackColor = Color.Red;}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover", 实用文档"currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',t his.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick","this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");}如何在GridView中一次性批量更新多行数据2.0下含有DropDownList的GridView编辑、删除的完整例子!<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="10"实用文档Width="542px" AllowPaging="True" AllowSorting="True"DataKeyNames="DB31_1,DB31_2" OnRowCancelingEdit="GridView1_RowCancelingEdit"OnRowDeleting="GridView1_RowDeleting"OnRowEditing="GridView1_RowEditing"OnRowUpdating="GridView1_RowUpdating"OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"OnSorting="GridView1_Sorting" ><Columns><asp:TemplateField HeaderText="序号"><ItemTemplate><%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%></ItemTemplate></asp:TemplateField>实用文档<asp:TemplateField HeaderText="学历代码" SortExpression="DB1_1"><EditItemTemplate><%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DB1_1") %>'></asp:TextBox>--%><asp:DropDownList ID ="ddlXL"runat="server" DataValueField='<%#Bind("DB1_1") %>'></asp:DropDownList></EditItemTemplate><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# Bind("xueliText") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="学历名称" SortExpression="DB1_2"><EditItemTemplate>实用文档<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("DB1_2") %>'></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label ID="Label2" runat="server" Text='<%# Bind("DB1_2") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="操作" ShowHeader="False"><EditItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"Text="更新"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"实用文档Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"Text="编辑" OnClientClick="return confirm('确认要编辑吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete"Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Select"Text="选择"></asp:LinkButton></ItemTemplate>实用文档</asp:TemplateField></Columns><AlternatingRowStyle BackColor="Aquamarine" /></asp:GridView>/// <summary>/// 绑定数据到GridView/// </summary>private void GridViewBind(){检索数据库string strSql = "SELECT * FROM DB1";得到数据集this.GridView1.DataSource=conn.GetDs(strSql).Tables[0].DefaultView;this.GridView1.DataBind();实用文档}/// <summary>/// 编辑当前行/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;//当前编辑行背景色高亮this.GridView1.EditRowStyle.BackColor = Color.FromName("#F7CE90");GridViewBind();}/// <summary>实用文档/// 取消编辑状态/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 删除记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>实用文档protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){//得到单位编号string rowToDelete =GridView1.DataKeys[e.RowIndex].Values[0].ToString();//转换为整数//int ID=Convert.ToInt32(rowToDelete);//从数据库中删除string str = "DELETE FROM DB1 where DB1_1=" + "'" + rowToDelete + "'" + "";try{conn.RunSql(str);//重新绑定数据实用文档GridViewBind();}catch (Exception ex){Response.Write("数据库错误,错误原因:" + ex.Message);Response.End();}}/// <summary>/// 更新记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)实用文档{string ID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();string DB1_1 =((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;//string DB1_2 =((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;string DB1_2 =(((DropDownList))GridView1.Rows[e.RowIndex].FindControl("ddlXL")).SelectedI tem.Text;//判断表单项是否有空并给出提示信息if (DB1_1 == "" || DB1_2 == ""){conn.Alert("请输入完整信息!", Page);return;}实用文档try{conn.BuilderEdit("select * from DB1 where DB1_1 ='" + ID + "'");conn.dr["DB1_1"] = DB1_1;conn.dr["DB1_2"] = DB1_2;conn.BuilderEditClose();}catch (OracleException err){if (err.Code.ToString() == "1")conn.Alert("错误:已存在具有相同主键的记录", Page);elseconn.Alert("错误:未能添加记录", Page);}实用文档Response.Write("<script language='javascript'>alert('数据已被保存!');</script>");//返回浏览状态GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 分页事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){GridView1.PageIndex = e.NewPageIndex;GridViewBind();实用文档}/// <summary>/// 加入鼠标效果及为DropDownList绑定值/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//为DropDownList绑定值if (((DropDownList)e.Row.FindControl("ddlXL")) != null){DropDownList ddlXL = (DropDownList)e.Row.FindControl("ddlXL");ddlXL.Items.Clear();ddlXL.Items.Add(new ListItem("博士", "1"));实用文档ddlXL.Items.Add(new ListItem("硕士", "2"));ddlXL.Items.Add(new ListItem("学士", "3"));}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',t his.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色实用文档if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");}}2.0下含有CheckBox的GridView删除选定记录实例<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="5"2 Width="726px" AllowPaging="True" AllowSorting="True"3 DataKeyNames="DB1_1,DB1_2" OnRowDeleting="GridVie w1_RowDeleting" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound"OnSorting="GridView1_Sorting" Height="279px" >4 <Columns>实用文档5 <asp:TemplateField HeaderText="序号" >6 <ItemTemplate>7 <%# this.GridView1.PageIndex *this.GridView1.PageSize + this.GridView1.Rows.Count + 1%>8 </ItemTemplate>9 </asp:TemplateField>10 <asp:TemplateField HeaderText="选择" >11 <ItemTemplate>12 <asp:CheckBox ID="chkSelect" runat="server" ></asp:CheckBox>13 </ItemTemplate>14 </asp:TemplateField>15 <asp:TemplateField HeaderText="操作" ShowHeader="False">16 <ItemTemplate>实用文档17 <asp:LinkButton ID="lbtnDelete" runat="server" CausesValidation="False" CommandName="Delete"18 Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton>19 </ItemTemplate>20 </asp:TemplateField>21 </Columns>22 <AlternatingRowStyle BackColor="Aquamarine" />23 </asp:GridView>1 <asp:CheckBox ID="chkSelectAll" runat="server" Text="全部选中" OnCheckedChanged="chkSelectAll_CheckedChanged"AutoPostBack="True" ></asp:CheckBox>2 <asp:Button ID="btnDelete" runat="server" Text="删除" OnClick="btnDelete_Click" />1 protected void btnDelete_Click(object sender, EventArgs e)2 {实用文档3 string strDelete = "";4 for (int i = 0; i < this.GridView1.Rows.Count; i++)5 {6 string Label;7 bool isChecked =((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked;8 Label = ((Label)GridView1.Rows[i].FindControl("labXH")).Text;9 if (isChecked)10 {11 strDelete = "DB1_1" + "=" + Label;12 }13 }14 conn.RunSql("Delete from DB1 where " + strDelete15 this.chkSelectAll.Checked = false;16 GridViewBind();实用文档17 }1819 protected void chkSelectAll_CheckedChanged(object sender, EventArgs e)20 {21 //遍历GridView行获取CheckBox属性22 for (int i = 0; i < this.GridView1.Rows.Count; i++)23 {24 ((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked = this.chkSelectAll.Checked;25 }26 }实用文档。
Asp.Net中的三种分页方式总结
中的三种分页⽅式总结通常分页有3种⽅法,分别是⾃带的数据显⽰空间如GridView等⾃带的分页,第三⽅分页控件如aspnetpager,存储过程分页等。
这⾥分别做总结。
第⼀种:使⽤GridView⾃带分页,这种是最简单的分页⽅法。
前台的⽅法:复制代码代码如下:<asp:GridView ID="GridView1" AllowPaging="true" runat="server"onpageindexchanging="GridView1_PageIndexChanging" PageSize="3"></asp:GridView>后台⽅法:代码复制代码代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using JXSoft.TicketManage.Model;using JXSoft.TicketManage.BLL;using System.Text.RegularExpressions;using System.Data;namespace JXSoft.TicketManage.Web{public partial class Test : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){BindData();}}protected void BindData(){DataTable dt=new DataTable();dt.Columns.Add("ID");dt.Columns.Add("Name");for (int i = 0; i < 10;i++ ){dt.Rows.Add(i.ToString(), i.ToString());}this.GridView1.DataSource = dt;this.GridView1.DataBind();}protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){this.GridView1.PageIndex = e.NewPageIndex;BindData();}}}第⼆种:使⽤个性化显⽰的AspNetPager.dll进⾏分页此处需要添加aspnetpager.dll的引⽤前台:复制代码代码如下:<form id="form1" runat="server"><div><asp:GridView ID="GridView1" runat="server" ></asp:GridView><webdiyer:AspNetPager ID="AspNetPager1" runat="server"CustomInfoHTML="第%CurrentPageIndex%页,共%PageCount%页,每页%PageSize%条"FirstPageText="⾸页" LastPageText="尾页" LayoutType="Table" NextPageText="下⼀页"onpagechanging="AspNetPager1_PageChanging" PageIndexBoxType="DropDownList"PagingButtonLayoutType="Span" PrevPageText="上⼀页" ShowCustomInfoSection="Left"ShowPageIndexBox="Always" SubmitButtonText="Go" PageSize="4" TextAfterPageIndexBox="页"TextBeforePageIndexBox="转到"></webdiyer:AspNetPager></div></form>后台:复制代码代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using JXSoft.TicketManage.Model;using JXSoft.TicketManage.BLL;using System.Text.RegularExpressions;using System.Data;namespace JXSoft.TicketManage.Web{public partial class Test : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){BindData();}}protected void BindData(){DataTable dt=new DataTable();dt.Columns.Add("ID");dt.Columns.Add("Name");for (int i = 0; i < 10;i++ ){dt.Rows.Add(i.ToString(), i.ToString());}DataSet ds = new DataSet();ds.Tables.Add(dt);Pager(this.GridView1, this.AspNetPager1, ds);}protected void Pager(GridView dl, Wuqi.Webdiyer.AspNetPager anp, System.Data.DataSet dst){PagedDataSource pds = new PagedDataSource();pds.DataSource = dst.Tables[0].DefaultView;pds.AllowPaging = true;anp.RecordCount = dst.Tables[0].DefaultView.Count;pds.CurrentPageIndex = anp.CurrentPageIndex - 1;pds.PageSize = anp.PageSize;dl.DataSource = pds;dl.DataBind();}protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e){AspNetPager1.CurrentPageIndex = e.NewPageIndex;BindData();}}}第三种:使⽤AspNetPager结合存储过程进⾏分页这种⽅法分页稍微复杂⼀些,但是可以应付⽐较⼤的数据量。
海量(大量)数据GridView显示高效率分页实现方法
问题:GridView显示海量数据时效率极其低,每次要从数据库从取出海量数据,这明显不现实。
解决方案:显示多少,就从数据库中读取多少数据,即每次取GridView显示的一个页面数据,点击下一页是,再取下一页相应的数据。
真的是很简单,但如果对不熟悉的人来说,还是有点难度。
就比如说:当页面刷新时,怎样使一个变量的值保持不变呢?很晕是吧下面我们说分析实现方法:1、刷新页面,保持变量值不变先讲怎样在刷新页面是使一个变量值保持不变,以前我都采用页面传值法,总觉得有点怪,本来就是本页的数据还要通过页面传值来保存。
后来在网上发现VewState这东东,有点像Session,用法基本上一样。
他们的区别是:Session是在页面之间,而ViewState是在它自己的页面保持一个值。
用法:ViewState["PageCounts"] = 3;下次要用时直接取出来就OK了。
2、GridView海量数据高效分页实现代码下面代码来自互联网const int PageSize=20;//定义每页显示记录int PageCount,RecCount,CurrentPage,Pages,JumpPage;//定义几个保存分页参数变量private void Page_Load(object sender, System.EventArgs e){if(!IsPostBack){RecCount = Calc();//通过Calc()函数获取总记录数PageCount = RecCount/PageSize + OverPage();//计算总页数(加上OverPage()函数防止有余数造成显示数据不完整)ViewState["PageCounts"] = RecCount/PageSize - ModPage();//保存总页参数到ViewState(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句)ViewState["PageIndex"] = 0;//保存一个为0的页面索引值到ViewStateViewState["JumpPages"] = PageCount;//保存PageCount到ViewState,跳页时判断用户输入数是否超出页码范围//显示LPageCount、LRecordCount的状态LPageCount.Text = PageCount.ToString();LRecordCount.Text = RecCount.ToString();//判断跳页文本框失效if(RecCount <= 20)gotoPage.Enabled = false;TDataBind();//调用数据绑定函数TDataBind()进行数据绑定运算}}//计算余页public int OverPage(){int pages = 0;if(RecCount%PageSize != 0)pages = 1;elsepages = 0;return pages;}//计算余页,防止SQL语句执行时溢出查询范围public int ModPage(){int pages = 0;if(RecCount%PageSize == 0 && RecCount != 0)pages = 1;elsepages = 0;return pages;}/**计算总记录的静态函数*本人在这里使用静态函数的理由是:如果引用的是静态数据或静态函数,连接器会优化生成代码,去掉动态重定位项(对海量数据表分页效果更明显)。
ASP.NET程序中DataGrid控件的内置分页机理及效率提高的研究
Ab ta t s r c D t G i o t lh s lt f p w ru u l i u cin , u h a aa mo i c t n, eei n a d p g —e aa in Ho e e ,t a a r c n r a o s o o e lb i — f n t s s c s d t d f a i d l t , n a e s p r t . w v r i d o f tn o i o o o s
程序的性能影响是 非常大的。D t r a Gi a d内置 分页技术的原理如
0 引 言
随着微软公司. E N T平 台及 相关 技术 的推 出 , 很多 企事 业 单位都开发 了基于 A P N T的 We 用程序 , S. E b应 在这些程序 中 , 大多都使用了微软公 司的较有特色 的 D t r a Gi a d控件对记录集进
行绑定 , 从而实现对数据 库记录的分页浏览 、 增加 、 除和修 改 删 等, 因为它 内置 了对数据的修改 、 删除 、 页等很多实用功能 , 分 大 大方便 了对记录集 的操作。但是 , 经过笔 者多次反 复测试并进
图 1 示。 所
用户 ●
。 。 . 。 。 。 。 . 。 . . . . . . .
THE STUDY oN BUI LT.N I PAGE. SEPARATI NG PRI NCI PLE AND EFFI ENCY CI ENHANCEM ENT OF DATAGRI CONTROL N P . D I AS NET APPLI CATI ON
GridView分页的实现(通用分页模板)
GridView分页的实现(通⽤分页模板)要在GridView中加⼊//实现分页AllowPaging="true"//⼀页数据10⾏PageSize="10"// 分页时触发的事件OnPageIndexChanging="gvwDesignationName_PageIndexChanging"在服务器事件⾥复制代码代码如下:protectedvoid gvwDesignationName_PageIndexChanging(object sender, GridViewPageEventArgs e){gvwDesignationName.PageIndex=e.newIndex;bingDesignatioonName();}这⾥我给出⼀个通⽤显⽰分页的模板(⽹上搜的,⾃⼰给出注释)复制代码代码如下:<PagerTemplate>当前第://((GridView)Container.NamingContainer)就是为了得到当前的控件<asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"> </asp:Label>页/共://得到分页页⾯的总数<asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>页//如果该分页是⾸分页,那么该连接就不会显⽰了.同时对应了⾃带识别的命令参数CommandArgument<asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>⾸页</asp:LinkButton><asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev"CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上⼀页</asp:LinkButton>//如果该分页是尾页,那么该连接就不会显⽰了<asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下⼀页</asp:LinkButton><asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>转到第<asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%#((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页//这⾥将CommandArgument即使点击该按钮e.newIndex 值为3<asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2"CommandName="Page" Text="GO" /></PagerTemplate>对应该事件中代码为复制代码代码如下:protected void gvwDesignationName_PageIndexChanging(object sender, GridViewPageEventArgs e){// 得到该控件GridView theGrid = sender as GridView;int newPageIndex = 0;if (e.NewPageIndex==-3){//点击了Go按钮TextBox txtNewPageIndex = null;//GridView较DataGrid提供了更多的API,获取分页块可以使⽤BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRowGridViewRow pagerRow = theGrid.BottomPagerRow;if (pagerRow != null){//得到text控件txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox;}if ( txtNewPageIndex!= null){//得到索引newPageIndex = int.Parse(txtNewPageIndex.Text) - 1;}}else{//点击了其他的按钮newPageIndex = e.NewPageIndex;}//防⽌新索引溢出newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex;//得到新的值theGrid.PageIndex = newPageIndex;//重新绑定bingDesignatioonName();}。
让DataGridView控件里的记录分页显示
让DataGridView控件里的记录分页显示让DataGridView控件里的记录分页显示 ( 2005)Public Class ClsDataGridViewPage'每页记录数Private _RowsPerPage As Integer'总页数Private _TotalPage As Integer'当前页数Private _curPage As Integer = 0'要分页的DataGridViewPrivate _DataGridView As Windows.Forms.DataGridView '与需要分页显示的的DataViewPrivate _dv As DataView'获取与设置每页记录数Public Property RowsPerPage() As IntegerGetReturn _RowsPerPageEnd GetSet(ByVal value As Integer)_RowsPerPage = valueEnd SetEnd Property'获取总页数Public ReadOnly Property TotalPage() As IntegerGetReturn _TotalPageEnd GetEnd Property'获取与设置当前页数Public Property curPage() As IntegerGetReturn _curPageEnd GetSet(ByVal value As Integer)_curPage = valueEnd SetEnd Property'设置需要分页的GetDataGridViewPublic WriteOnly Property SetDataGridView()Set(ByVal value As Object)_DataGridView = valueEnd SetEnd Property'设置需要分页显示的的DataViewPublic WriteOnly Property SetDataView()Set(ByVal value As Object)_dv = valueEnd SetEnd PropertyPublic Sub New()End Sub'重载NEW函数,在构造时就可以对成员赋值Public Sub New(ByVal datagridview As Windows.Forms.DataGridView, ByVal dv As DataView, _ByVal RowsPerPage As Integer)_DataGridView = datagridview_dv = dv_RowsPerPage = RowsPerPageEnd Sub'开始分页啦Public Sub Paging()'首先判断DataView中的记录数是否足够形成多页,'如果不能,那么就只有一页,且DataGridView需要显示的记录等同于“最后一页”的记录If _dv.Count <= _RowsPerPage Then_TotalPage = 1GoLastPage()Exit SubEnd If'可以分为多页的话就要计算总的页数咯,然后DataGridView显示第一页If _dv.Count Mod _RowsPerPage = 0 Then_TotalPage = Int(_dv.Count / _RowsPerPage)Else_TotalPage = Int(_dv.Count / _RowsPerPage) + 1End IfGoFirstPage()End Sub'到第一页Public Sub GoFirstPage()'如果只有一页,那么显示的记录等同于“最后一页”的记录 If _TotalPage = 1 ThenGoLastPage()Exit SubEnd If'如果有多页,就到第“1”页_curPage = 0GoNoPage(_curPage)End SubPublic Sub GoNextPage()'这段代码主要是为了防止当前页号溢出_curPage += 1If _curPage > _TotalPage - 1 Then_curPage = _TotalPage - 1Exit SubEnd If'如果到了最后一页,那就显示最后一页的记录If _curPage = _TotalPage - 1 ThenGoLastPage()Exit SubEnd If'如果没到最后一页,就到指定的“下一页”GoNoPage(_curPage)End SubPublic Sub GoPrevPage()'防止不合法的当前页号_curPage -= 1If _curPage < 0 Then_curPage = 0Exit SubEnd If'到指定的“上一页”GoNoPage(_curPage)End Sub'到最后一页Public Sub GoLastPage()_curPage = _TotalPage - 1Dim i As IntegerDim dt As New DataTable'dt只是个临时的DataTable,用来获取所需页数的记录dt = _dv.ToTable.CloneFor i = (_TotalPage - 1) * _RowsPerPage To _dv.Count - 1'i值上下限很关键,调试的时候常常这里报错找不到行'就是因为i值溢出Dim dr As DataRow = dt.NewRowdr.ItemArray = _dv.ToTable.Rows(i).ItemArraydt.Rows.Add(dr)Next_DataGridView.DataSource = dtEnd Sub'到指定的页Public Sub GoNoPage(ByVal PageNo As Integer)_curPage = PageNo'防止不合法的页号If _curPage < 0 ThenMsgBox("页号不能小于1")Exit SubEnd If'防止页号溢出If _curPage >= _TotalPage ThenMsgBox("页号超出上限")Exit SubEnd If'如果页号是最后一页,就显示最后一页If _curPage = _TotalPage - 1 ThenGoLastPage()Exit SubEnd If'不是最后一页,那显示指定页号的页Dim dt As New DataTabledt = _dv.ToTable.CloneDim i As IntegerFor i = PageNo * _RowsPerPage To (PageNo + 1) * _RowsPerPage - 1Dim dr As DataRow = dt.NewRowdr.ItemArray = _dv.ToTable.Rows(i).ItemArraydt.Rows.Add(dr)Next_DataGridView.DataSource = dtEnd SubEnd Class现在举例介绍一下怎么使用这个类(以下简称分页辅助类)来帮助DataGridView控件分页显示记录:首先,在DataGridView所在的窗体类代码中加入该分页辅助类的成员:Private dgvPage As ClsDataGridViewPage然后在窗体的构造函数代码中实例化这个成员:Public Sub New()' 此调用是 Windows 窗体设计器所必需的。
foreach 遍历分页的gridview方法-概述说明以及解释
foreach 遍历分页的gridview方法-概述说明以及解释1.引言1.1 概述为了更高效地遍历分页的gridview,我们可以使用foreach循环来实现。
通过使用foreach循环,我们可以遍历gridview中的每一行数据,并对其进行操作,而无需通过传统的for循环和索引来访问每一行数据。
这样可以简化代码编写并提高代码的可读性和维护性。
在本篇文章中,我们将介绍foreach循环的概念以及其在遍历分页的gridview中的应用。
首先,我们会详细介绍foreach循环的用法和特点。
然后,我们会介绍gridview的基本知识和分页功能的实现方式。
最后,我们会总结foreach遍历分页的gridview方法的优势和应用场景,并对整篇文章进行总结。
通过阅读本篇文章,读者将了解到如何使用foreach循环来遍历分页的gridview,以及在实际项目中的应用情况。
这将有助于读者在编写代码时更加高效和便捷地处理分页的gridview数据。
现在,让我们深入探讨foreach遍历分页的gridview方法吧!1.2 文章结构本文主要介绍了使用foreach遍历分页的gridview方法。
文章分为引言、正文和结论三个部分。
在引言部分,我们对文章进行了概述,简要介绍了本文的目的和文章结构。
在正文部分,首先介绍了foreach循环的概念和用途,解释了为什么我们要在分页的gridview中使用foreach遍历方法。
接着,我们对gridview进行了详细的介绍,包括它的功能和使用方式。
最后,我们解释了分页功能的作用和实现方法。
在结论部分,我们总结了使用foreach遍历分页的gridview方法的优势,说明了它的应用场景。
同时,对本文进行了总结,并进一步展望了未来的研究方向。
通过对以上内容的介绍,读者可以全面了解使用foreach遍历分页的gridview方法的优势和应用场景,对于实际开发中的使用具有一定的指导意义。
DataGridView使用自定义控件实现简单分页功能(推荐)
DataGridView使⽤⾃定义控件实现简单分页功能(推荐)本例⼦使⽤⾃定义控件⽅法实现,数据库使⽤的是SQL Server,实现过程如下:1、新建⼀个⾃定义控件,命名为:PageControl。
2、PageControl代码如下:public partial class PageControl : UserControl{//委托及事件public delegate void BindPage(int pageSize, int pageIndex, out int totalCount);public event BindPage BindPageEvent;//属性public int PageSize { get; set; } = 1; //每页显⽰记录数public int PageIndex { get; set; } //页序号public int TotalCount { get; set; } //总记录数public int PageCount { get; set; } //总页数public PageControl(){InitializeComponent();//取消下划线linkFirst.LinkBehavior = LinkBehavior.NeverUnderline;linkPrev.LinkBehavior = LinkBehavior.NeverUnderline;linkNext.LinkBehavior = LinkBehavior.NeverUnderline;linkLast.LinkBehavior = LinkBehavior.NeverUnderline;linkGo.LinkBehavior = LinkBehavior.NeverUnderline;}/// <summary>/// 设置页/// </summary>public void SetPage(){//总记录数int totalCount = 0;BindPageEvent(PageSize, PageIndex + 1, out totalCount);TotalCount = totalCount;//总页数if (TotalCount % PageSize == 0)PageCount = TotalCount / PageSize;elsePageCount = TotalCount / PageSize + 1;//当前页及总页数txtCurrentPage.Text = (PageIndex + 1).ToString();lblTotalPage.Text = "共 " + PageCount.ToString() + " 页";}/// <summary>/// ⾸页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkFirst_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex = 0;SetPage();}}/// <summary>/// 上⼀页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkPrve_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex--;if (PageIndex < 0){PageIndex = 0;}SetPage();}}/// <summary>/// 下⼀页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkNext_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex++;if (PageIndex > PageCount - 1){PageIndex = PageCount - 1;}SetPage();}}/// <summary>/// 末页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkLast_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex = PageCount - 1;SetPage();}}/// <summary>/// 只能按0-9、Delete、Enter、Backspace键/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void txtSetPage_KeyPress(object sender, KeyPressEventArgs e){if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8 || e.KeyChar == 13 || e.KeyChar == 127){e.Handled = false;if (e.KeyChar == 13){Go();}}else{e.Handled = true;}}/// <summary>/// 指定页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkGo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){Go();}}private void Go(){if (string.IsNullOrEmpty(txtCurrentPage.Text)){MessageBox.Show("指定页不能为空。
GridView控件数据分页方法研究
GridView控件数据分页方法研究张勇波【期刊名称】《信息技术》【年(卷),期】2012(000)001【摘要】数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段.介绍了在 4.0中常用的GridView控件,深入研究了它的两种分页显示方法,并给出了相关的基本概念及相应的核心代码.%Data paging is a common technology in Web application development and also it is a primary method to improve the performance of Web data access. This paper introduces the GridView control in ASP . NET 4. 0 and studies its two data paging methods, and it also gives the basic concepts and the corresponding core codes.【总页数】3页(P120-122)【作者】张勇波【作者单位】中国石油大学(华东),青岛266555【正文语种】中文【中图分类】TP301【相关文献】(C#)中通过GridView控件对XML数据进行管理 [J], 李金峰;邹军华;胡江峰2.基于GridView控件仿Excel格式显示数据的网页制作 [J], 谭东清3.在C#中的GRIDVIEW控件发布数据的一些方法 [J], 武伟4.利用GridView控件显示MS SQLServer2005数据库表BLOB数据 [J], 魏景东5.GridView控件在多学科数据维护管理平台中的开发应用 [J], 高明智因版权原因,仅展示原文概要,查看原文内容请购买。
ASPNet中DataGrid基于Access的快速分页法
DataGrid基于Access的快速分页法DataGrid是一个功能非常强大的 Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数据进行动态的排序、编辑和分页。
使Web开发人员从繁琐的代码中解放。
实现DataGrid的分页功能一直是很多初学的人感到棘手的问题,特别是自定义分页功能,实现方法多种多样,非常灵活。
本文将向大家介绍一种DataGird控件在Access数据库下的快速分页法,帮助初学者掌握DataGrid的分页技术。
目前的分页方法DataGrid内建的分页方法是使用诸如“SELECT * FROM <TABLE>”的SQL语句从数据库表中取出所有的记录到DataSet中,DataGrid控件绑定到该DataSet之后,它的自动分页功能会帮你从该DataSet中筛选出当前分页的数据并显示出来,其他没有用的数据将被丢弃。
还有一种方法是使用自定义分页功能,先将DataGrid的AllowCustomPaging属性设置为True,再利用DataAdapter的Fill方法将数据的筛选工作提前到填充DataSet时,而不是让DataGrid帮你筛选:该方法首先将来自查询处的结果填充到DataSet中,再将不需要显示的数据丢弃。
当然,自定义分页功能需要完成的事情还不止这些,本文将在后面详细介绍。
以上两种方法的工作原理都是先从数据库中取出所有的记录,然后筛选出有用的数据显示出来。
可见,两种方法的效率基本上是一致的,因为它们在数据访问阶段并没有采取有效的措施来减少Access对磁盘的访问次数。
对于小数量的记录,这种开销可能是比较小的,如果针对大量数据的分页,开销将会非常巨大,从而导致分页的速度非常的慢。
换句话说,就算每个DataGrid分页面要显示的数据只是一个拥有几万条记录的数据库表的其中10条,每次DataGrid进行分页时还是要从该表中取出所有的记录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常漫 长 , 时会 造 成数 据 的缺 损 、 漏 或 丢失 ; 成 有 遗 造
网络 资源 的严 重浪 费 , 至 会 产 生严 重 的 网络堵 塞 甚
A P N T,S P S . E JP,HP等 都 可 以。 下 面 就 结 合 Gi— r d
Ve i w控 件对数 据 分 页 的两 种 实 现 办 法 做 一 个 系统
的介 绍 。
现象 ; 对用 户来 说 等待 时间过 于 漫长 。 数 据分 页显示 技术是 We b开发过 程 中经常使 用
的海量数据 显示方 法 , 为用 户可管理 的数据 查询提 供 了极大 的方 便 。本 文针对微软 的 A P. E . 的 S N T40下 G iVe r i d w控 件 , 细 介 绍 了 We 详 b开 发 中用 到 的各 种
摘
要 :数据 分 页是 We 用程序 开发 中经常使 用 的一种 技 术 ,也是 提 高 We 据访 问性 能的 b应 b数
主要手段 。介绍 了在 A P N T . S . E 4 0中常用的 G i i r Ve d w控件 ,深入研究 了它的两种分页显示方法, 并给 出 了相 关的基 本概念 及相 应 的核心代 码 。
We b页面 。
分页显示方 法和技 巧 , 给 出了核 心的程序代码 。 并
1 数 据 分 页 实现 原 理
数据 分页 技术 按具 体实 现办法 可分 为应用 客 户 端 分 页与数 据 库服 务器端 分 页。如 果分 页逻辑 主 要 使 用 应用程 序 编码语 言 ( C 、 B N T等 ) 如 #V . E 进行 描 述, 即为应 用 客户 端 分 页 。如果 分 页 逻 辑 主要 使 用
ZHANG n — o Yo g b
( hn iesyo erl m , n d o2 65 , hn ) C iaUnvri f toe t P u Qig a 6 5 5 C ia
Absr t Da a p gn s a c mmo e h o o y i e p lc t n d v l p n n lo i s a p i r t ac : t a i g i o n t c n l g n W b a p ia i e eo me ta d as ti rma y o meh d t mp o e t e p ro ma c fW e aa a c s .Th s p p r i to u e e Grd e c n r li to o i rv h e r n e o b d t c e s f i a e nr d c s t i Viw o to n h AS . P NET 0 a d su i s is t a g n t o s,a t as ie e b sc o e t nd t e 4. n t d e t wo d t pa i g me d a h nd i lo gv s t a i c nc p s a h h c re p n i g c r o s o r s o d n o e c de . Ke y wor : d t gng;Grd e ds a pa i a i Viw;AS .NET 0 P 4. ‘
21 0 2年第1 期
文 章 编 号 :0 9- 52 2 1 ) l 0 2 10 2 5 (0 2 0 一 10—0 3 中 图 分 类 号 :P 0 T 31 文献标识码 : A
G iV e r i d w控 件 数 据 分 页 方 法 研 究
张 勇 波
( 中国石油大学 ( 华东 ) ,青 岛 2 65 ) 6 5 5
0 引言
在 We 发过 程 中 , b开 进行 数据 查 询 时经 常会 遇
赖 于编 程语 言本 身 的 强 大逻 辑 描 述 功能 , 发 效 率 开 较高 ; 而后 者 由数 据库 服务 器来 完成 整个计 算过 程 , 能有效 减少 网络 流量 , 执行 效 率更高 , 且更 具广 泛适 应性 , 而且 对 数 据 库 类 型 也 没 有 特 别 要 求 , Oa 如 r—
c ,Q e e 等 , 编 程环 境 也 没 有 具 体 限 制 , l S LS r r 对 e v 如
到这样 的情 况 , 即一 个 数 据 库查 询 会 返 回很 多 的结 果 行 。如果 把 这些数 据 都在一 个页 面 中发送 给客户
端 会 产Leabharlann 下 面几 个 问题 : 据在 页 面 中显 示过 程 非 数
2 数 据 分 页 的具 体 实 现
2 1 G iVe . r i d w控 件 介绍
A P. E S N T是微 软. E N T开 发平 台的核 心元 素 , 程 序开发人员可 以使用 它构建动态 We b站点 、 开发 We b 应用程序 、 供基 于 X L的 We 提 M b服务 。A P.E 完 S NT 全基 于模块 和组件 , 有 很 好 的 可 扩展 性 和 可 定 制 具 性 , 为 用 户 提 供 功 能 强 大 、 观 丰 富 的 可 编 程 可 外
关键 词 :分 页 ;GiVe A P N T4 0 r i d w; S. E .
Re e r h o a a p g n e h o o i s i i Viw o t o s a c n d t a i g t c n l g e n Gr d e c n r l
数据 库 服 务 器 端 S L脚 本 ( O al、 Q evr Q 如 rce S L S re
G iVe r iw是 D tG i 后继 控 件 , r V e 和 d a r a d的 Gi i d w