我發現了一個很好的例子,用於阻止我的網頁的一部分here。如何在點擊保存按鈕時屏蔽我的網格?
但我一直在嘗試幾個小時,以適應我的UserControl這個例子,但沒有任何進展。可能是因爲我對JQuery和ASP.Net還不是很熟悉。例如。我不明白什麼prm.add_beginRequest
和prm.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>
<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>
</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>
也許這可以幫助你http://stackoverflow.com/questions/4849614/how-to-show-the-loader-image-like-in-gmail-when-loading-data-into-gridview – Pavlo