0
我有一個帶有2箇中繼器的頁面,每個中繼器都包含一個用戶控件。將數據綁定到中繼器,通過另一箇中繼器中的用戶控件單擊按鈕
想法是,當您單擊左側中繼器中的usercontrol上的按鈕時,將從數據庫中檢索數據並將其設置爲右側中繼器的數據源。 我使用事件冒泡將事件從用戶控件傳遞到頁面,以便我可以獲取數據並將其設置爲其他中繼器。
我的問題是,在用戶控件按鈕事件頁面的事件處理程序中設置中繼器源後,不會再次調用ItemDataBound事件處理程序。
這裏的頁面
<div id="leftDiv">
<asp:Repeater ID="rptUser" runat="server">
<ItemTemplate>
<custom:UserInfo ID="cstUserInfo" runat="server" />
<br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="rightDiv">
<asp:Repeater ID="rptMessages" runat="server">
<ItemTemplate>
<custom:MessageDetails ID="cstMessageDetails" runat="server" />
</ItemTemplate>
</asp:Repeater>
</div>
的佈局,這裏的用戶控件按鈕單擊事件的事件處理程序。
private void cstUserInfo_ShowMessagesClicked(object sender, EventArgs e)
{
UserInfoControl userInfoControl = sender as UserInfoControl;
//Get the messages
messageManager = new MessageManager();
List<Messages> messages = messageManager.GetMessageDetailsByUserId(userInfoControl.CurrentUser.Id).ToList();
rptTimeline.DataSource = messages;
rptTimeline.ItemDataBound += new RepeaterItemEventHandler(rptMessages_ItemDataBound);
rptTimeline.DataBind();
}
當我點擊用戶控件將出現以下情況的按鈕:
- 的頁面執行,這臺第二中繼
- 的的ItemDataBound處理程序中繼器的默認源的Page_Load執行該操作,用數據設置用戶控件的屬性
- 用戶控件的Page_Load執行該控件,該控件使用其屬性值在用戶控件上設置標籤。
- 事件處理程序cstUserInfo_ShowMessagesClicked,設置一個新的數據源的中繼器執行
- 用戶控制的Page_Load中再次執行,並因爲屬性沒有被設定
拋出一個異常,有沒有綁定任何方式當第一個轉發器中的用戶控制按鈕被按下時,新的數據被傳送到第二個轉發器?
我剛剛測試過它,它的工作原理。 ItemCreated事件在用戶控件的頁面加載之前觸發,而ItemDatabound在之後觸發。我會閱讀這兩者之間的區別,謝謝! – Freek 2011-04-21 10:57:08