GridView控件自定义分页的实现

本文介绍了两种在ASP.NET中实现GridView分页的方法。一种是手动编写分页逻辑,另一种是利用GridView内置的分页模板。同时,文章还讨论了如何优化页面导航按钮的显示状态。

前人栽树,后人乘凉,话不多说,代码如下:

 


 

实现方式一:

.aspx:

<form id="form1" runat="server"> <table style="width: 605px"> <tr> <td style="width: 921px"> <asp:GridView ID="GridView1" runat="server" Width="700px" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" Height="232px"> <PagerSettings Visible="False" /> </asp:GridView> </td> </tr> <tr> <td style="width: 921px; height: 23px" >共 <asp:Label ID="recordCount" runat="server"></asp:Label> 条/ <asp:Label ID="LabelCurrentPage" runat="server"></asp:Label> <asp:Label ID="LabelPageCount" runat="server"></asp:Label>页 <asp:LinkButton ID="First" runat="server" CommandArgument="First" CommandName="Page" OnClick="PagerButton_Click">首页</asp:LinkButton> <asp:LinkButton ID="Prev" runat="server" CommandArgument="Prev" CommandName="Page" OnClick="PagerButton_Click">上一页</asp:LinkButton> <asp:LinkButton ID="Next" runat="server" CommandArgument="Next" CommandName="Page" OnClick="PagerButton_Click">下一页</asp:LinkButton> <asp:LinkButton ID="Last" runat="server" CommandArgument="Last" CommandName="Page" OnClick="PagerButton_Click">尾页</asp:LinkButton> <asp:Label ID="Label1" runat="server">第</asp:Label> <asp:TextBox ID="txtPage" runat="server" Width="18px"></asp:TextBox> <asp:Label ID="Label2" runat="server">页</asp:Label> <asp:Button ID="btnLoginPage" runat="server" Text="GO" OnClick="btnLoginPage_Click" /> </td> </tr> </table> </form>

 

 


 

.CS:(以下代码可能折叠,请自行点击下面的按钮展开)

 

 using System; using System.Data; using System.Data.SqlClient; using System.Configuration; 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; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { //绑定数据 Bind(); } //计算生成分页页码 this.First.CommandName = "1"; this.Prev.CommandName = this.GridView1.PageIndex == 0 ? "1" : this.GridView1.PageIndex.ToString(); if (this.GridView1.PageCount == 1) { this.Next.CommandName = this.GridView1.PageCount.ToString(); } else { int temp = this.GridView1.PageIndex + 2; this.Next.CommandName = temp.ToString(); } this.Last.CommandName = this.GridView1.PageCount.ToString(); } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { GridView1.PageIndex = e.NewPageIndex; this.Bind(); } //点击LinkButton按钮事件 protected void PagerButton_Click(object sender, EventArgs e) { this.GridView1.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName) - 1; this.Bind(); } protected void Bind() { //数据绑定代码 string strconn = "Data Source=.; Initial Catalog=JWInfo; uid=sa;pwd=123456;"; SqlConnection conn = new SqlConnection(strconn); conn.Open(); SqlCommand cmd = new SqlCommand("select * from 学生信息", conn); SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = cmd; DataSet ds = new DataSet(); sda.Fill(ds, "学生信息"); GridView1.DataSource = ds.Tables["学生信息"]; GridView1.DataBind(); //总页数,当前页,总记录数 this.recordCount.Text = ds.Tables[0].Rows.Count.ToString(); int t = this.GridView1.PageIndex+1; this.LabelCurrentPage.Text = t.ToString(); this.LabelPageCount.Text = this.GridView1.PageCount.ToString(); //设置相关按钮是否可见 this.First.Enabled = Convert.ToBoolean(GridView1.PageIndex != 0); this.Prev.Enabled = Convert.ToBoolean(GridView1.PageIndex != 0); this.Next.Enabled = Convert.ToBoolean(this.GridView1.PageIndex != this.GridView1.PageCount - 1); this.Last.Enabled = Convert.ToBoolean(this.GridView1.PageIndex != this.GridView1.PageCount - 1); } //页码跳转实现 protected void btnLoginPage_Click(object sender, EventArgs e) { int page = Convert.ToInt32(txtPage.Text.Trim()); if (page < 0 || page > GridView1.PageCount) { Response.Write("<mce:script language='javascript'><!-- alert('输入的页码有错请重新输入'); // --></mce:script>"); } else { GridView1.PageIndex = page - 1; this.Bind(); } } }

 

 

实现方式二:

这里通过使用GridView自带的分页模板实现,代码如下:

<form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" Width="740px" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging"> <PagerTemplate> <asp:Label ID="Label1" runat="server" Text="第"></asp:Label> <asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label> <asp:Label ID="Label2" runat="server" Text="页"></asp:Label> <asp:Label ID="Label3" runat="server" Text="共"></asp:Label> <asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label> <asp:Label ID="Label4" runat="server" Text="页"></asp:Label> <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">首页</asp:LinkButton> <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">上一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">下一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">尾页</asp:LinkButton> </PagerTemplate> </asp:GridView> </div> </form>

 

 

这其中,我曾看到有人,用类似的方法实现,但我在以下的代码中实现了一点小变动,将其中的Visable属性,改用Enable属性,本人认为更为合理,并且有利布局:

 


 

<asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">首页</asp:LinkButton> <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">上一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">下一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" Enabled="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">尾页</asp:LinkButton>

 


 

.CS:

using System; using System.Data; using System.Data.SqlClient; using System.Configuration; 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; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { Bind(); } } protected void Bind() { string strconn = "Data Source=.; Initial Catalog=JWInfo; uid=sa;pwd=123456;"; SqlConnection conn = new SqlConnection(strconn); conn.Open(); SqlCommand cmd = new SqlCommand("select * from 学生信息", conn); SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = cmd; DataSet ds = new DataSet(); sda.Fill(ds, "学生信息"); GridView1.DataSource = ds.Tables["学生信息"]; GridView1.DataBind(); } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { this.GridView1.PageIndex = e.NewPageIndex; this.Bind(); } }

 

以上是对别人实现的一些总结,和对其中一些代码实现的改进,希望各位指教!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值