ASPNET中经常会使用到templates(模版)功能比如在datagriddatalistrepeater等控件中使用templates将会大大增强其功能以往我们一般是在设计程序时就已经设置好控件中的模版是怎样的了但是有的时候可能我们需要动态加载模版比如当你要求你的应用程序的界面风格随着用户的需求而变化时你就需要到动态加载模版的功能了但要注意的是并不是所有的web控件都支持模版功能而且要注意哪些控件支持模版的哪些功能下面简单列出了一些支持模版功能的控件
Repeater控件支持的模版有
HeaderTemplate FooterTemplate ItemTemplate AlternatingItemTemplate SeperatorTemplate
Datelist控件支持的模版有
HeaderTemplate FooterTemplate ItemTemplate AlternatingItemTemplate SeparatorTemplate SelectedItemTemplate EditItemTemplate
Datagrid控件支持的模版有
HeaderTemplate FooterTemplate ItemTemplate EditItemTemplate Pager
下面我将以动态加载datalist控件的模版来说明如何动态加载模版
首先来了解动态加载模版的原理在NET中有templatecontrol类这个类是page和usercontrol类的基类它也同时定义了page和usercontrol类的基本功能该类提供了两个方法loadcontrol和loadtemplateLoadcontrol方法装载来自外部文件的控件并且返回usercontrol类对象而loadtemplate方法加载来自外部文件的模版并且返回的是Itemplate对象
Loadtemplate方法中只有一个参数参数值是外部模版文件的路径并且返回itemplate对象而datalist控件提供了一系列的属性可以设置各种模版的属性包括有AlternatingItemTemplate EditItemTemplate FooterTemplate HeaderTemplate ItemTemplate SelectedItemTemplate 和 SeperatorTemplate在下文中将会看到相关介绍
接着我们开始介绍例子在示例程序中是使用动态创建数据表和数据列的并且将数据的创建封装到一个Db类中好让读者进一步回顾如何动态创建数据表
数据列等并没用从数据库中提取(当然你也可以用传统的读取数据库的方法)
public class DB{
public DB()
{ }
/// <summary>
/// Method returns a DataSet object filled with data
/// </summary>
public static DataSet GetDataSet()
{
//创建dataset和datatable
DataSet ds = new DataSet();
DataTable table = new DataTable(Records);
DataColumn col;
//增加一个列
col = new DataColumn();
colDataType = SystemTypeGetType(SystemInt);
colColumnName = ID;
colReadOnly = true;
colUnique = true;
tableColumnsAdd(col);
col = new DataColumn();
colDataType = SystemTypeGetType(SystemString);
colColumnName = Name;
colAutoIncrement = false;
colCaption = Name;
colReadOnly = false;
colUnique = false;
tableColumnsAdd(col);
col = new DataColumn();
colDataType = SystemTypeGetType(SystemString);
colColumnName = Address;
colAutoIncrement = false;
colCaption = Address;
colReadOnly = false;
colUnique = false;
tableColumnsAdd(col);
//增加一条记录
DataRow row = tableNewRow();
row[ID] = ;
row[Name] = Melanie Giard;
row[Address] = rd Street Park Road NY City NY;
tableRowsAdd(row);
row = tableNewRow();
row[ID] = ;
row[Name] = Puneet Nehra;
row[Address] = rd Blvd Ashok Vihar New Delhi;
tableRowsAdd(row);
row = tableNewRow();
row[ID] = ;
row[Name] = Raj Mehta;
row[Address] = Nagrath Chowk Jabalpur;
tableRowsAdd(row);
row = tableNewRow();
row[ID] = ;
row[Name] = Max Muller;
row[Address] = North Street Hernigton Russia;
tableRowsAdd(row);
// Add DataTable to DataSet
dsTablesAdd(table);
// Return DataSet
return ds;
}}
接下来我们首先创建若干个模版文件我们先创建两组模版文件每一组模版文件分别包含有headerfooteritemalternating item四个模版文件保存成ascx文件这样我们就有两类型风格的模版了每类型风格的模版中都有自己的headerfooteritemalternating item子模版下面为其中一个item模版文件其他的类似
<%@ Control Language=VB %>
<FONT face=verdana color=green size=><b>ID: </b>
<%# DataBinderEval(CType(Container DataListItem)DataItem ID) %>
<b>Name: </b>
<%# DataBinderEval(CType(Container DataListItem)DataItem Name) %>
<br>
<b>Address: </b>
<%# DataBinderEval(CType(Container DataListItem)DataItem Address) %>
<p>
</FONT>
最后我们开始创建应用程序新建一个工程添加两个按钮和一个datalist控件如下图
)this
style
width=
;
twffan=
done
>图
之后创建一个binddatagrid的方法将dataset绑定到datalist控件中去代码如下
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
private void BindDataGrid(){
dtSet = DBGetDataSet();
DataListDataSource = dtSetTables[]DefaultView;
DataListDataBind();}private void Page_Load(object sender SystemEventArgs e){
if(!IsPostBack)
{
BindDataGrid();
}}
最后分别为两个按钮的clcik事件添加代码分别使用pageloadtemplate方法去加载我们已经写好的两套模版组中的模版代码如下
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
private void Button_Click(object sender SystemEventArgs e){
// Load templates
DataListAlternatingItemTemplate =
PageLoadTemplate(AltItemTempateascx);
DataListItemTemplate =PageLoadTemplate(ItemTemplateascx);
DataListHeaderTemplate =PageLoadTemplate(HeadTemplateascx);
DataListFooterTemplate = PageLoadTemplate(FootTemplateascx);
BindDataGrid();}private void Button_Click(object sender SystemEventArgs e){
// Load templates
DataListAlternatingItemTemplate =PageLoadTemplate(AltItemTempateascx);
DataListItemTemplate = PageLoadTemplate(ItemTemplateascx);
DataListHeaderTemplate = PageLoadTemplate(HeadTemplateascx);
DataListFooterTemplate = PageLoadTemplate(FootTemplateascx);
BindDataGrid();}