動態載入Asp.net分頁控制項

來源:互聯網
上載者:User
  http://dev.csdn.net/develop/article/53/53566.shtm

動態載入Asp.net分頁控制項

鄭佐2004-11-30

         在asp.net中動態載入控制項比較簡單,這裡我講得是對使用者控制項的載入,比較典型的就是被載入的使用者控制項裡麵包含回傳事件,在回傳回來的時候需要保持新的資料。

         先來構建分頁使用者控制項,由於前面幾篇文章都在講這些東西,所以就直接拿過來改了改,分頁代碼可以查看上面的文章1,文章2,下面是使用者控制項的一部分代碼。

public class PagingControl : System.Web.UI.UserControl

{

     private int pageCount;

     private int recordCount;

     ……

     private void Page_Load(object sender, System.EventArgs e)

     {

         if(!Page.IsPostBack)

         {

              DataGridDataBind();

         }

     }

     //綁定資料

     private void DataGridDataBind()

     {

         DataSet ds = GetCustomersData(PageIndex,PageSize,ref recordCount,ref pageCount);

         this.DataGrid1.VirtualItemCount = RecordCount;

         this.DataGrid1.DataSource = ds;

         this.DataGrid1.DataBind();

         SetPagingState();

     }

     //綁定新的頁面

private void LBtnNavigation_Click(object sender, System.EventArgs e)

     {

         LinkButton btn = (LinkButton)sender;

         switch(btn.CommandName)

         {

              case "First":

                   PageIndex = 0;

                   break;

              case "Prev":

                   PageIndex = PageIndex - 1;

                   break;

              case "Next":

                   PageIndex = PageIndex + 1;

                   break;

              case "Last":

                   PageIndex = PageCount - 1;

                   break;

         }

         DataGridDataBind();             

     }

……

}

在上面我們注意到在頁面Load事件中判斷if(!Page.IsPostBack)來防止在回傳載入的時候進行兩次綁定,因為第一次完全沒有必要,最終由LBtnNavigation_Click中的綁定決定。

假設PagingControl.ascx為上面的使用者控制項的檔案名稱,而且同Page分頁檔在同一目錄,下面是AspnetCommonPaging.aspx檔案的代碼,為了動態載入,在頁面上放了一個PlaceHolder控制項來載入先前的使用者控制項。

前台檔案如下:

<%@ Page language="c#" Codebehind="AspnetCommonPaging.aspx.cs" AutoEventWireup="false" Inherits="AspnetPaging.AspnetCommonPaging" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

  <HEAD>

                   <title>AspnetCommonPaging</title>                  

  </HEAD>

         <body>

                   <form id="Form1" method="post" runat="server">

<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>

                   </form>

         </body>

</HTML>

後台代碼檔案也比較簡單:

namespace AspnetPaging

{

     public class AspnetCommonPaging : System.Web.UI.Page

     {

         protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;

    

         private void Page_Load(object sender, System.EventArgs e)

         {

              PlaceHolder1.Controls.Add(Page.LoadControl("~/PagingControl.ascx"));

         }

 

         #region Web Form設計器產生的程式碼

         override protected void OnInit(EventArgs e)

         {

              InitializeComponent();

              base.OnInit(e);

         }

        

         /// <summary>

         /// 設計器支援所需的方法 - 不要使用代碼編輯器修改

         /// 此方法的內容。

         /// </summary>

         private void InitializeComponent()

         {   

              this.Load += new System.EventHandler(this.Page_Load);

         }

         #endregion

     }

}

 

這裡的PlaceHolder1.Controls.Add(Page.LoadControl("~/PagingControl.ascx"));就是把PagingControl使用者控制項載到當前頁面上來。如果不想用PlaceHolder,我們也可以使用其他容器控制項,只要添加到Controls集合就行了。

注意這裡如果按下面這樣處理,那面在頁面回傳的時候就會不被載入,那麼也就不會觸發分頁事件。

private void Page_Load(object sender, System.EventArgs e)

{

     if(!Page.IsPostBack)

         PlaceHolder1.Controls.Add(Page.LoadControl("~/PagingControl.ascx"));

}

現在讓我們來看看主要事件的執行順序:設定斷點,得到下面的順序。

第一次:頁面OnInit事件-->頁面Page_Load事件à控制項OnInit事件à控制項Page_Load事件。

翻頁回傳:頁面OnInit事件-->頁面Page_Load事件à控制項OnInit事件à控制項Page_Load事件à LBtnNavigation_Click翻頁事件。

如果我們把頁面載入代碼放在頁面OnInit事件:

override protected void OnInit(EventArgs e)

{

     InitializeComponent();

     PlaceHolder1.Controls.Add(Page.LoadControl("~/PagingControl.ascx"));

     base.OnInit(e);

}

那麼事件的執行順序會是什麼樣呢?

第一次:頁面OnInit事件-->控制項OnInit事件à頁面Page_Load事件à控制項Page_Load事件。

翻頁回傳:頁面OnInit事件-->控制項OnInit事件à頁面Page_Load事件à控制項Page_Load事件à LBtnNavigation_Click翻頁事件。

我認為對於多控制項的互操作,清楚事件的執行順序是很重要的,另外也有助於最佳化程式提高效能。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.