This is a migrated thread and some comments may be shown as answers.

[Solved] Export to Excel - Loading Panel doesn't stop

1 Answer 549 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Matt
Top achievements
Rank 1
Matt asked on 28 May 2013, 05:45 PM
Greetings,

I have a RagGrid with Export to Excel enabled.  It exports the file, but the loading panel keeps spinning after the export.  Can you tell me what I am missing?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head runat="server">
  <title>Export Test</title>
  <script type="text/javascript">
    function onRequestStart(sender, args) {
      if (args.get_eventTarget().indexOf("ExportTo") >= 0) {
        args.set_enableAjax(false);
      }
    }
  </script>
</head>
<body>
  <form id="form1" runat="server">
  <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
  </telerik:RadScriptManager>
  <telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" DecoratedControls="GridFormDetailsViews,Buttons,Textbox,CheckBoxes,RadioButtons,Scrollbars,Textarea,Select" />
  <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
  </telerik:RadAjaxLoadingPanel>
  <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="RadAjaxLoadingPanel1">
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
      <ClientEvents OnRequestStart="onRequestStart"></ClientEvents>
      <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="grdItemSearchResults">
          <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="grdItemSearchResults"></telerik:AjaxUpdatedControl>
          </UpdatedControls>
        </telerik:AjaxSetting>
      </AjaxSettings>
    </telerik:RadAjaxManager>
    <div>
      <table width="100%">
        <tr>
          <td colspan="2">
            <h3>
              Item Search</h3>
          </td>
        </tr>
        <tr>
          <td width="250" align="right" valign="top">
            Receipt #
          </td>
          <td>
            <asp:TextBox ID="txtItemCartID" MaxLength="100" CssClass="inputWidth" runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Item #
          </td>
          <td>
            <asp:TextBox ID="txtItemPurchaseID" MaxLength="100" CssClass="inputWidth" runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            * Start Date
          </td>
          <td>
            <asp:TextBox ID="txtItemStartDate" MaxLength="100" CssClass="inputWidth" runat="server"></asp:TextBox>
            <asp:Label ID="errItemStartDate" runat="server" ForeColor="Red"></asp:Label>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            * End Date
          </td>
          <td>
            <asp:TextBox ID="txtItemEndDate" MaxLength="100" CssClass="inputWidth" runat="server"></asp:TextBox>
            <asp:Label ID="errItemEndDate" runat="server" ForeColor="Red"></asp:Label>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Customer First Name
          </td>
          <td>
            <asp:TextBox ID="txtItemCustomerFirstName" MaxLength="100" CssClass="inputWidth"
              runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Customer Last Name
          </td>
          <td>
            <asp:TextBox ID="txtItemCustomerLastName" MaxLength="100" CssClass="inputWidth" runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Purchase Identifier
          </td>
          <td>
            <asp:TextBox ID="txtItemPurchaseIdentifier" MaxLength="100" CssClass="inputWidth"
              runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Comments
          </td>
          <td>
            <asp:TextBox ID="txtItemComments" MaxLength="1000" CssClass="inputWidth" runat="server"
              Rows="5" TextMode="MultiLine"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td>
              
          </td>
          <td>
            <asp:LinkButton ID="btnItemSelectAll" runat="server" OnClick="btnItemSelectAll_Click">Select All</asp:LinkButton>
               
            <asp:LinkButton ID="btnItemSelectNone" runat="server" OnClick="btnItemSelectNone_Click">Select None</asp:LinkButton>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Purchase Type
          </td>
          <td>
            <asp:CheckBoxList ID="chkItemPurchaseType" runat="server" DataTextField="PurchaseTypeName"
              DataValueField="PurchaseTypeID" DataSourceID="objPurchaseType" RepeatColumns="3">
            </asp:CheckBoxList>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Cashier
          </td>
          <td>
            <asp:CheckBoxList ID="chkItemUser" runat="server" RepeatColumns="3" DataSourceID="objUser"
              DataTextField="UserFullName" DataValueField="UserID">
            </asp:CheckBoxList>
          </td>
        </tr>
        <tr>
          <td align="right" valign="top">
            Location
          </td>
          <td>
            <asp:CheckBoxList ID="chkItemLocation" runat="server" RepeatColumns="3" DataSourceID="objLocation"
              DataTextField="LocationName" DataValueField="LocationID">
            </asp:CheckBoxList>
          </td>
        </tr>
        <tr>
          <td>
              
          </td>
          <td>
            <telerik:RadButton ID="btnItemSearch" runat="server" Text="Search" Icon-PrimaryIconCssClass="rbSearch"
              ForeColor="White" OnClick="btnItemSearch_Click">
            </telerik:RadButton>
            <telerik:RadButton ID="btnItemReset" runat="server" ForeColor="White" Icon-PrimaryIconCssClass="rbRefresh"
              OnClick="btnItemReset_Click" Text="Reset">
            </telerik:RadButton>
          </td>
        </tr>
        <tr>
          <td colspan="2">
              
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <h3>
              <asp:Label ID="lblItemSearchCount" runat="server"></asp:Label>
              Records Found</h3>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <telerik:RadGrid ID="grdItemSearchResults" runat="server" AllowPaging="True" AllowSorting="True"
              AutoGenerateColumns="False" CellSpacing="0" GridLines="None" OnNeedDataSource="grdItemSearchResults_NeedDataSource"
              OnItemCommand="grdItemSearchResults_ItemCommand" PageSize="20">
              <MasterTableView DataKeyNames="PurchaseID" NoMasterRecordsText="No items were found."
                HeaderStyle-ForeColor="White" CommandItemDisplay="Top">
                <CommandItemSettings ExportToPdfText="Export to PDF" ShowExportToWordButton="true"
                  ShowExportToExcelButton="true" ShowExportToCsvButton="true" ShowExportToPdfButton="true" />
                <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column" Visible="True">
                  <HeaderStyle Width="20px" />
                </RowIndicatorColumn>
                <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" Visible="True">
                  <HeaderStyle Width="20px" />
                </ExpandCollapseColumn>
                <Columns>
                  <telerik:GridBoundColumn DataField="CartID" DataType="System.Int32" FilterControlAltText="Filter CartID column"
                    HeaderText="Receipt #" SortExpression="CartID" UniqueName="CartID">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="PurchaseID" DataType="System.Int32" FilterControlAltText="Filter PurchaseID column"
                    HeaderText="Item #" ReadOnly="True" SortExpression="PurchaseID" UniqueName="PurchaseID">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="CartDate" DataType="System.DateTime" FilterControlAltText="Filter CartDate column"
                    HeaderText="Date" SortExpression="CartDate" UniqueName="CartDate" DataFormatString="{0:d}">
                  </telerik:GridBoundColumn>
                  <telerik:GridTemplateColumn HeaderText="Customer" SortExpression="CustomerFirstName">
                    <ItemTemplate>
                      <asp:Label ID="lblCustomerFullName" runat="server" Text='<%# String.Format("{0} {1}", Eval("CustomerFirstName"), Eval("CustomerLastName")) %>'></asp:Label>
                    </ItemTemplate>
                  </telerik:GridTemplateColumn>
                  <telerik:GridBoundColumn DataField="PurchaseTypeName" FilterControlAltText="Filter PurchaseTypeName column"
                    HeaderText="Type" SortExpression="PurchaseTypeName" UniqueName="PurchaseTypeName">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="PurchaseIdentifier" FilterControlAltText="Filter PurchaseIdentifier column"
                    HeaderText="Identifier" SortExpression="PurchaseIdentifier" UniqueName="PurchaseIdentifier">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="PurchaseAmount" DataType="System.Decimal" FilterControlAltText="Filter PurchaseAmount column"
                    HeaderText="Amount" SortExpression="PurchaseAmount" UniqueName="PurchaseAmount"
                    DataFormatString="{0:C}">
                  </telerik:GridBoundColumn>
                  <telerik:GridTemplateColumn HeaderText="Cashier" SortExpression="UserFirstName">
                    <ItemTemplate>
                      <asp:Label ID="lblUserFullName" runat="server" Text='<%# String.Format("{0} {1}", Eval("UserFirstName"), Eval("UserLastName")) %>'></asp:Label>
                    </ItemTemplate>
                  </telerik:GridTemplateColumn>
                  <telerik:GridBoundColumn DataField="LocationName" FilterControlAltText="Filter LocationName column"
                    HeaderText="Location" SortExpression="LocationName" UniqueName="LocationName">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="PurchaseStatusName" FilterControlAltText="Filter PurchaseStatusName column"
                    HeaderText="Status" SortExpression="PurchaseStatusName" UniqueName="PurchaseStatusName">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn DataField="ChangeLogMessage" FilterControlAltText="Filter ChangeLogMessage column"
                    HeaderText="Comment" ReadOnly="True" SortExpression="ChangeLogMessage" UniqueName="ChangeLogMessage">
                  </telerik:GridBoundColumn>
                  <telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                      <telerik:RadButton ID="btnItemDetails" runat="server" ForeColor="White" Icon-PrimaryIconCssClass="rbOpen"
                        Text="Details" CommandArgument='<%# Bind("CartID") %>' OnCommand="btnItemDetails_Command">
                      </telerik:RadButton>
                    </ItemTemplate>
                  </telerik:GridTemplateColumn>
                </Columns>
                <EditFormSettings>
                  <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                  </EditColumn>
                </EditFormSettings>
                <PagerStyle PageSizeControlType="RadComboBox" />
              </MasterTableView>
              <PagerStyle PageSizeControlType="RadComboBox" />
              <FilterMenu EnableImageSprites="False">
              </FilterMenu>
            </telerik:RadGrid>
          </td>
        </tr>
      </table>
    </div>
    <asp:ObjectDataSource ID="objPurchaseType" runat="server" OldValuesParameterFormatString="original_{0}"
      SelectMethod="GetData" TypeName="dsKCSOCashierTableAdapters.PurchaseTypeSearchDLLTableAdapter">
    </asp:ObjectDataSource>
    <asp:ObjectDataSource ID="objUser" runat="server" OldValuesParameterFormatString="original_{0}"
      SelectMethod="GetData" TypeName="dsKCSOCashierTableAdapters.UserSearchDLLTableAdapter">
    </asp:ObjectDataSource>
    <asp:ObjectDataSource ID="objLocation" runat="server" OldValuesParameterFormatString="original_{0}"
      SelectMethod="GetData" TypeName="dsKCSOCashierTableAdapters.LocationSearchDLLTableAdapter">
    </asp:ObjectDataSource>
  </telerik:RadAjaxPanel>
  </form>
