2012-01-01 4 views
1

Я пытаюсь создать ASP: Repeater программно, и у меня есть проблема при попытке привязки столбцов. Учебники, которые я прочитал, довольно сбивают с толку, и многие из них не доходят до привязки.ASP.NET создает ретранслятор программно

Моя проблема заключается только в точке привязки данных, когда я пишу это в «статическом» ретранслятора:

<%# 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")?

+0

Во-первых, вы должны назначить данные tablaCarpetas; А затем отделите код .cs и код .aspx. Шаблон заголовка, нижнего колонтитула и элемента должен использоваться в коде .aspx. –

ответ

5

Я не слишком уверен в использовании TemplateBuilder, поскольку он предназначен для использования в инфраструктуре ASP.NET, и документации по документации недостаточно. Тем не менее, вы можете попробовать изменить ниже линии, как

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

The альтернативный способ это создать свой собственный контроль шаблон - например

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() 

Отказ от ответственности: Непроверенные код - просто чтобы дать вам представление о том, построение шаблона динамически и управление привязкой данных путем захвата события привязки данных.

+0

Это было, по-видимому, единственный способ программно программировать элементы шаблонов - это реализовать класс ITemplate. спасибо –

Смежные вопросы