ASP.NET编程方式创建中继器(ASP.NET create repeater programma

2019-09-26 13:40发布

我试图创建一个ASP:直放站编程,并试图绑定列时,我有一个问题。 我读过的教程是相当混乱,许多人没有得到的结合点。

我的问题是只有在绑定数据,当我处于“静止”转发写这点:

<%# DataBinder.Eval(Container.DataItem, "Name")%>

我不知道在代码隐藏工作时应该是什么,这是一个类中,所以我没有一个事件处理程序。 这是我到目前为止的代码:

Dim DsArbol As New SqlDataAdapter(query, System.Configuration.ConfigurationManager.ConnectionStrings("CNX").ConnectionString)

    Dim tablaCarpetas As New DataTable
    DsArbol.Fill(tablaCarpetas)

    Dim RepArbol As New Repeater
    RepArbol.DataSource = tablaCarpetas
    RepArbol.ID = "repArbolCarpetas"

    Dim header As New TemplateBuilder
    Dim item As New TemplateBuilder
    Dim footer As New TemplateBuilder

    header.AppendLiteralString("<ul class=""arbol-carpetas"">")
    item.AppendLiteralString(String.Format("<li id=""li_carpeta_{0}"">{1}</li>", 1, DataBinder.Eval(Container.DataItem, "Name")))
    footer.AppendLiteralString("</ul>")

    RepArbol.HeaderTemplate = header
    RepArbol.ItemTemplate = item
    RepArbol.FooterTemplate = footer

    RepArbol.DataBind()
    PanelArbolCarpetas.Controls.Add(RepArbol)

我应该怎么写,而不是DataBinder.Eval(Container.DataItem, "Name")

Answer 1:

我也不太清楚有关使用TemplateBuilder ,因为它是为消费ASP.NET框架并没有提供太多的文件。 但是,您可以尝试改变下面行

item.AppendLiteralString("<li id=\"li_carpeta_1\"><%# Eval(\"Name\") %></li>")

替代的方法是建立自己的模板控制 - 例如

public class MyTemplate : ITemplate
{
   ListItemType _type;

   public MyTemplate(ListItemType type)
   {
     _type = type;
   }

   public void InstantiateIn(Container control)
   {
      switch(_type)
      {
         case ListItemType.Header:
           control.Contorls.Add(new LiteralControl("<ul class=\"arbol-carpetas\">"));
           break;

         case ListItemType.Footer:
           control.Contorls.Add(new LiteralControl("</ul>"));
           break;

         case ListItemType.Item:
         case ListItemType.AlternatingItem:
            var c = new GenericHtmlControl("<li>");
            c.ID = "L";
            ... // add needed attributes etc.
            container.Controls.Add(c);
            // manage data binding
            container.DataBinding += (o,e) => 
              {
                 c.InnerText = DataBinder.Eval(Container, "Name"); 
              };
            break;
      }   
   }
}

    RepArbol.HeaderTemplate = new MyTemplate(ListItemType.Header);
    RepArbol.ItemTemplate = MyTemplate(ListItemType.Item);
    RepArbol.FooterTemplate = MyTemplate(ListItemType.Footer);
    RepArbol.DataBind()

免责声明 :未经测试的代码-只是给你一个想法关于动态生成模板和管理数据通过采集数据绑定事件绑定。



文章来源: ASP.NET create repeater programmatically