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

來源:互聯網
上載者:User
asp.net|動態|分頁|載入|控制項 動態載入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.