</body>
</html>

using System;
using System.Web.UI.WebControls;
using dsKCSOCashierTableAdapters;
 
public partial class Test : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      ResetValidation();
      ResetItemSearch();
    }
  }
  private void SearchItems()
  {
    grdItemSearchResults.Rebind();
  }
  private void ResetValidation()
  {
    errItemStartDate.Text = "";
    errItemEndDate.Text = "";
  }
  private bool ValidateItemSearch()
  {
    bool valid = true;
 
    DateTime startDate = DateTime.Now.AddDays(1);
    DateTime endDate = DateTime.Now;
 
    if (txtItemEndDate.Text.Trim() == string.Empty)
    {
      errItemEndDate.Text = "Required";
      txtItemEndDate.Focus();
      valid = false;
    }
    else if (!DateTime.TryParse(txtItemEndDate.Text.Trim(), out endDate))
    {
      errItemEndDate.Text = "Invalid (MM/DD/YYYY)";
      txtItemEndDate.Focus();
      valid = false;
    }
 
    if (txtItemStartDate.Text.Trim() == string.Empty)
    {
      errItemStartDate.Text = "Required";
      txtItemStartDate.Focus();
      valid = false;
    }
    else if (!DateTime.TryParse(txtItemStartDate.Text.Trim(), out startDate))
    {
      errItemStartDate.Text = "Invalid (MM/DD/YYYY)";
      txtItemStartDate.Focus();
      valid = false;
    }
 
    if (valid)
    {
      if (startDate > endDate)
      {
        errItemStartDate.Text = "Can not be after end date";
        errItemEndDate.Text = "Can not be before start date";
        txtItemStartDate.Focus();
        valid = false;
      }
    }
 
    return valid;
  }
  protected void btnItemSelectAll_Click(object sender, EventArgs e)
  {
    SelectItemCheckBoxes(true);
  }
  protected void btnItemSelectNone_Click(object sender, EventArgs e)
  {
    SelectItemCheckBoxes(false);
  }
  private void SelectItemCheckBoxes(bool checkAll)
  {
    chkItemPurchaseType.Items.Clear();
    chkItemPurchaseType.DataBind();
    foreach (ListItem item in chkItemPurchaseType.Items)
    {
      item.Selected = checkAll;
    }
    chkItemUser.Items.Clear();
    chkItemUser.DataBind();
    KCSOCashierSecurity clsSec = new KCSOCashierSecurity(Context.User.Identity.Name.Substring(7));
    if (clsSec.GetIsAdmin())
    {
      foreach (ListItem item in chkItemUser.Items)
      {
        item.Enabled = true;
        item.Selected = checkAll;
      }
    }
    else
    {
      string userID = clsSec.GetUserID().ToString();
      foreach (ListItem item in chkItemUser.Items)
      {
 
        if (item.Value == userID)
        {
          item.Enabled = true;
          item.Selected = checkAll;
        }
        else
        {
          item.Selected = false;
          item.Enabled = false;
        }
 
      }
    }
    chkItemLocation.Items.Clear();
    chkItemLocation.DataBind();
    foreach (ListItem item in chkItemLocation.Items)
    {
      item.Selected = checkAll;
    }
  }
  protected void btnItemSearch_Click(object sender, EventArgs e)
  {
    SearchItems();
  }
  protected void btnItemReset_Click(object sender, EventArgs e)
  {
    ResetValidation();
    ResetItemSearch();
    SearchItems();
  }
  private void ResetItemSearch()
  {
    txtItemCartID.Text = "";
    txtItemPurchaseID.Text = "";
    txtItemStartDate.Text = DateTime.Now.ToShortDateString();
    txtItemEndDate.Text = DateTime.Now.ToShortDateString();
    txtItemCustomerFirstName.Text = "";
    txtItemCustomerLastName.Text = "";
    txtItemPurchaseIdentifier.Text = "";
    txtItemComments.Text = "";
    SelectItemCheckBoxes(true);
  }
  protected void btnItemDetails_Command(object sender, CommandEventArgs e)
  {
 
    string cartID = e.CommandArgument.ToString();
    Response.Redirect("Details.aspx?cartid=" + cartID, true);
  }
  protected void grdItemSearchResults_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
  {
    ResetValidation();
    if (ValidateItemSearch())
    {
      string purchaseTypeIDList = "";
      foreach (ListItem cb in chkItemPurchaseType.Items)
      {
        if (cb.Selected)
        {
          purchaseTypeIDList += cb.Value + ",";
        }
      }
      string userIDList = "";
      foreach (ListItem cb in chkItemUser.Items)
      {
        if (cb.Selected)
        {
          userIDList += cb.Value + ",";
        }
      }
      string locationIDList = "";
      foreach (ListItem cb in chkItemLocation.Items)
      {
        if (cb.Selected)
        {
          locationIDList += cb.Value + ",";
        }
      }
      Purchase_ItemSearch_WithComments_spTableAdapter taItem = new Purchase_ItemSearch_WithComments_spTableAdapter();
      dsKCSOCashier.Purchase_ItemSearch_WithComments_spDataTable dtItem = taItem.GetData("%" + txtItemCartID.Text.Trim() + "%",
                                                                                         "%" + txtItemPurchaseID.Text.Trim() + "%",
                                                                                         Convert.ToDateTime(txtItemStartDate.Text.Trim() + " 00:00:00"),
                                                                                         Convert.ToDateTime(txtItemEndDate.Text.Trim() + " 23:59:59"),
                                                                                         "%" + txtItemCustomerFirstName.Text.Trim() + "%",
                                                                                         "%" + txtItemCustomerLastName.Text.Trim() + "%",
                                                                                         "%" + txtItemPurchaseIdentifier.Text.Trim() + "%",
                                                                                         purchaseTypeIDList,
                                                                                         userIDList,
                                                                                         locationIDList,
                                                                                         "%" + txtItemComments.Text.Trim() + "%");
      grdItemSearchResults.DataSource = dtItem;
    }
    else
    {
      grdItemSearchResults.DataSource = null;
    }
  }
  protected void grdItemSearchResults_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
  {
    if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToExcelCommandName ||
                e.CommandName == Telerik.Web.UI.RadGrid.ExportToWordCommandName ||
                e.CommandName == Telerik.Web.UI.RadGrid.ExportToCsvCommandName ||
                e.CommandName == Telerik.Web.UI.RadGrid.ExportToPdfCommandName)
    {
      ConfigureExport();
    }
  }
  public void ConfigureExport()
  {
    grdItemSearchResults.ExportSettings.ExportOnlyData = true;
    grdItemSearchResults.ExportSettings.IgnorePaging = true;
    grdItemSearchResults.ExportSettings.OpenInNewWindow = true;
    grdItemSearchResults.ExportSettings.UseItemStyles = true;
  }
}


Thank you!

Matt

1 Answer, 1 is accepted

Sort by
0
Accepted
Andrey
Telerik team
answered on 31 May 2013, 08:35 AM
Hello,

Most probably the problem comes from the way you have Ajax-ified your controls. You should not use any Ajax while downloading file attachments from the server. You could check this online demo application for a sample how to cancel the Ajax prior downloading the attachment.

Additionally, please remove  the RadAjaxPanel that wraps the whole content on your page. First it is pointless because thus you are updating the whole page which hardly makes any difference of the regular postback. Moreover it is unsupported scenario to have RadAjaxManager inside RadAjaxPanel. RadAjaxManager could handle any scenario, so pleas remove the RadAjaxPanel and leave only the RadAjaxManager.

Give these suggestions a try and you should not have problems.

Regards,
Andrey
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
Matt
Top achievements
Rank 1
Answers by
Andrey
Telerik team
Share this question
or