国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

動態加載Asp.net分頁控件

2024-07-10 12:56:44
字體:
來源:轉載
供稿:網友

動態加載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 窗體設計器生成的代碼

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翻頁事件。

我認為對于多控件的互操作,清楚事件的執行順序是很重要的,另外也有助于優化程序提高性能。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长海县| 黔西| 谢通门县| 和静县| 东宁县| 昌图县| 万宁市| 乌拉特中旗| 新营市| 从化市| 南和县| 广西| 固阳县| 绥滨县| 法库县| 太谷县| 曲水县| 榆林市| 雅安市| 康平县| 南康市| 米脂县| 博湖县| 营口市| 洛隆县| 垣曲县| 彰化县| 平阳县| 手机| 观塘区| 承德市| 龙陵县| 双牌县| 呼伦贝尔市| 根河市| 博野县| 姜堰市| 八宿县| 阳朔县| 新津县| 盐津县|