我的 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,但列表数据源有多个项目。
答案 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中设置,没有您的任何进一步工作。