C# RadGrid Telerik 导出到 excel 的问题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8890916/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 04:58:59  来源:igfitidea点击:

RadGrid telerik problems with export to excel

c#asp.net.nettelerik

提问by gruber

I added folowing line to my MasterTableView:

我在 MasterTableView 中添加了以下行:

<CommandItemSettings ShowExportToWordButton="true" ShowExportToExcelButton="true" ShowExportToCsvButton="true" />

But when I click on that, loading div appears and then data on the grid is refreshed and nothing else happens. There is no "save file" window.

但是当我点击它时,加载 div 出现,然后网格上的数据被刷新,没有其他任何事情发生。没有“保存文件”窗口。

Am I missing anything ?

我错过了什么吗?

采纳答案by SimSimY

It is known issue caused by the AJAX (basically the page needs to return stream rather than XttpReuest used for AJAX) therefore tha AJAX need to be canceled on this post-back. You can find more info hereand download few sample projects that show various way of exporting radgrid.

这是由 AJAX 引起的已知问题(基本上页面需要返回流而不是用于 AJAX 的 XttpReuest),因此需要在此回发时取消 AJAX。您可以在此处找到更多信息并下载一些示例项目,这些项目展示了导出 radgrid 的各种方式。

PS. The "ready solution" is to add this to your JS code

附注。“现成的解决方案”是将其添加到您的 JS 代码中

<script type="text/javascript">
            function mngRequestStarted(ajaxManager, eventArgs)
           {
              if(eventArgs.EventTarget == "mngBtnExcel" || eventArgs.EventTarget == "mngBtnWord")
             {
                eventArgs.EnableAjax = false;
             }
           }
            function pnlRequestStarted(ajaxPanel, eventArgs)
           {
              if(eventArgs.EventTarget == "pnlBtnExcel" || eventArgs.EventTarget == "pnlBtnWord")
             {
                eventArgs.EnableAjax = false;
             }
           }
            function gridRequestStart(grid, eventArgs)
           {
              if((eventArgs.EventTarget.indexOf("gridBtnExcel") != -1) || (eventArgs.EventTarget.indexOf("gridBtnWord") != -1))
             {
                eventArgs.EnableAjax = false;
             }
           }
</script>

But I still recommend you to read the topic in the attached link

但我仍然建议您阅读附加链接中的主题

回答by Pankaj Tiwari

Add a button for exporting to excel;

添加导出到excel的按钮;

<asp:Button ID="Button1" CssClass="button" Width="150px" Text="Export to Excel" OnClick="Button1_Click"

runat="server">

runat="服务器">

On Code behind Side:

在代码背后:

protected void Button1_Click(object sender, System.EventArgs e)
    {
        ConfigureExport();
        RadGrid1.MasterTableView.ExportToExcel();
    }

public void ConfigureExport()
    {
        RadGrid1.ExportSettings.ExportOnlyData = true;
        RadGrid1.ExportSettings.IgnorePaging = true;
        RadGrid1.ExportSettings.OpenInNewWindow = true;
    }

Reference: http://demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/exporting/defaultcs.aspx

参考:http: //demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/exporting/defaultcs.aspx

回答by Niran

Add the below code before the Grid:

在 Grid 之前添加以下代码:

<script type="text/javascript">
        function onRequestStart(sender, args)
        {
            if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0 ||
                    args.get_eventTarget().indexOf("ExportToWordButton") >= 0 ||
                    args.get_eventTarget().indexOf("ExportToCsvButton") >= 0)
            {
                args.set_enableAjax(false);
            }
        }
    </script>

    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <ClientEvents OnRequestStart="onRequestStart" />
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>

For the code behind add the below one:

对于后面的代码,添加以下代码:

protected void RadGrid1_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.ExportToPdfCommandName ||
            e.CommandName == Telerik.Web.UI.RadGrid.ExportToCsvCommandName)
    {
        gridResult.ExportSettings.IgnorePaging = true;
        gridResult.ExportSettings.OpenInNewWindow = true;
        if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToExcelCommandName)
            gridResult.MasterTableView.ExportToExcel();
        else if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToWordCommandName)
            gridResult.MasterTableView.ExportToWord();
        else if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToCsvCommandName)
            gridResult.MasterTableView.ExportToCSV();
        else if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToPdfCommandName)
            gridResult.MasterTableView.ExportToPdf();

    }
}

reference: http://demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/exporting/defaultcs.aspx

参考:http: //demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/exporting/defaultcs.aspx

回答by Erik Dekker

I do it like this:

我这样做:

We have a button under the grid:

我们在网格下有一个按钮:

<asp:Button ID="cmdExportToExcel" runat="server"
        Text="Export to Excel" OnClick="cmdExportToExcel_OnClick" />

And in the OnClick handler you call the ExportToExcel, and then clear the response headers

在 OnClick 处理程序中调用 ExportToExcel,然后清除响应标头

protected void cmdExportToExcel_OnClick(object sender, EventArgs e) {
     radGrid.MasterTableView.ExportToExcel();
     Page.Response.ClearHeaders();
     Page.Response.ClearContent();
}

On the Grid you have some ExportSettings.
I set ExportSettings.ExportOnlyData = true, ExportSettings.FileName to a unique name with current data and IgnorePaging is also true (So i just export all the data).

在网格上,您有一些 ExportSettings。
我将 ExportSettings.ExportOnlyData = true, ExportSettings.FileName 设置为具有当前数据的唯一名称,并且 IgnorePaging 也是 true(所以我只是导出所有数据)。

Works perfectly!

完美运行!

回答by ihebiheb

Add the ClientEvents-OnRequestStart="requestStart" to your RadAjaxPanel

将 ClientEvents-OnRequestStart="requestStart" 添加到您的 RadAjaxPanel

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" 
    ClientEvents-OnRequestStart="requestStart">

Add the script

添加脚本

<script type="text/javascript">
        function requestStart(sender, args)
        {
            if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0)
            {
                args.set_enableAjax(false);
            }
        }
    </script>