asp.net
  • data-binding
  • 2011-10-26 54 views 2 likes 
    2

    今天我有一個小小的ASP.Net數據綁定的樂趣,基本上我有兩個嵌套控件,以及一些對象的集合,我們希望綁定它們自己的內部集合。 。ASP.Net綁定控件內的數據綁定

    所以,說我使用的兩個中繼器這樣的 - >

    <asp:Repeater ID="Repeater1"> 
         <ItemTemplate> 
         <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "HeaderText")%>'> 
         </asp:Label> 
         <asp:Repeater ID="Repeater2"> 
          <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DetailText")%>'> 
          </asp:Label> 
         </asp:Repeater> 
         </ItemTemplate> 
        </asp:Repeater> 
    

    而且我的對象是這樣的:

    public class parent 
        { 
         public string HeaderText {get;set;} 
         public List<child> children {get;set;} 
        } 
        public class child 
        { 
         public string DetailText {get;set;} 
        } 
    

    如何綁定內中繼?我猜我需要設置&綁定aspx中某個地方的'Repeater2'的數據源作爲'parent'的'children'屬性?

    有人能指出我正確的方向嗎?

    由於

    +1

    感謝所有的答案提示 - 到底我實際設置在ASPX數據源: '的' 它看起來有訣竅 - 但如果失敗, :) – Bob

    回答

    1

    綁定在主中繼器ItemDataBound事件嵌套中繼器。

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

    在這裏你可以找到控制(FindControl),並與之結合。

    這將是這樣的:

    <asp:Repeater ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound"> 
    
    
    void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) { 
        Repeater Rep2 = e.Item.FindControl("Repeater2"); 
        Rep2.DataSource = //datasource here 
        Rep2.DataBind();   
    }  
    
    1

    你會內轉發綁定在ItemDatabound事件外中繼:

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
        Repeater innerRepeater = e.Item.FindControl("InnerRepeater1") as Repeater; 
        if (innerRepeater != null) 
        { 
         innerRepeater.DataSource = GetSomeData(); 
         innerRepeater.DataBind(); 
        } 
    } 
    

    這可能是更容易使用,如果ListViewDataList您需要使用來自外部數據綁定控件的數據來綁定內部數據綁定控件,因爲您可以指定數據鍵。

    <asp:ListView ID="ListView1" runat="server" DataKeyNames="SomeColumn" ...> 
    

    代碼隱藏:

    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) 
    { 
        ListView innerList = e.Item.FindControl("InnerList1") as ListView; 
        if (innerList != null) 
        { 
         innerList.DataSource = GetSomeData((int)ListView1.DataKeys[ListView1.Items.IndexOf(e.Item)]["SomeColumn"]); 
         innerList.DataBind(); 
        } 
    } 
    
    +0

    謝謝詹姆斯,但我實際上使用自定義控件 - 中繼器只是一個簡化的例子:) – Bob

    +0

    那麼如何改變我的答案?相同的概念仍然適用。 –

    相關問題