模板不必在设计时进行分配。在某些情况下,可能能够在设计时布局模板,但是知道在运行时所做的更改非常广泛,以至于在运行时加载新的模板反而可简化编程。在其他情况下,可能有几个可能的模板,但要在运行时更改模板。
策略之一是创建其中带有基本模板布局的模板文件,即模板定义文件。若要在运行时加载模板,请使用 Page.LoadTemplate 方法。此方法从文件中读取模板定义,并创建 ITemplate 接口对象。然后可将此对象分配到 DataList 中的任何模板。
创建模板定义文件
- 在“项目”菜单上单击“添加新项”。
- 在“添加新项”对话框中,选择“文本文件”。将该文件命名为带有“.ascx”扩展名。
- 将模板定义语句添加到该模板文件中,然后保存它。
下面列出的内容创建一个模板,它显示字符串“Name:”,后面跟有绑定到 DataList 的数据源的“LastName”字段。
<!-- Visual Basic --> <%@ Language = "VB" %> Name: <b> <%# DataBinder.Eval(Container, "DataItem.LastName") %> </b> <!-- Visual C# --> <%@ Language = "C#" %> Name: <b> <%# DataBinder.Eval(Container, "DataItem.LastName") %> </b>
动态创建模板
- 向 Web 窗体页中添加代码以使用 Page.LoadTemplate 方法加载模板。
以下代码使用 Page_Load 事件处理程序来加载按上述过程创建的名称为 NewTemplate.ascx 的模板。
' Visual Basic Private Function CreateDataSource() As DataTable Dim dt As DataTable = New DataTable() dt.Columns.Add("LastName", Type.GetType("System.String")) dt.Rows.Add(New Object() {"Smith"}) dt.Rows.Add(New Object() {"Jones"}) dt.Rows.Add(New Object() {"Clark"}) Return dt End Function Protected Sub Page_Init(ByVal Sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Init InitializeComponent() If (Not Page.IsPostBack) Then DataList1.AlternatingItemTemplate = _ Page.LoadTemplate("NewTemplate.ascx") End If End Sub Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If (Not Page.IsPostBack) Then DataList1.DataSource = CreateDataSource() DataList1.DataBind() End If End Sub // C# private DataTable CreateDataSource() { DataTable dt = new DataTable(); dt.Columns.Add("LastName", Type.GetType("System.String")); dt.Rows.Add(new object[] {"Smith"}); dt.Rows.Add(new object[] {"Jones"}); dt.Rows.Add(new object[] {"Clark"}); return dt; } private void Page_Init(object sender, EventArgs e) { InitializeComponent(); DataList1.AlternatingItemTemplate = Page.LoadTemplate("NewTemplate.ascx"); } private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if (!Page.IsPostBack) { DataList1.DataSource = CreateDataSource(); DataList1.DataBind(); } }
浙公网安备 33010602011771号