2010-07-23 53 views
0

所以我在UpdatePanel中有一個ListView(assignmentsListView),它被同一個UpdatePanel中的DropDownList過濾。 DropDownList有一個人員列表並使用自動回送,ListView顯示這些人員分配給的任務。ListView DataBound說實際上Item = 0時Item = 0

我想使用類似下面的代碼:

protected void assignmentsListView_DataBound(object sender, EventArgs e) 
{ 
    string resFirstName = Utilities.getResourceFirstName(resDdl.SelectedValue); 
    if (assignmentsListView.Items.Count <= 0) 
    { 
     //Show error message 
    } 
    else 
    { 
     //Try to find the ImageButton in the ListView's header template. 
     ImageButton exportButton = (ImageButton)assignmentsListView.FindControl("ImageButton3"); 

     //Register this button as a PostBack event in the Master Page 
     ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
     ScriptManager.RegisterPostBackControl(exportButton); 
    } 

} 

當我第一次加載頁面,將DropDownList顯示在列表中的第一人,並ListView中正確顯示,人的任務。

如果我然後選擇一個我知道有零任務的人,我在RegisterPostBackControl()方法中得到一個錯誤,說傳入的控件不能爲空。

調試時,在RegisterPostBackControl方法中,它顯示ListView Items集合中包含> 0個元素(元素數與當前人選之前匹配的人數)。

發生了什麼事?有什麼建議麼?

回答

0

在Asp.Net Web窗體應用程序中,事件的順序並不總是您想要的。對於您的情況,新人選擇可能在執行此方法後應用。您可以做的最好的事情是在早期事件中強制數據綁定(如Page_Init)

+0

如果這是真的,那麼需要重新定義DataBound:「此事件通知服務器控件*爲其編寫的任何數據綁定邏輯已完成*。「 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound.aspx – 2010-07-23 18:26:06

+0

可能是這種情況,此事件被觸發兩次。由於我們無法訪問Form類的其餘部分,因此我可以給出的最佳建議是在每個事件處理程序方法中設置斷點,並遵循事件的實際進度。 – sukru 2010-07-24 00:44:49