zoukankan      html  css  js  c++  java
  • GridView 后台分页

    前面写了两篇 前台分页。但是数据少还行 ,条数上千,浏览器就反映迟钝,卡得要死,容易导致浏览器崩溃,用户体验非常不好 。

    效果图

    前端页面:

       <div>
           <%-- OnPageIndexChanging="GridView1_PageIndexChanging"--%>
           <asp:GridView ID="GridView1" runat="server"  AutoGenerateColumns="False">
               <Columns>
                   <asp:BoundField DataField="Typeid" HeaderText="编号" />
                   <asp:BoundField DataField="TypeName" HeaderText="类型名称" />
                   <asp:BoundField DataField="Upid" HeaderText="父Id" />
                     <asp:BoundField DataField="d_date" HeaderText="时间" />
                   <asp:BoundField DataField="Memo" HeaderText="备注" />
               </Columns>
    
            
    
            </asp:GridView>
                        
                      <table  style="font:11px Tahoma; background-color:#cfe3fb;">
                        <tr>
                            <td><asp:Label ID="lblCurrentPage" runat="server" ></asp:Label>页
                            / 共<asp:Label ID="lblTotalPages" runat="server" ></asp:Label>&nbsp;&nbsp;
               
                            </td>
                        <td style="text-align: right;">
                            <asp:LinkButton ID="btnFirst" runat="server" CausesValidation="False"
                                CommandName="Page" Text="首页" CommandArgument="first" OnClick="btnFirst_Click">
                            </asp:LinkButton>
                            <asp:LinkButton ID="btnPrev" runat="server" CausesValidation="False"
                                CommandName="Page" Text="上一页" CommandArgument="prev" OnClick="btnPrev_Click" >
                            </asp:LinkButton>
                            <asp:LinkButton ID="btnNext" runat="server" CausesValidation="False"
                                CommandName="Page" Text="下一页" CommandArgument="next" OnClick="btnNext_Click" >
                            </asp:LinkButton>
                            <asp:LinkButton ID="btnLast" runat="server" CausesValidation="False"
                                CommandName="Page" Text="尾页" CommandArgument="last" OnClick="btnLast_Click" >
                            </asp:LinkButton>
                         
                            <asp:TextBox ID="txtToPage" runat="server" MaxLength="5" CssClass="inputBorder1" Text='1'
                                onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" AutoPostBack="True" ></asp:TextBox>
                            <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="go"
                                CommandName="Page" Text="GO" OnClick="btnGo_Click"></asp:LinkButton>
                             每页显示<asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
                    <asp:ListItem Value="2" Selected="True">2条</asp:ListItem>
                    <asp:ListItem Value="5">5条</asp:ListItem>
                   <asp:ListItem Value="10">10条</asp:ListItem>
                           </asp:DropDownList>
                        </td>
                        </tr>
                    </table>
        </div>
    View Code

    分页编写的实体类:

      public class Pagination
        {
                /// <summary>
                /// 总的记录数量
                /// </summary>
                public int TotalRecords { get; set; }
    
                /// <summary>
                /// 每页记录的条数
                /// </summary>
                public int PageSize { get; set; }
    
                /// <summary>
                /// 算出总页数
                /// </summary>
                public int TotalPages
                {
                    get
                    {
                        return (int)Math
                            .Ceiling(
                            TotalRecords * 1.0 /
                            PageSize);
    
                    }
                }
    
                /// <summary>
                /// 当前页,以1开始
                /// </summary>
                public int CurrentPage { get; set; }
    
    
    
                /// <summary>
                /// 首页
                /// </summary>
                public int First
                {
                    get { return 1; }
                }
    
                /// <summary>
                /// 上一页
                /// </summary>
                public int Prev
                {
                    get
                    {
                        return
                            CurrentPage - 1 < 1 ?
                            1 : CurrentPage - 1;
                    }
                }
    
                /// <summary>
                /// 下一页
                /// </summary>
                public int Next
                {
                    get
                    {
                        return CurrentPage + 1 > TotalPages
                            ? TotalPages : CurrentPage + 1;
                    }
                }
    
                /// <summary>
                /// 尾页
                /// </summary>
                public int Last
                {
                    get { return TotalPages; }
                }
            
        }
    View Code

    分页属性赋值类:

       public class PaginationFactory
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="pageSize">每页记录的条数</param>
            /// <param name="currentPage">页码</param>
            /// <param name="recordCount">总条数</param>
            /// <returns></returns>
            public static Pagination Instance(int pageSize, int currentPage, int recordCount)
            {
    
                Pagination p = new Pagination();
                p.TotalRecords = recordCount;
                p.PageSize = pageSize;
                p.CurrentPage = currentPage;
                return p;
            }
        }
    View Code

    后台代码:

      public partial class default: System.Web.UI.Page
        {
            SqlConnection connect;
            SqlCommand cmd;
            private int PageSize;//每页显示的条数
         
            private int pageindex;//第几页
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //页面显示的条数
                    PageSize = int.Parse(ddlPageSize.SelectedItem.Value);
                    //当前页
                    pageindex = 1;
                    //绑定page的一些属性 
                    Pagination pagination = PaginationFactory.Instance(PageSize, pageindex, RecordCount());
                    lblCurrentPage .Text = pageindex.ToString();
                    lblTotalPages.Text = pagination.TotalPages.ToString();
               
                    bind2(pageindex, PageSize);
                           }
    
    
            }
      
    
             /// <summary>
            /// 选择显示数量
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
            {
                int pageSize = Convert.ToInt32(this.ddlPageSize.Text);
    
               
                Pagination pagination = PaginationFactory.Instance(pageSize, 1,RecordCount());
    
    
                this.lblTotalPages.Text = pagination.TotalPages.ToString();
    
    
               bind2( pagination.CurrentPage, pagination.PageSize);
            }
            /// <summary>
            /// 按页码 查询数据并绑定
            /// </summary>
            /// <param name="currentPage">当前页</param>
            /// <param name="pageSize">页面显示条数</param>
            public void bind2(int currentPage, int pageSize)
            {
                string sql = "";
               
                sql = @"select * from (select ROW_NUMBER() 
                over (order by typeid) as HangHao,
                * 
                from GoodsTypes) pageduserinfo
                where HangHao between 
                (@currentPage -1)*@pagesize +1 
                and @pagesize * @currentPage";
                
                using (connect = new SqlConnection("server=.;database=SuperMarket;uid=sa;pwd=123;"))
                {
                    connect.Open();
                     cmd = new SqlCommand(sql, connect);
                    cmd.Parameters.AddWithValue("@currentPage", currentPage);
                    cmd.Parameters.AddWithValue("@pagesize", pageSize);
                    DataSet ds = new DataSet();
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(ds);
                    GridView1.DataSource = ds;
                    GridView1.DataKeyNames = new string[] { "typeid" };
                    GridView1.DataBind();
                    lblCurrentPage.Text = currentPage.ToString();
    
    
                }
            }
    
           /// <summary>
            /// 获取表的所有数据
            /// </summary>
            /// <returns></returns>
            public int RecordCount()
            {
                int result = 0;
                string connStr = "server=.;database = Test;uid=sa;pwd=123";
                string sql = "select count(*) from userinfo";
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    result = Convert.ToInt32(cmd.ExecuteScalar().ToString());
                }
                return result;
    
            }
            /// <summary>
            /// 上一页
            /// </summary>
            protected void btnPrev_Click(object sender, EventArgs e)
            {
                int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
                int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);
    
    
                Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());
    
    
    
                bind2(p.Prev, p.PageSize);
            }
            //下一页
            protected void btnNext_Click(object sender, EventArgs e)
            {
               
                int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
                int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);
    
               
                Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());
    
                bind2(p.Next, p.PageSize);
            }
            /// <summary>
            /// 尾页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnLast_Click(object sender, EventArgs e)
            {
                int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
                int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);//可以不需要
    
                Pagination p = PaginationFactory.Instance(pagSize, currentPage,RecordCount());
    
    
    
                bind2( p.Last, p.PageSize);
            }
            /// <summary>
            /// 首页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnFirst_Click(object sender, EventArgs e)
            {
                int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
                int currentPage = 1;         
                Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());
                bind2(p.CurrentPage, p.PageSize);
            }
            /// <summary>
            /// 跳转
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnGo_Click(object sender, EventArgs e)
            {
                int pageSize = Convert.ToInt32(this.ddlPageSize.Text);
                int currentPage = Convert.ToInt32(this.txtToPage.Text);     
                Pagination pagination = PaginationFactory.Instance(pageSize, currentPage, RecordCount());
                this.txtToPage.Text = "";
               bind2(pagination.CurrentPage, pagination.PageSize);
            }
    
    
    
        }
    View Code
  • 相关阅读:
    全文检索原理
    UBER的故事
    grails 优缺点分析
    微博轻量级RPC框架Motan
    基于redis 实现分布式锁的方案
    eggjs中cache-control相关问题
    mysql导入导出数据
    jenkins项目用户权限相关
    jenkins+gogs,服务随代码更新
    js/nodejs导入Excel相关
  • 原文地址:https://www.cnblogs.com/youchim/p/5504322.html
Copyright © 2011-2022 走看看