2011-12-16 47 views
1

我有一個UserControl,它將一個類對象作爲屬性「DataSource」。在DataBind上,我將該對象的屬性應用於UserControl內的控件 - TextBox,RadioButton等。通過ListView綁定時,子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

你是否用asp:Repeater代替了同樣的東西? – 2011-12-28 10:50:19

回答

0

的「<%# %>」語法告訴編譯器來運行在控件的DataBinding事件期間關聯代碼 - 但DataSource需要在DataBinding事件之前設置纔有效。

解決此問題的一種方法可能是在DataBind事件運行後執行與綁定相關的處理,例如在PreRender中。

0

你一定要知道,你可能會被重新加載頁面,你可以嘗試使用

if(!IsPostBack) 

Page_Load(object sender, EventArgs e)