2014-02-12 30 views
1

我發現了一個很好的例子,用於阻止我的網頁的一部分here如何在點擊保存按鈕時屏蔽我的網格?

但我一直在嘗試幾個小時,以適應我的UserControl這個例子,但沒有任何進展。可能是因爲我對JQuery和ASP.Net還不是很熟悉。例如。我不明白什麼prm.add_beginRequestprm.add_endRequest做什麼,以及這個PageRequestManager是什麼。

所以我想在這裏請教專家,如果你能解決我的問題:

我有一個ASP.Net用戶控件上有一個網格(Telerik的radgrid控件)。在頂部,我有一個保存按鈕('btnSave')。當按鈕被點擊時,服務器將把數據保存到文件中。到現在爲止還挺好。但同時我想用這個例子中的漂亮欄阻止這個網格。

有人可以告訴我如何調整我的UserControl,以便網格(和按鈕)被阻塞,直到服務器準備好了嗎?

這是我ExcelGrid.ascx文件至今:

<%@ Control Language="C#" AutoEventWireup="True" Codebehind="ExcelGrid.ascx.cs" className="ExcelGrid" Inherits="WebResourceEditor.UI.Main.RightContent.ExcelGrid" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<link href="/Styles/Styles.css" rel="Stylesheet" /> 
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> 
    <script type="text/javascript"> 
     var radGridId = "<%=mainDataGrid.ClientID %>"; 
    </script> 
</telerik:RadCodeBlock> 
<style type="text/css"> 
    html body span .rinSingle .riTextBox .RadInput .RadInput_Default 
    { 
     width: 100% !important; 
    } 
</style> 
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" /> 
<script src="/Scripts/script.js" type="text/javascript"></script> 
<script src = "/Scripts/jquery.blockUI.js" type = "text/javascript"></script> 
<telerik:RadScriptBlock runat="server" ID="RadScriptBlock2"> 
    <script type="text/javascript"> 

     function RowContextMenu(sender, eventArgs) { 
      var menu = window.$find("<%=RadMenu1.ClientID %>"); 
      var evt = eventArgs.get_domEvent(); 
      var index = eventArgs.get_gridDataItem().get_element().id.split("__")[1]; 
      document.getElementById("<%=radGridClickedRowIndex.ClientID %>").value = index; 
      sender.get_masterTableView().selectItem(sender.get_masterTableView().get_dataItems()[index].get_element(), true); 
      menu.show(evt); 
      evt.cancelBubble = true; 
      evt.returnValue = false; 
      if (evt.stopPropagation) { 
       evt.stopPropagation(); 
       evt.preventDefault(); 
      } 
     } 

     function GridCreated(sender, args) { 
      var scrollArea = sender.GridDataDiv; 
      var parent = window.$get("gridContainer"); 
      var gridLabel = window.$get("gridLabel"); 
      var gridMenuBar = window.$get("gridMenuBar"); 
      var gridHeader = sender.GridHeaderDiv; 
      scrollArea.style.height = parent.clientHeight - gridHeader.scrollHeight 
       - gridMenuBar.scrollHeight - gridLabel.scrollHeight - 1 + "px"; 
     } 

     function BlockUI(elementID) { 
      var prm = Sys.WebForms.PageRequestManager.getInstance(); 
      prm.add_beginRequest(function() { 
       $("#" + elementID).block({ message: '<table align = "center"><tr><td>' + 
         '<img src="/Images/loadingAnim.gif"/></td></tr></table>', 
        css: {}, 
        overlayCSS: { backgroundColor: '#000000', opacity: 0.6, border: '3px solid #63B2EB' 
        } 
       }); 
      }); 
      prm.add_endRequest(function() { 
       $("#" + elementID).unblock(); 
      }); 
     } 
     $(document).ready(function() { 

      BlockUI("gridContainer"); 
      $.blockUI.defaults.css = {}; 
     }); 
    </script> 
</telerik:RadScriptBlock> 
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnableAJAX="true"> 
    <AjaxSettings> 
     <telerik:AjaxSetting AjaxControlID="mainDataGrid"> 
      <UpdatedControls> 
       <telerik:AjaxUpdatedControl ControlID="mainDataGrid" LoadingPanelID="RadAjaxLoadingPanel1"> 
       </telerik:AjaxUpdatedControl> 
       <telerik:AjaxUpdatedControl ControlID="RadMenu1"></telerik:AjaxUpdatedControl> 
      </UpdatedControls> 
     </telerik:AjaxSetting> 
     <telerik:AjaxSetting AjaxControlID="RadMenu1"> 
      <UpdatedControls> 
       <telerik:AjaxUpdatedControl ControlID="mainDataGrid" LoadingPanelID="RadAjaxLoadingPanel1"> 
       </telerik:AjaxUpdatedControl> 
       <telerik:AjaxUpdatedControl ControlID="RadMenu1"></telerik:AjaxUpdatedControl> 
      </UpdatedControls> 
     </telerik:AjaxSetting> 
    </AjaxSettings> 
</telerik:RadAjaxManager> 
<asp:HiddenField ID="radGridClickedRowIndex" runat="server" /> 
<div id="gridContainer" style="height:100%;"> 
    <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
    <ContentTemplate> 
    <div id="gridLabel"> 
     <asp:Label ID="fileNameTextEdit" style="padding: 2px 5px;" 
      Text="No Project Folder or Resource File Group selected" runat="server" /> 
     <br/> 
    </div> 
    <telerik:RadGrid ID="mainDataGrid" OnNeedDataSource="mainDataGrid_NeedDataSource" OnPreRender="RadGrid1_PreRender" 
     Skin="Default" OnItemDataBound="RadGrid1_ItemDataBound" OnColumnCreated="mainDataGrid_ColumnCreated" 
     AllowMultiRowEdit="true" EnableLinqExpressions="false" 
     OnItemCommand="RadGrid1_ItemCommand" 
     runat="server"> 
     <MasterTableView EditMode="InPlace" CommandItemDisplay="Top" 
      DataKeyNames="FileGroup,Name"> 
      <CommandItemTemplate> 
       <div id="gridMenuBar" style="padding: 5px 5px;"> 
        <asp:LinkButton ID="btnSave" runat="server" CommandName="Save"> 
         <img style="border:0px;vertical-align:middle;" alt="" src="/Images/RightContent/popupImages/image01.png" />Save in Database</asp:LinkButton>&nbsp;&nbsp; 
        <asp:LinkButton ID="btnCancel" runat="server" OnClientClick="DiscardChanges(this, event);" 
         CommandName="Discard Changes"> 
         <img style="border:0px;vertical-align:middle;" alt="" src="/Images/icons/16/image25.png" />Discard Changes</asp:LinkButton>&nbsp;&nbsp; 
       </div> 
      </CommandItemTemplate> 
      <Columns> 
       <telerik:GridBoundColumn DataField="Name" HeaderText="Name" ReadOnly="true" /> 
      </Columns> 
     </MasterTableView> 
     <ClientSettings> 
      <Scrolling AllowScroll="true" ScrollHeight="500px" UseStaticHeaders="true" /> 
      <ClientEvents OnRowContextMenu="RowContextMenu"/> 
      <ClientEvents OnGridCreated="GridCreated" /> 
     </ClientSettings> 
    </telerik:RadGrid> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
<telerik:RadContextMenu ID="RadMenu1" runat="server" OnItemClick="RadMenu1_ItemClick" 
    OnClientItemClicking="RadMenu1_ItemClicking" EnableRoundedCorners="true" EnableShadows="true" 
    OnClientLoad="MenuLoad"> 
    <Items> 
     <telerik:RadMenuItem Text="Save" AccessKey="S"> 
     </telerik:RadMenuItem> 
     <telerik:RadMenuItem Text="Discard Changes" AccessKey="C"> 
     </telerik:RadMenuItem> 
    </Items> 
</telerik:RadContextMenu> 
+0

也許這可以幫助你http://stackoverflow.com/questions/4849614/how-to-show-the-loader-image-like-in-gmail-when-loading-data-into-gridview – Pavlo

回答

1

正如你可以看到,我使用Telerik控制。我設法通過使用RadAjaxLoadingPanel來阻止我的網格。有關更多信息,請參見here

0

是的,Telerik有這樣的控件來顯示加載面板。 Here

此外,如果數據刷新的時間太少,有可能會看到閃爍。

爲了避免這種情況,您可以添加一個最小時間加載面板應顯示使用「MinDisplayTime」,以毫秒爲單位。