.NEt专家博客!

ASP.NET中实现模版的动态加载

上一篇 / 下一篇  2008-12-12 14:46:35 / 个人分类:WEB开发

ASP.NET中,经常会使用到templates(模版)功能,比如在datagrid,datalist,repeater等控件中,使用templates,将会大大增强其功能。以往,我们一般是在设计程序时,就已经设置好控件中的模版是怎样的了。但是,有的时候,可能我们需要动态加载模版,比如,当你要求你的应用程序的界面风格随着用户的需求而变化时,你就需要到动态加载模版的功能了。但要注意的是,并不是所有的web控件都支持模版功能,而且要注意,哪些控件支持模版的哪些功能,下面简单列出了一些支持模版功能的控件:ITPUB个人空间*T,Lc h J0Mp8X+? V^
Repeater控件,支持的模版有:
C;~@gI\a V)y0HeaderTemplate, FooterTemplate, ItemTemplate, AlternatingItemTemplate, SeperatorTemplate.ITPUB个人空间1kt`A){w
Datelist控件,支持的模版有:
MRb7y\"c0HeaderTemplate, FooterTemplate, ItemTemplate, AlternatingItemTemplate, SeparatorTemplate, SelectedItemTemplate, EditItemTemplate.ITPUB个人空间J8]0H"o_ H?
Datagrid控件,支持的模版有:ITPUB个人空间,S|e \Q O6}0A
HeaderTemplate, FooterTemplate, ItemTemplate, EditItemTemplate, Pager.
vF4rx-f"\i:v9~0下面,我将以动态加载datalist控件的模版来说明如何动态加载模版:
7\Y&f!|C&SIb-m0首先来了解动态加载模版的原理。在.NET中,有templatecontrol类,这个类是page和usercontrol类的基类。它也同时定义了page和usercontrol类的基本功能。该类提供了两个方法:loadcontrol和loadtemplate。Loadcontrol方法装载来自外部文件的控件,并且返回usercontrol类对象。而loadtemplate方法加载来自外部文件的模版并且返回的是Itemplate对象。
eJ2e;Hl fnU0Loadtemplate方法中,只有一个参数,参数值是外部模版文件的路径,并且返回itemplate对象。而datalist控件提供了一系列的属性,可以设置各种模版的属性,包括有AlternatingItemTemplate, EditItemTemplate, FooterTemplate, HeaderTemplate, ItemTemplate, SelectedItemTemplate, 和 SeperatorTemplate,在下文中,将会看到相关介绍。ITPUB个人空间P/e#Fi;g\:C N
接着,我们开始介绍例子,在示例程序中,是使用动态创建数据表和数据列的,并且将数据的创建封装到一个Db类中,好让读者进一步回顾如何动态创建数据表,数据列等,并没用从数据库中提取(当然,你也可以用传统的读取数据库的方法),public class DB{
dr?"|sg#u;h3j0public DB()
_cR0u6k]B0{ }
^ N$wI[ j A0/// <summary>ITPUB个人空间:qIA-G B
/// Method returns a DataSet object filled with data
%@eaXp2E(tZ1M0/// </summary>ITPUB个人空间*G%^;eO`+]6R
public static DataSet GetDataSet()
VD3|O%A7t]X0{ITPUB个人空间LBQ$Pw
//创建dataset和datatable
@[y*[.v O h%M0DataSet ds = new DataSet();ITPUB个人空间0?4l&^ H8FH&|
DataTable table = new DataTable("Records");ITPUB个人空间2d(nUW Fd;w+FU
DataColumn col;
KJ_}epZ0//增加一个列
s-o3U+Yw0col = new DataColumn();ITPUB个人空间3}S&J&]o iKbs(H7D
col.DataType = System.Type.GetType("System.Int32");ITPUB个人空间l4J8d7O'eix_
col.ColumnName = "ID";ITPUB个人空间8k(mi;[?r-Wkmi
col.ReadOnly = true;
CDaf,M~L0col.Unique = true;ITPUB个人空间Xi5Zxs;a6k[9s
table.Columns.Add(col);ITPUB个人空间K'bjh3PG7i3b/Y
col = new DataColumn();ITPUB个人空间J!I;D |%i]3@+W
col.DataType = System.Type.GetType("System.String");
!ZX|+J|&zJ"f0col.ColumnName = "Name";
JG!\fi:R6|6] A:N0col.AutoIncrement = false;
v$]'kkp%h0col.Caption = "Name";
"X4S%C7F T.W8h:G(w&C+N)k6Y0col.ReadOnly = false;
'Z9A/wuX \#y0col.Unique = false;
M'\s.U7z sK0table.Columns.Add(col);
1Z0^&`&NON0col = new DataColumn();ITPUB个人空间 L^ a%MR2q^h!k4Mt s
col.DataType = System.Type.GetType("System.String");
,n D3_}3|6K0col.ColumnName = "Address";ITPUB个人空间s~$z gQ|/~-B%x1q0uv
col.AutoIncrement = false;ITPUB个人空间 @ q2YMDdn
col.Caption = "Address";
h[a:o@S X0col.ReadOnly = false;ITPUB个人空间$]r!Z_!K;C
col.Unique = false;
&C2Gf\sjC9Q0table.Columns.Add(col);ITPUB个人空间Kg,Hgwv ]
//增加一条记录
"s6H2?$v]0i0DataRow row = table.NewRow();
B*j"Z$L"T7c C0row["ID"] = 1001;
w3P:sp5v0row["Name"] = "Melanie Giard";ITPUB个人空间)Q KpB-~
row["Address"] = "23rd Street, Park Road, NY City, NY";ITPUB个人空间h;zp:Ux TMF7U
table.Rows.Add(row);
(g JL3gZW!]0row = table.NewRow();
4m Q5z(k,o5F+h0row["ID"] = 1002;
g,o6d-Ka&YhI?0row["Name"] = "Puneet Nehra";ITPUB个人空间2ev$Ts L
row["Address"] = "3rd Blvd, Ashok Vihar, New Delhi";ITPUB个人空间-MG)mY~ c7i:^}(O
table.Rows.Add(row);ITPUB个人空间&ej}3k"QCe'R
row = table.NewRow();ITPUB个人空间LOG ^F5}-z
row["ID"] = 1003;ITPUB个人空间#P$C.@B[]S!qBb*Q]l
row["Name"] = "Raj Mehta";
'n!uI f%Yi0row["Address"] = "Nagrath Chowk, Jabalpur";
^Y.{N V`J)V(e0table.Rows.Add(row);ITPUB个人空间pD-u Wi
row = table.NewRow();
m1DeZfR1E(]Mc'w0row["ID"] = 1004;ITPUB个人空间;oZ&fH3hX
row["Name"] = "Max Muller";
ln7?8ky&i/A0row["Address"] = "25 North Street, Hernigton, Russia";ITPUB个人空间 @ I$hyFNRp
table.Rows.Add(row);ITPUB个人空间7[E ~&N}fV:[/om9n
// Add DataTable to DataSet
r/jc6@[ j a0ds.Tables.Add(table);
A)RKBAw1m0// Return DataSetITPUB个人空间4cHgGGg E
return ds;
t&GA+B-G i0}}ITPUB个人空间)b:T"x X'cx
接下来,我们首先创建若干个模版文件。我们先创建两组模版文件,每一组模版文件分别包含有header,footer,item,alternating item四个模版文件,保存成.ascx文件,这样,我们就有两类型风格的模版了,每类型风格的模版中都有自己的header,footer,item,alternating item子模版。下面为其中一个item模版文件,其他的类似。ITPUB个人空间2h p(Z?"x\
<%@ Control Language="VB" %>ITPUB个人空间.C8od7a!HT5W:IY
<FONT face="verdana" color="green" size="2"><b>ID: </b>ITPUB个人空间c!{v@#A`1W
<%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "ID") %>ITPUB个人空间/^-Y)eq$x:pF/Z8S
<b>Name: </b>
._&J:a?X0<%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "Name") %>ITPUB个人空间(K O!r*rd_{/[
<br>
8Z,?.e(e"gi+E$I0<b>Address: </b>
7S9q*_1\[#[+o%N A0<%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "Address") %>
W7y;k[:`X*Y$`~0<p>
-y-_"VeX(H Y~0</FONT>
.w e h:gnI2R0最后,我们开始创建应用程序,新建一个工程,添加两个按钮和一个datalist控件如下图:
&u z'k,i|*]#R)f0
图1

)Y$cMw,jDX)v0之后创建一个binddatagrid的方法,将dataset绑定到datalist控件中去,代码如下:
3J _!yN2V]wQ0private void BindDataGrid(){
J4{}VPU'qV0dtSet = DB.GetDataSet();
|q:Q2P fe1Y0DataList1.DataSource = dtSet.Tables[0].DefaultView;
iFZ i kC0DataList1.DataBind();}private void Page_Load(object sender, System.EventArgs e){
?2C8Z/\;cJA:n0if(!IsPostBack)
nV1tzBC.T:L0{
jW%Q,w-g9AJ9]5s0BindDataGrid();ITPUB个人空间!iU&t#_+R5r
}}ITPUB个人空间Rz*G"@"_UN!su+X'QC
最后,分别为两个按钮的clcik事件添加代码,分别使用page.loadtemplate方法去加载我们已经写好的两套模版组中的模版,代码如下:ITPUB个人空间'?Z4MyY'U/B
private void Button1_Click(object sender, System.EventArgs e){
u.ejR'V0// Load templates
:DOBu&fS.m0DataList1.AlternatingItemTemplate =
3IF3JT(l:Qnhq"c0Page.LoadTemplate("AltItemTempate.ascx");ITPUB个人空间/Ut#w%TB0s"W
DataList1.ItemTemplate =Page.LoadTemplate("ItemTemplate.ascx");
@{.bp*R8Im3n [3@0DataList1.HeaderTemplate =Page.LoadTemplate("HeadTemplate.ascx");
~wNgSu"[+j0DataList1.FooterTemplate = Page.LoadTemplate("FootTemplate.ascx");ITPUB个人空间-D_!Y wM)C
BindDataGrid();}private void Button2_Click(object sender, System.EventArgs e){ITPUB个人空间~ww`d5U(rR
// Load templates
`V)Y&j PRW0DataList1.AlternatingItemTemplate =Page.LoadTemplate("AltItemTempate2.ascx");ITPUB个人空间B&PL HT"lg9n:ob
DataList1.ItemTemplate = Page.LoadTemplate("ItemTemplate2.ascx");
iDi+J)Vgq#j0DataList1.HeaderTemplate = Page.LoadTemplate("HeadTemplate2.ascx");
^u)R$W#Dd/g0DataList1.FooterTemplate = Page.LoadTemplate("FootTemplate2.ascx");
q,J!gJ1b w:f0BindDataGrid();}

TAG: 微软

引用 删除 dicwhyybasa   /   2011-10-21 21:13:45
13IdZl , [url=http://ytuvfvvpszpd.com/]ytuvfvvpszpd[/url], [link=http://dyquwrmsaxea.com/]dyquwrmsaxea[/link], http://vzfcgygpsvdi.com/
引用 删除 keftrhztxho   /   2011-10-20 15:21:27
dLbgyA  <a href="http://hazshddjdrlh.com/">hazshddjdrlh</a>
引用 删除 Deon   /   2011-10-19 14:39:05
Unbelievable how well-written and ionfrmative this was.
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2012-02-09  
   1234
567891011
12131415161718
19202122232425
26272829   

数据统计

  • 访问量: 665112
  • 日志数: 3733
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2010-12-31

RSS订阅

Open Toolbar