`
shirlly
  • 浏览: 1653099 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

GridView自定义分页

    博客分类:
  • .NET
阅读更多
在.NET平台下处理显示数据时,需要经常使用GridView控件进行分页,虽然它本身提供了分页机制,但总的说来其分页效果较为单调,大部分情况下无法满足客户的需求(也只能让开发人员YY一下而已)。与此同时,GridView提供了多种扩展机制,用户可以在此基础上自行扩展分页功能。现在就对其分页进行相应的扩展
首先,对GridView控件添加一个PagerTemplate,其HTML代码如下所示。
<asp:GridView ID="GridView1" runat="server" 
                  AllowPaging="True" PageSize="5" 
                  OnDataBound = "GridView_DataBind" CellPadding=2 CellSpacing=0>
              <PagerTemplate>
               <div id="main">
                  <div id="info">&nbsp;&nbsp;页次:<asp:Label ID="lblPageCurrent" runat="server" Text="1" CssClass="txtInfo"></asp:Label>
                  /<asp:Label ID="lblPageCount" runat="server" Text="1"></asp:Label>&nbsp;&nbsp;
                  共&nbsp;<asp:Label ID="lblPageRow" runat="server" Text="1" CssClass="txtInfo"></asp:Label>&nbsp;条记录
                  </div>
                  <div id="page">
                      <asp:LinkButton ID="btnFirst" runat="server" CssClass="link" CommandName="Pager" CommandArgument="First" OnCommand="NavigateToPage">[首页]</asp:LinkButton>&nbsp;
                      <asp:LinkButton ID="btnPrev" runat="server" CssClass="link" CommandName="Pager" CommandArgument="Prev" OnCommand ="NavigateToPage">[前一页]</asp:LinkButton>&nbsp;
                      <asp:LinkButton ID="btnNext" runat="server" CssClass="link" CommandName="Pager" CommandArgument="Next" OnCommand="NavigateToPage">[下一页]</asp:LinkButton>&nbsp;
                      <asp:LinkButton ID="btnLast" runat="server" CssClass="link" CommandName="Pager" CommandArgument="Last" OnCommand="NavigateToPage">[尾页]</asp:LinkButton>&nbsp;&nbsp;
                  </div>
               </div>
              </PagerTemplate>
              <RowStyle BackColor="#F9F9F9" />
              <HeaderStyle BackColor="#EDF7E7" Font-Bold="true" />
              <AlternatingRowStyle BackColor="White" />
          </asp:GridView>



添加的三个Label(lblPageCurrent,lblPageCount,lblPageRow)控件分别用来显示当前页、总页数及总记录数。添加的四个LinkButton控件用来导航。控件准备好之后,就开始写代码,首先需要完成GridView控件的OnDataBound事件(GridView_DataBind),再次需要完成LinkButton的Command事件(NavigateToPage)这一步主要用来导航。其具体代码如下所示。
public partial class Default : System.Web.UI.Page
{
      int rowCount = 0;//用来记录总记录数
      protected void Page_Load(object sender, EventArgs e)
      {
          if (!IsPostBack)
              GridViewFill();
      }
      private void GridViewFill()
      {
          string strConn = "server=localhost\\sqlexpress;database=MyComics;Integrated Security=True";
          SqlConnection conn = new SqlConnection(strConn);
          DataSet ds = new DataSet();
          string strSql = "SELECT * FROM Books";
          SqlDataAdapter DA = new SqlDataAdapter(strSql, conn);
          DA.Fill(ds, "Books");
          rowCount = ds.Tables["Books"].Rows.Count;         //取得总记录数目
          this.GridView1.DataSource = ds.Tables["Books"];
          this.GridView1.DataBind();
      }
      protected void NavigateToPage(object sender, CommandEventArgs e)
      {
          //控制转页
          switch (e.CommandArgument.ToString())
          {
              case "First":
                  this.GridView1.PageIndex = 0;
                  break;
              case "Prev":
                  if (this.GridView1.PageIndex > 0)
                      this.GridView1.PageIndex -= 1;
                  break;
              case "Next":
                  if (this.GridView1.PageIndex < (this.GridView1.PageCount - 1))
                      this.GridView1.PageIndex += 1;
                  break;
              case "Last":
                  this.GridView1.PageIndex = this.GridView1.PageCount - 1;
                  break;
          }
          GridViewFill();
      }
      protected void GridView_DataBind(object sender, EventArgs e)
      {
          GridViewRow pagerRow = GridView1.BottomPagerRow;
          //获取Label实例,显示页次信息
          Label lblCurrent = (Label)pagerRow.Cells[0].FindControl("lblPageCurrent");
          Label lblCount = (Label)pagerRow.Cells[0].FindControl("lblPageCount");
          Label lblRow = (Label)pagerRow.Cells[0].FindControl("lblPageRow");
          //获取按钮实例,为了控制其是否可用
          LinkButton btnFirstTem = (LinkButton)pagerRow.Cells[0].FindControl("btnFirst");
          LinkButton btnPrevTem = (LinkButton)pagerRow.Cells[0].FindControl("btnPrev");
          LinkButton btnNextTem = (LinkButton)pagerRow.Cells[0].FindControl("btnNext");
          LinkButton btnLastTem = (LinkButton)pagerRow.Cells[0].FindControl("btnLast");

          if (lblCurrent != null)
              lblCurrent.Text = (this.GridView1.PageIndex + 1).ToString();
          if (lblCount != null)
              lblCount.Text = this.GridView1.PageCount.ToString();
          if (lblRow != null)
              lblRow.Text = rowCount.ToString();

          if (this.GridView1.PageIndex == 0)
          {
              btnFirstTem.Enabled = false;
              btnPrevTem.Enabled = false;
              //只有一页,所有分页按钮不可用
              if (this.GridView1.PageCount == 1)
              {
                  btnNextTem.Enabled = false;
                  btnLastTem.Enabled = false;
              }
          }
          else if (this.GridView1.PageIndex == (this.GridView1.PageCount - 1))
          {
              btnNextTem.Enabled = false;
              btnLastTem.Enabled = false;
          }
      }
}



OK,现在就可以使用我们自定义的分页了,目前网络上使用的分页大部分都是这种样子,因此在进行样式设计时,就直接按照这种模式设计了。其中在控制外观时,使用了一个样式表,其具体代码如下所示。
body 
{
font-size:9pt;
}
#main
{
background-color:#EDF7E7;
line-height:30px;
width:100%;
text-align:left;
}
#info
{
width: 40%;
font-family: Verdana;
float:left;
text-align:left;
}
#page
{
width:60%;
float:left;
overflow:auto;
text-align:right;
}
.txtInfo
{
color:#e78a29;
}
.link
{
    text-decoration:none;
    color:#474747;
}



导航按钮我使用了LinkButton控件,也可以使用ImageButton控件,这样就可以使用自己绘制的图片作为当航提示,从而避免只有文字的光秃效果。

        另外,我在计算记录的总数目时,使用的是rowCount = ds.Tables["Books"].Rows.Count这种方法,我一直在想GridView控件应该也能够提供一种获取总记录的方法,只可惜在我写这篇文章时,一直没有发现。那位高手懂得,还望赐教~~~~~~~~~~~~~~~~。Rayshow在此谢过...
转自:http://hi.baidu.com/rayshow/blog/item/aa10248ba5ef8b10c9fc7a67.html
分享到:
评论

相关推荐

    最简单的GridView自定义分页

    本教程将深入探讨如何实现“最简单的GridView自定义分页”。 一、GridView控件简介 GridView控件是ASP.NET Web Forms中的一员,它允许开发者以表格的形式展示数据源中的数据,如数据库查询结果。默认情况下,...

    GridView自定义分页可拖动列宽

    提供的"GridView自定义分页及可拖动改变列宽源码"应该包含以下部分: - 后台代码(C#或VB.NET):包含自定义分页逻辑,可能包括数据库查询和事件处理程序。 - 前端代码(ASPX或ASCX):定义GridView控件,分页...

    GridView自定义分页及可拖动改变列宽代码

    GridView自定义分页及可拖动改变列宽代码 GridView自定义分页及可拖动改变列宽代码 GridView自定义分页及可拖动改变列宽代码 GridView自定义分页及可拖动改变列宽代码 GridView自定义分页及可拖动改变列宽代码 ...

    .net的GRIDVIEW自定义分页功能

    找了三天才找到合适会用的gridview自定义分页功能,之前找了n多种方法,没一个能用的,直到现在这个才真正的在自己的网页上用上。现在上传上来给有需要的朋友一个方便,2分的资源分只是想借朋友的一点力积点分方便...

    GridView自定义分页的四种存储过程

    为了提高效率,开发者通常会选择自定义分页,本文将探讨四种使用存储过程实现GridView自定义分页的方法。 首先,我们来理解为什么不应依赖GridView的默认分页。默认分页是通过数据源控件(如SqlDataSource)来实现...

    GridView自定义分页及可拖动改变列宽源码

    标题"GridView自定义分页及可拖动改变列宽源码"涉及的知识点主要包括两个方面:自定义分页和列宽可拖动调整。 1. 自定义分页: 默认情况下,GridView控件使用服务器端分页,这意味着每次用户翻页时,服务器都需要...

    gridview实现自定义分页

    然而,标准的GridView控件默认的分页功能可能无法满足所有用户的需求,这时我们需要自定义分页来提供更加灵活和个性化的用户体验。本文将深入探讨如何在GridView中实现自定义分页,以及这一过程中的关键知识点。 ...

    asp.net中的GridView自定义分页及可拖动改变列宽代码

    总的来说,ASP.NET中的GridView自定义分页和可拖动改变列宽是提高用户体验的重要手段。通过结合C#服务器端代码、JavaScript客户端代码以及数据库操作,我们可以为用户提供更加灵活和个性化的数据查看体验。

    asp.net中的GridView自定义分页及改变列宽代码

    以上就是关于ASP.NET中GridView自定义分页和动态改变列宽的主要内容。在实际开发中,你可能还需要考虑性能优化、用户体验和兼容性等问题,确保代码既高效又易于维护。如果你需要进一步的代码示例或更深入的解释,...

    批量上传图片+lightbox+图片评论+gridview自定义分页控件

    本项目"批量上传图片+lightbox+图片评论+gridview自定义分页控件"正是为了解决这一需求而设计的。以下将详细解释这个系统的关键组成部分及其技术要点。 1. 批量上传图片: 批量上传功能允许用户一次性上传多张图片...

    asp.net gridview自定义分页

    此处自定义分页是在需要时才加载当页数据。 示例中包含完整的Sql数据库访问类(考虑到了存储过程的使用),也可以适应不同的数据库,简单的修改代码即可使用。 示例逻辑层采用存储过程访问数据库,加快访问速度。...

    ObjectDataSource和Gridview自定义分页

    本文将深入探讨如何使用ObjectDataSource与GridView实现自定义分页,并结合Microsoft.Practices.EnterpriseLibrary.Data4.1库进行数据库操作。 首先,`ObjectDataSource`是ASP.NET提供的一种数据源控件,它允许我们...

    asp.net中的GridView自定义分页及排序代码

    本文将详细介绍如何在ASP.NET中实现GridView的自定义分页及排序功能,以帮助开发者提高用户体验并优化性能。 首先,我们要了解默认的GridView分页和排序机制。默认情况下,GridView会加载所有数据到内存中,然后...

    商业编程-源码-GridView自定义分页及可拖动改变列宽源码.zip

    在商业编程中,GridView的自定义分页和列宽可拖动功能是提高用户体验和数据管理效率的重要特性。 首先,我们来详细了解一下GridView的自定义分页。默认情况下,GridView会按照每页显示固定数量的数据进行分页。然而...

    ASP.NET GridView自定义分页支持拖拽控件合集

    基于ASP.NET的自定义分页显示及可拖动改变列宽代码 支持通过Url进行分页,支持Url分页方式下的Url重写(UrlRewrite)功能,支持使用用户自定义图片做为导航元素,功能强大灵活、使用方便、可定制性强,增强的 Visual...

    具有PageSize更改下拉菜单的GridView自定义分页

    "具有PageSize更改下拉菜单的GridView自定义分页"是一个高级特性,用于提高用户体验并优化数据加载性能。在这个特性中,用户可以通过下拉菜单选择每一页显示的数据量,而不是默认固定的分页大小。 首先,我们要理解...

    自定义GridView分页模板

    在默认情况下,GridView会自动处理分页逻辑,但我们可以进一步自定义分页界面的样式和行为。 `PagerTemplate`是一个特殊的区域,用于定义分页栏的外观和交互。在示例代码中,`PagerTemplate`包含了一个表格,用于...

    GridView自定义分页的四种存储过程 学习心得

    本文主要探讨了为何不使用GridView的默认分页功能以及通过存储过程实现自定义分页的四种方法。 首先,不使用GridView默认分页的原因在于其效率问题。当使用GridView的内置分页功能时,无论显示哪一页,整个数据源...

Global site tag (gtag.js) - Google Analytics