2011-10-17 69 views
0

我已經爲轉發器設置了作爲數據源的項目列表,並創建了自定義模板。有什麼方法可以直接訪問模板中的當前綁定項目嗎? 示例代碼下面從asp.net中的模板訪問綁定的轉發器項目

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

代碼在我的Page_Load

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

模板

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 。這個鏈接可能會幫助你: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類型。在這種情況下,最好的誘餌是使用DataBinder - 例如,

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"); 

    ... 
} 
相關問題