1

我有一个如下的数据列表:

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

项目模板只是一个注册的用户控件,MyControl。DataList 的 DataSource 是 aList<List<T>>并且 MyControl 的 PublicProperty 被传递List<T>,然后它在其上执行自己的数据绑定。这很好用,但我对 aspx/c 页面中的数据绑定有普遍的反感。在后面的代码中设置 PublicProperty 值的最有效方法是什么?

4

1 回答 1

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 事件的更多信息 -阅读此处

如果您不想在 ASPX 中内联声明您的 ItemDataBound 委托,您也可以在后面的代码中执行它 - 可能在您的 Page Load 事件中:

myDataList.ItemDataBound += DataList_ItemDataBound;

希望有帮助

于 2009-07-30T16:25:38.180 回答