您的位置:首页 > 其它

GridView控件自定义分页的实现

2009-10-05 17:15 423 查看
前人栽树,后人乘凉,话不多说,代码如下:





实现方式一:

.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();
    }

}




以上是对别人实现的一些总结,和对其中一些代码实现的改进,希望各位指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: