2009-07-22 50 views
2

我有一個GridView綁定到一個複雜的存儲過程(財務數據)的窗體。這個查詢大約需要3分鐘來運行並加載gridview。用戶不耐煩,反覆點擊「搜索」,這會讓事情變得更糟。如何在數據綁定發生時顯示模態對話框?

作爲臨時解決方案,我想展示一個進度條,並使用ASP.NET AJAX ModalPopupExtender找到了一個解決方案。

這是代碼我有添加擴展到頁面:

<ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server" TargetControlID="Button1" 
    PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" /> 
<asp:Panel ID="pnlPopup" runat="server" CssClass="updateProgress" style="display: none"> 
    <div align="center" style="margin-top: 13px;"> 
     <img src="../images/progress.gif" alt="Progress" /> 
     <span class="updateProgressMessage">Loading ...</span> 
    </div> 
</asp:Panel> 

這是按鈕的單擊事件的代碼非常簡單:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    gvInvoice.DataBind(); 
} 

的問題是,當我單擊搜索按鈕,模式對話框彈出,但Databind()方法永遠不會被調用。我嘗試使用mdlPopup.Show(),但不顯示對話框,而只是運行Databind()

我錯過了什麼?如何確保模式對話框出現,數據綁定運行,然後模態對話框消失?

回答

0

它看起來像你試圖顯示進度面板(模式彈出)的整頁回傳?如果搜索行動的UpdatePanel

內完成在您的方案 mdlPopup.Show()會工作,試試這個,而不是 - 第1步,設置modalpopupextender的的TargetControlID到虛擬隱藏控制 - 第2步,添加的javascript調用顯示了modalpopup $ find('mdlPopup')。show();在回撥搜索按鈕的臨時事件之前(就像在回發之前添加驗證)

James

1

我想你在這裏需要做的是單獨顯示對話框和從數據提取的綁定。

,我可能會使用解決的方法是這樣的問題:

  1. 顯示對話框旋線程去獲取數據和。 (該線程會將數據放入會話高速緩存或數據庫上的自定義高速緩存)。
  2. 如果數據可用(可能使用對靜態頁面方法的AJAX調用),請讓客戶端輪詢服務器。
  3. 當數據可用時,隱藏對話框並執行數據綁定。

當線程啓動時,您可以添加額外的檢查/條件,以便在用戶多次搜索多次時搜索不會啓動太多的線程。即如果他們沒有改變搜索條件,那麼不要開始新的搜索,而只是繼續輪詢。

相關問題