通过ListView绑定时,Child UserControl缺少数据源

时间:2011-12-16 22:44:21

标签: asp.net

我有一个UserControl,它将一个类对象作为属性“DataSource”。在DataBind上,我将该对象的属性应用于控件 - TextBox,RadioButton等 - 在UserControl中。

当我在页面上设置UC,绑定并转到时,这非常有用。

现在,我试图在ListView的 ItemTemplate 中使用此控件,如此;

<ItemTemplate><uc1:MyItem ID="MyItem1" runat="server" DataSource='<%# Container.DataItem %>' /></ItemTemplate>

并绑定到这些对象的数组。数组已填充,但我正在使用DataSource = null到达UC的DataBind方法。我错过了什么吗?

编辑:假期使我远离这个。

所以,显然我打电话给base.DataBind()太晚了。我的LoadForm(DataSource)方法将对象加载到base.DataBind()之前的表单字段中。交换它们使我可以毫无问题地访问DataSource。

public override void DataBind()
{
  base.DataBind();
  LoadForm(DataSource);
}

我理解我的问题了吗?我只是在做无序的事情吗?

2 个答案:

答案 0 :(得分:0)

您只需要知道您可能正在重新加载页面,并且您可能会尝试使用

if(!IsPostBack) 

Page_Load(object sender, EventArgs e)

答案 1 :(得分:0)

<%# %>”语法告诉编译器在控件的DataBinding事件期间运行相关代码 - 但需要在DataSource事件之前设置DataBinding有效。

解决此问题的一种方法可能是在DataBind事件运行后执行与绑定相关的处理,例如在PreRender中。