我有一个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);
}
我理解我的问题了吗?我只是在做无序的事情吗?
答案 0 :(得分:0)
您只需要知道您可能正在重新加载页面,并且您可能会尝试使用
if(!IsPostBack)
在Page_Load(object sender, EventArgs e)
答案 1 :(得分:0)
“<%# %>
”语法告诉编译器在控件的DataBinding
事件期间运行相关代码 - 但需要在DataSource
事件之前设置DataBinding
有效。
解决此问题的一种方法可能是在DataBind
事件运行后执行与绑定相关的处理,例如在PreRender
中。