2012-01-01 5 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>") 

대체 방법으로 선 아래 변경하려고 할 수 있습니다 당신의 자신의 템플릿 컨트롤을 구축하는 것입니다 - 예를

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 클래스를 구현하는 것입니다. 고맙습니다 –

관련 문제