将对象列表绑定到带有UserControl的ListView,问题

时间:2011-09-26 11:09:37

标签: c# asp.net listview user-controls

我的 ListView 包含 UserControl ,其中包含 MyType 类型的公共属性 MyPublicProperty

public MyType MyPublicProperty{ get; set; }

我将ListView绑定到 MyType

的项目列表
listView.DataSource = (List<MyType>) items;
listView.DataBind();

在aspx中,我的ListView定义如下

<asp:ListView ID="listView" runat="server">
    <ItemTemplate>
        <uc1:MyControl ID="myControl" runat="server" MyPublicProperty="<%#(MyType)Container.DataItem %>" />
    </ItemTemplate>
</asp:ListView>

现在发生的事情是MyControl MyPublicProperty 未在onDataBinding事件中设置,也没有在事件之后设置。

你碰巧知道为什么,并为此解决? 修改 仔细研究我观察到的问题

listView.Items[0].DataItem 
调用 listView.DataBind()后,

为null,但列表数据源有多个项目。

1 个答案:

答案 0 :(得分:1)

如果要在绑定数据后访问数据,则应使用 ItemDataBound 事件,该事件将针对每个数据项进行调用:

listView.ItemDataBound += new EventHandler<ListViewItemEventArgs>(listView_ItemDataBound);

然后:

private void listView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        MyType data = (MyType)((ListViewDataItem)e.Item).DataItem;

        // Use your data...
    }
}

你想要达到的目标是什么?现在您拥有代码的方式,数据将在UserControl中设置,没有您的任何进一步工作。