2009-07-30 204 views
1

數據綁定列表的用戶控件中的項目模板我有一個DataList象下面這樣:在代碼隱藏

<asp:DataList runat="server" ID="myDataList"> 
    <ItemTemplate> 
    <uc:MyControl ID="id1" runat="server" PublicProperty='<%# Container.DataItem %>' /> 
    </ItemTemplate> 
</asp:DataList> 

項模板是一個簡單的註冊用戶控件,MyControl。 DataList的DataSource是List<List<T>>,而MyControl的PublicProperty則通過List<T>,然後它自己執行數據綁定。這工作正常,但我對aspx/c頁面中的數據綁定有一般反感。在代碼背後設置PublicProperty值最有效的方法是什麼?

回答

3

如果在線數據綁定語法對你來說不夠好 - 你總是可以鉤入DataList的ItemDatabound事件。

<asp:DataList runat="server" ID="myDataList" 
       OnItemDataBound="DataList_ItemDataBound"> 
    <ItemTemplate> 
     <uc:MyControl ID="id1" runat="server" /> 
    </ItemTemplate> 
</asp:DataList> 

然後,在頁面/包含控件後面的代碼中,您可以添加您的ItemDataBound事件。

protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item 
      || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      DataListItem item = e.Item; 
      //List<string> or whatever your data source really is... 
      List<string> dataItem = item.DataItem as List<string>; 
      MyControl lit = (MyControl)item.FindControl("id1"); 
      lit.PropertyName = dataItem; 
     } 
    } 

有關DataList.ItemDataBound事件的詳細信息 - Read Here

如果您不想在ASPX聲明你的ItemDataBound代表在線,你也可以做到這一點在後面的代碼 - 可能是在你的頁面加載事件:

myDataList.ItemDataBound += DataList_ItemDataBound; 

希望幫助

+0

已經更新了我的代碼......是在邏輯的ItemType我 – 2009-07-30 16:57:49