C#、Asp.net之真假分頁大揭秘、使用AspNetPager實現真分頁--善良公社

來源:互聯網
上載者:User

       面對幾十條的資料,網頁都會顯示特別慢,如果面對上千上萬條的記錄時,網頁就不知道慢成什麼樣子了,此時系統就可以說報廢了。今天我們從本質上將分頁問題解決掉。

例子:

<p style="height: 23px; width:700px; text-align: center;font-size:16px;" background="images/相簿_09.jpg">                當前頁碼為[<asp:Label ID="lblCurrentPage" runat="server" Text="1"></asp:Label>]頁 總頁碼[<asp:Label                    ID="lblSumPage" runat="server" Text="0"></asp:Label>]頁                        <asp:LinkButton ID="lnkBtnFirst" runat="server" Font-Underline="False" OnClick="lnkBtnFirst_Click"> 第一頁 </asp:LinkButton>                <asp:LinkButton ID="lnkBtnPrevious" runat="server" Font-Underline="False" OnClick="lnkBtnPrevious_Click"> 上一頁 </asp:LinkButton>                <asp:LinkButton ID="lnkBtnNext" runat="server" Font-Underline="False" OnClick="lnkBtnNext_Click"> 下一頁 </asp:LinkButton>                <asp:LinkButton ID="lnkBtnLast" runat="server" Font-Underline="False" OnClick="lnkBtnLast_Click"> 末一頁 </asp:LinkButton>                         </p>

 protected void Page_Load(object sender, EventArgs e)        {            //如果使用者沒有登入,則跳轉到首頁            if (Session["UserName"] != null)            {                DataListBind();            }            else            {                Response.Redirect("default.aspx");            }        }        ///// <summary>        ///// 綁定目前使用者的照片        ///// </summary>        public void DataListBind()        {            //判斷使用者是否已經登入            if (Session["UserID"] == null)            {                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('您尚未登入,請登入!');</script>");                return;            }            DataTable dt = new DataTable();            dt.Columns.Add(new DataColumn("PhotoID", typeof(string)));            dt.Columns.Add(new DataColumn("PhotoName", typeof(string)));            dt.Columns.Add(new DataColumn("PhotoUrl", typeof(string)));            dt.PrimaryKey = new[] { dt.Columns["PhotoID"] };            //執行個體化一個B層對象            userPhotoBLL userphotobll = new userPhotoBLL();            //執行個體化一個實體的對象            userPhotoEntity enUserPhoto = new userPhotoEntity();            enUserPhoto.UserID = Session["UserID"].ToString();//擷取目前使用者的ID            string strWhere = "UserID='" + enUserPhoto.UserID + "'";            //根據查詢條件獲得資料列表            DataSet ds = userphotobll.GetList(strWhere);            //如果沒有記錄,則顯示一張空照片            if (ds.Tables[0].Rows.Count == 0)            {                NoImage.Visible = true;            }            else {                NoImage.Visible = false;            }            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)            {                if (ds.Tables[0].Rows.Count > 0)                {                    DataRow dr = dt.NewRow();                    dr[0] = ds.Tables[0].Rows[i][1].ToString();                    dr[1] = ds.Tables[0].Rows[i][2].ToString();                    dr[2] = ds.Tables[0].Rows[i][5].ToString();                    dt.Rows.Add(dr);                }            }            PagedDataSource pds = new PagedDataSource();            pds.DataSource = dt.DefaultView; //將查詢結果綁定到分頁資料來源上。            pds.AllowPaging = true; //允許分頁            pds.PageSize = 12; //設定每頁顯示多少張圖片            pds.CurrentPageIndex = Convert.ToInt32(lblCurrentPage.Text) - 1; //設定當前頁            lnkBtnFirst.Enabled = true; //控制項翻頁控制項都設定為可用            lnkBtnLast.Enabled = true;            lnkBtnNext.Enabled = true;            lnkBtnPrevious.Enabled = true;            if (lblCurrentPage.Text == "1") //如果當前顯示第一頁,“第一頁”和“上一頁”按鈕不可用。            {                lnkBtnPrevious.Enabled = false;                lnkBtnFirst.Enabled = false;            }            if (lblCurrentPage.Text == pds.PageCount.ToString()) //如果顯示最後一頁,“末一頁”和“下一頁”按鈕不可用。            {                lnkBtnNext.Enabled = false;                lnkBtnLast.Enabled = false;            }            lblSumPage.Text = pds.PageCount.ToString(); //實現總頁數            //將分頁結果綁定到DataList控制項上            dlPictrue.DataSource = pds; //綁定資料來源            dlPictrue.DataKeyField = "PhotoID";            dlPictrue.DataBind();        }        /// <summary>        /// 第一頁        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void lnkBtnFirst_Click(object sender, EventArgs e)        {            lblCurrentPage.Text = "1";            DataListBind();        }        /// <summary>        /// 前一頁        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void lnkBtnPrevious_Click(object sender, EventArgs e)        {            lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();            DataListBind();        }        /// <summary>        /// 下一頁        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void lnkBtnNext_Click(object sender, EventArgs e)        {            lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();            DataListBind();        }        /// <summary>        /// 最後一頁        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void lnkBtnLast_Click(object sender, EventArgs e)        {            lblCurrentPage.Text = lblSumPage.Text;            DataListBind();        }



            

 <webdiyer:AspNetPager ID="anp" runat="server" FirstPageText="首頁" LastPageText="尾頁" NextPageText="下一頁" onpagechanged="anp_PageChanged" PageSize="12" PrevPageText="上一頁" CustomInfoHTML="總共%RecordCount%條記錄,共%PageCount%頁"         ShowCustomInfoSection="Left" ShowPageIndexBox="Never"        CssClass="paginator" CurrentPageButtonClass="cpb" AlwaysShow="True"         CustomInfoSectionWidth=""> </webdiyer:AspNetPager>

 protected static PagedDataSource pds = new PagedDataSource();//建立一個分頁資料來源的對象且一定要聲明為靜態        paintingBLL paintingbll = new paintingBLL();        protected void Page_Load(object sender, EventArgs e)        {            if (!Page.IsPostBack)            {                //第一次進入該頁面時                //載入所有的書畫作品                               string strWhereRecord = "";                //獲得資料總數                anp.RecordCount = paintingbll.GetRecordCount(strWhereRecord);               //調用綁定的方法                BindGV();                                //載入所有的最新訂單                //賦值                string strWhere = "DoSign='成交'";                string filedOrder = "DealTime";                //綁定資料來源                gvPaintOrder.DataSource = new OrderFormBLL().GetList(10, strWhere, filedOrder);                 gvPaintOrder.DataBind();            }        }        //分頁事件        protected void anp_PageChanged(object sender, EventArgs e)        {            BindGV();        }         //綁定書畫        protected void BindGV()        {            string strWhere="";            string orderby="";            //頁大小            int pagesize = anp.PageSize;            //頁索引            int pageindex = anp.CurrentPageIndex;            //執行個體化一個B層對象            paintingBLL paintingbll = new paintingBLL();            //獲得所有的書畫資料,開始索引值 (pageindex - 1) * pagesize + 1,結束索引值:pagesize * pageindex            DataSet ds = paintingbll.GetListByPage(strWhere, orderby, (pageindex - 1) * pagesize + 1, pagesize * pageindex);                        //如果沒有記錄,則顯示沒有條            if (ds.Tables[0].Rows.Count == 0)            {                NoImage.Visible = true;            }            else            {                NoImage.Visible = false;            }            pds.DataSource = ds.Tables[0].DefaultView;//把資料集中的資料放入分頁資料來源中            dlPictrue.DataSource = pds;//綁定Datalist            dlPictrue.DataBind();        }

        /// <summary>/// 擷取記錄總數/// </summary>public int GetRecordCount(string strWhere){StringBuilder strSql=new StringBuilder();            strSql.Append("select count(1) FROM V_PaintingInfo ");if(strWhere.Trim()!=""){strSql.Append(" where "+strWhere);}object obj = DbHelperSQL.GetSingle(strSql.ToString());if (obj == null){return 0;}else{return Convert.ToInt32(obj);}}/// <summary>/// 分頁擷取資料列表/// </summary>public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex){StringBuilder strSql=new StringBuilder();strSql.Append("SELECT * FROM ( ");strSql.Append(" SELECT ROW_NUMBER() OVER (");if (!string.IsNullOrEmpty(orderby.Trim())){strSql.Append("order by T." + orderby );}else{                strSql.Append("order by T.PaintingID ASC");}            strSql.Append(")AS Row, T.*  from V_paintingInfo T ");if (!string.IsNullOrEmpty(strWhere.Trim())){strSql.Append(" WHERE " + strWhere);}strSql.Append(" ) TT");strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);return DbHelperSQL.Query(strSql.ToString());}

       假分頁,如果資料量較多,在首次頁面載入的時候會比較慢,嚴重影響使用者體驗,Web開發和搜尋引擎最佳化。真分頁的效率無疑是最高的,它還有很多的優點:
       1.每次點擊下一頁,Client Access Server的時間基本一樣,提高使用者體驗,更加的人性化。
       2.對於大資料量可以從容的面對。
缺點:與背景互動次數增多。
;真分頁:。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.