I have a page that has a RadGrid with a Context Menu on it. I am using the context menu to fire open a RadWindow that is hosting another aspx page with a RadProgressArea completing a long running process. Once the job is finished I have some JS in a placeholder that I make visable to Rebind the radgrid and then close the RadWindow.
Everything works fine except if I rebind the RadGrid the RadWindow reopens back up. What am I doing wrong?
Here is the main aspx page - stripped down to be simple.
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="PartInventory.ascx.vb" Inherits="UserControls_PartInventory" %><telerik:RadCodeBlock runat="server" ID="RadCodeBlock2"> <script type="text/javascript"> function RowContextMenu(sender, eventArgs) { var menu = $find("<%=RadMenu1.ClientID %>"); var evt = eventArgs.get_domEvent(); if (evt.target.tagName == "INPUT" || evt.target.tagName == "A") { return; } var index = eventArgs.get_itemIndexHierarchical(); document.getElementById("radGridClickedRowIndex").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 refreshGrid() { var masterTable = $find("<%=rgInventoryEdit.ClientID%>").get_masterTableView(); masterTable.rebind(); } </script> </telerik:RadCodeBlock><telerik:RadGrid ID="rgInventoryEdit" runat="server" AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" CellSpacing="0" DataSourceID="sqlInventory" GridLines="None" Skin="WebBlue" AllowMultiRowSelection="true" AllowAutomaticDeletes="True" > <ClientSettings> <ClientEvents OnRowContextMenu="RowContextMenu" /> <Selecting CellSelectionMode="None" AllowRowSelect="True"></Selecting> <Resizing AllowColumnResize="True" AllowResizeToFit="True" EnableRealTimeResize="True" ResizeGridOnColumnResize="True"></Resizing> </ClientSettings> <MasterTableView AutoGenerateColumns="False" DataKeyNames="InventoryID" DataSourceID="sqlInventory" PageSize="25" ShowFooter="True" ShowHeader="true" CommandItemDisplay="Top"> <CommandItemTemplate> <div style="padding: 5px 5px;"> <asp:LinkButton ID="LinkButton1" runat="server" OnClick="SaveGridSettings" CommandName="SaveSettings"><img style="border:0px;vertical-align:middle;" alt="" src="../../Images/Icons/24x24/save24x24.png"/> Save Layout</asp:LinkButton> </div> </CommandItemTemplate> <Columns> <telerik:GridTemplateColumn HeaderText="Img" AllowFiltering="False" UniqueName="HasImages"> <HeaderStyle Width="35px"></HeaderStyle> <ItemStyle Width="35px"></ItemStyle> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" Text="Link" Target="_blank" Visible='<%# Eval("HasImages")%>' ImageUrl="~/Images/BlueIcons/16x16/blue16_032.gif" onclick="window.open (this.href, 'child', 'height=800,width=800,scrollbars'); return false" NavigateUrl='<%# String.Format("~/CarAndPartPics.aspx?NoMaster=True&InventoryNumber={0}&StockNumber={1}", Convert.ToString(Eval("InventoryNumber")), Convert.ToString(Eval("StockTicketNumber")))%>' /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"> <ItemStyle CssClass="MyImageButton" /> </telerik:GridEditCommandColumn> <telerik:GridButtonColumn ConfirmText="Delete this Part?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" Text="Delete" UniqueName="DeleteColumn"> <ItemStyle HorizontalAlign="Center" CssClass="MyImageButton" /> </telerik:GridButtonColumn> </Columns> </MasterTableView></telerik:RadGrid><telerik:RadPersistenceManagerProxy ID="RadPersistenceManagerProxy1" runat="server"> <PersistenceSettings> <telerik:PersistenceSetting ControlID="rgInventoryEdit" /> </PersistenceSettings></telerik:RadPersistenceManagerProxy><input type="hidden" id="radGridClickedRowIndex" name="radGridClickedRowIndex" /><telerik:RadContextMenu ID="RadMenu1" runat="server" OnItemClick="RadMenu1_ItemClick" SkinID="WebBlue" EnableRoundedCorners="true" EnableShadows="true"> <Items> <telerik:RadMenuItem Text="Increase Prices"> </telerik:RadMenuItem> <telerik:RadMenuItem Text="Do Multiple Operations"> </telerik:RadMenuItem> </Items> </telerik:RadContextMenu><telerik:RadWindowManager ID="RadWindowManager1" ShowContentDuringLoad="false" VisibleStatusbar="false" ReloadOnShow="true" runat="server" EnableShadow="true"> <Windows> <telerik:RadWindow ID="rwOne" runat="server" ReloadOnShow="true" ShowContentDuringLoad="false" Behaviors="Close,Move" Modal="true" > </telerik:RadWindow> </Windows></telerik:RadWindowManager><asp:SqlDataSource ID="sqlInventory" runat="server" ConnectionString="<%$ ConnectionStrings: %>" </asp:SqlDataSource>Here is the code Behind.
Imports Telerik.Web.UIPartial Class UserControls_PartInventory Inherits System.Web.UI.UserControl Protected Sub UserControls_PartInventory_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then LoadTelerikPF() End If End Sub Public Function SaveTelerikPF() As Boolean Try Dim mstr As MasterPage = Me.Parent.Page.Master Dim rp As Telerik.Web.UI.RadPersistenceManager = mstr.FindControl("RadPersistenceManager1") rp.SaveState() Catch ex As Exception Return False End Try Return True End Function Public Function LoadTelerikPF() As Boolean Try Dim mstr As MasterPage = Me.Parent.Page.Master Dim rp As Telerik.Web.UI.RadPersistenceManager = mstr.FindControl("RadPersistenceManager1") rp.LoadState() Catch ex As Exception Return False End Try Return True End Function Protected Sub SaveGridSettings(sender As Object, e As EventArgs) SaveTelerikPF() End Sub Protected Sub RadMenu1_ItemClick(sender As Object, e As Telerik.Web.UI.RadMenuEventArgs) Handles RadMenu1.ItemClick Dim intArray(rgInventoryEdit.SelectedItems.Count - 1) As Integer Dim intCount As Integer = 0 For Each row As GridItem In rgInventoryEdit.SelectedItems intArray(intCount) = rgInventoryEdit.MasterTableView.Items(row.ItemIndex).GetDataKeyValue("InventoryID") intCount += 1 Next Dim strGUID As String = Guid.NewGuid.ToString Session(strGUID) = intArray Select Case e.Item.Text Case "Increase Prices" RadWindowManager1.Windows(0).Title = "Increase Prices" RadWindowManager1.Windows(0).Height = 300 RadWindowManager1.Windows(0).Width = 600 RadWindowManager1.Windows(0).Left = 150 RadWindowManager1.Windows(0).NavigateUrl = "~/UserControls/PartEditDialogs/IncreasePrice.aspx?sesKey=" + Server.HtmlEncode(strGUID) RadWindowManager1.Windows(0).VisibleOnPageLoad = True Case "Do Multiple Operations" End Select End SubEnd ClassHere is the aspx page that opens up in the Radwindow.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="IncreasePrice.aspx.vb" Inherits="UserControls_PartEditDialogs_IncreasePrice" Theme="SkinFile" StylesheetTheme="SkinFile" %><style type="text/css"> .auto-style1 { width: 348px; }</style><telerik:RadCodeBlock runat="server" ID="RadCodeBlock2"> <script type="text/javascript">function GetRadWindow() { var oWindow = null; if (window.radWindow) oWindow = window.radWindow; else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; return oWindow; } </script> </telerik:RadCodeBlock><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server" AsyncPostBackTimeout="3600"/> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" DefaultLoadingPanelID="RadAjaxLoadingPanel1"> </telerik:RadAjaxManager> <telerik:RadProgressManager ID="RadProgressManager1" Runat="server" /> <div> <table> <tr> <td style="text-align: right"> <asp:Label ID="Label1" runat="server" SkinID="stdLabel" Text="Amount to add to Retail :"></asp:Label> </td> <td> <asp:TextBox ID="tbRetail" runat="server" Width="50px">0</asp:TextBox> </td> <td class="auto-style1"> <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="tbRetail" ErrorMessage="Please enter an amount between 0 and 1000" MaximumValue="1000" MinimumValue=".01"></asp:RangeValidator> </td> </tr> <tr> <td style="text-align: right"> <asp:Label ID="Label2" runat="server" SkinID="stdLabel" Text="Amount to add to Wholesale :"></asp:Label> </td> <td> <asp:TextBox ID="tbWholesale" runat="server" Width="50px">0</asp:TextBox> </td> <td class="auto-style1"> <asp:RangeValidator ID="RangeValidator2" runat="server" ControlToValidate="tbWholesale" ErrorMessage="Please enter an amount between 0 and 1000" MaximumValue="1000" MinimumValue=".01"></asp:RangeValidator> </td> </tr> <tr> <td style="text-align: right"> <asp:Button ID="btnSetPrices" runat="server" Text="Adjust Prices" /> </td> <td> </td> <td class="auto-style1"> </td> </tr> </table> </div> <asp:PlaceHolder ID="phCloseWindow" runat="server"> <script> var oWin = GetRadWindow(); var parentWindow = oWin.BrowserWindow; oWin.close(); parentWindow.refreshGrid(); </script> </asp:PlaceHolder> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" Width="600px" Height="300px" Runat="server" IsSticky="True" MinDisplayTime="1000" Skin="Default"> </telerik:RadAjaxLoadingPanel> <div style="position:absolute;z-index:1000;top:10px;left:10px"> <telerik:RadProgressArea ID="RadProgressArea1" runat="server" Skin="WebBlue" HeaderText="Current Progress" ProgressIndicators="FilesCountBar, CurrentFileName, TimeElapsed"> <Localization Uploaded="Uploaded" CurrentFileName="" UploadedFiles=""></Localization> </telerik:RadProgressArea> </div> </form></body></html>Here is the code behind.
Imports Telerik.Web.UIImports System.ThreadingPartial Class UserControls_PartEditDialogs_IncreasePrice Inherits System.Web.UI.Page Protected Sub UserControls_PartEditDialogs_IncreasePrice_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then phCloseWindow.Visible = False End If End Sub Protected Sub btnSetPrices_Click(sender As Object, e As EventArgs) Handles btnSetPrices.Click Dim sesKey As String = Request.QueryString("sesKey") Dim invArray As Integer() = Session(sesKey) Dim bolSuccess As Boolean = True Dim strWarning As String = "" For Each intID As Integer In invArray Label1.Text += intID.ToString + vbCrLf Next Dim progress As RadProgressContext = RadProgressContext.Current progress.Speed = "N/A" progress.CurrentOperationText = "Part 1 of " + invArray.Count.ToString RadProgressArea1.Localization.CurrentFileName = "Re-Pricing Parts : " progress.OperationComplete = False Dim intProgress As Integer = 0 For Each intInventoryID As Integer In invArray Thread.Sleep(1000) intProgress += 1 progress.TimeEstimated = (invArray.Count - intProgress) * 100 progress.CurrentOperationText = "Part " + intProgress.ToString() + " of " + invArray.Count.ToString Next phCloseWindow.Visible = bolSuccess progress.OperationComplete = True End SubEnd Class