创建一个DataList:
DataList dl=new DataList();
然后用Page.LoadTemplate载入模板ItemTemplate.ascx:
dl.ItemTemplate = Page.LoadTemplate("ItemTemplate.ascx");
ItemTemplate.ascx的代码如下:
<table>
<tr>
<td>
<%#Eval("title") %>
</td>
</tr>
</table>然后在页面上显示:
this.form1.Controls.Add(dl);但是
报错"Eval()、XPath() 和 Bind() 这类数据绑定方法只能在页包含的控件中使用。 "我如何在不进行大的修改前提(比如只修改ItemTemplate.ascx里的东西)下解决上面这样一个问题?谢谢!

解决方案 »

  1.   

    动态添加DataList
    DataList list = new DataList();
    list.ItemTemplate = Page.LoadTemplate("A.ascx");
    list.ItemDataBound += new DataListItemEventHandler(list_ItemDataBound);
    list.DataSource = dt;
    list.DataBind();void list_ItemDataBound(object sender, DataListItemEventArgs e)
      {
      Control ctrl = e.Item.Controls[0];
      Label lbl = (Label)ctrl.FindControl("lbl");
      lbl.Text = DataBinder.Eval(e.Item.DataItem, "name").ToString();
      }class MyTemplate : ITemplate
    {
      public void InstantiateIn(Control container)
      {
      Literal lbl = new Literal();
      lbl.DataBinding += new EventHandler(lbl_DataBinding);
      container.Controls.Add(lbl);
      }
      private void lbl_DataBinding(object sender, EventArgs e)
      {
      Literal lbl = (Literal)sender;
      lbl.Text = "<a href=\"" + DataBinder.Eval(((DataListItem)lbl.NamingContainer).DataItem, "Link").ToString() + "\">" + DataBinder.Eval(((DataListItem)lbl.NamingContainer).DataItem, "Name").ToString() + "</a>";
    }
    datalist.ItemTemplate = new MyTemplate();