2009-07-30 144 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