2011-10-17 2 views
0

리피터의 데이터 소스로 항목 목록을 설정하고 사용자 지정 템플릿을 만들었습니다. 템플릿의 현재 바인딩 된 항목에 직접 액세스 할 수있는 방법이 있습니까? 내를 Page_Loadasp.net의 템플릿에서 바운드 리피터 항목에 액세스

List<MyObject> selections = new List<MyObject>(); 
        selections.Add(new MyObject()); 
        Repeater1.ItemTemplate = new MyObjectTemplate(); 
        Repeater1.DataSource = selections; 
        Repeater1.DataBind(); 

템플릿에서

class MyObject 
{ 
public string Somevalue{get;set;} 
} 

코드 아래 예제 코드

public class MyObjectTemplate : ITemplate 
{ 
    public void InstantiateIn(Control container) 
    { 
     //Get the current item 
     MyObject o = ????? as MyObject; 

     string txt = "<h1>"+ o.Somevalue + "</h1>"; 
     LiteralControl h1 = new 
      LiteralControl(txt); 
     container.Controls.Add(h1); 

    } 
} 

내가 알고 난 그냥 거기 중계기에 "someValue와"의 값을 표시하고 싶었다면 이것을 달성하는 더 쉬운 방법 일 것이지만, 표시 할 가치와 더 복잡한 방법의 실제 논리.

+0

'InstantiateIn' 실제로 따라서가 아니라, 항목을 다시 리피터가 (포스트 백에) 데이터 바인딩되지 않은 경우에도 호출됩니다있는 DataItem을 -이 경우, 가장 좋은 미끼는 DataBinder를 사용하는 것 . 이 링크는 다음과 같이 도움이 될 수 있습니다. http://community.devexpress.com/forums/t/70674.aspx –

답변

0

컨테이너에서 DataItem을 사용해야합니다. 예를 들어,이 방법

public void InstantiateIn(Control container) 
{ 
    //Get the current item 
    MyObject o = ((IDataItemContainer)container).DataItem as MyObject; 

    ... 
} 

만 문제는 제어 상태를 유지하기 후 뒷면에있는 뷰 상태에 의존하는 경우 다음 데이터 항목 유형 MyObject로하지 않을 것입니다. 예를 들어,

public void InstantiateIn(Control container) 
{ 
    // Get SomeValue property value 
    var val1 = DataBinder.Eval(container, "SomeValue"); 

    // Get value2 property value 
    var val1 = DataBinder.Eval(container, "Value2"); 

    ... 
} 
관련 문제