【问题标题】:Telerik RadGrid ExportToPDF() or ExportToExcel() not workingTelerik RadGrid ExportToPDF() 或 ExportToExcel() 不工作
【发布时间】:2012-01-12 13:15:22
【问题描述】:

我有一个简单的类继承RadGrid。我正在向 RadGrid 添加一个按钮,并向该按钮添加一个 Click 事件处理程序。按钮已正确添加到所需位置,并且单击事件处理程序正在触发,但 radGrid.ExportToExcel() 没有做任何事情。事实上,在点击和页面回发时,按钮会消失。为什么会这样?

我尝试将按钮控件添加到Page.Form 控件集合中,但仍然没有任何反应。

[ToolboxData("<{0}:RadGridDp runat=server></{0}:RadGridDp>")]
public class RadGridDP : RadGrid
{
    public RadGridDP()
    {
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Button btnExport = new Button();
        btnExport.ID = "Export";
        btnExport.Text = "Export";
        btnExport.Click += new EventHandler(btnExport_Click);
        btnExport.CommandArgument = this.ID;
        this.MasterTableView.Controls.Add(btnExport);
    }

    void btnExport_Click(object sender, EventArgs e)
    {
        Button btnExport = (Button)sender;
        string RadGridId = btnExport.CommandArgument.ToString();
        RadGridDP radGrid = (RadGridDP)this.Parent.Parent.FindControl(RadGridId);

        radGrid.ExportSettings.IgnorePaging = true;
        radGrid.ExportSettings.OpenInNewWindow = true;
        radGrid.ExportSettings.ExportOnlyData = true;

        radGrid.MasterTableView.ExportToExcel();
    }
}

当我在 UserControl 中做同样的事情并在任何页面上使用 UserControl 时,它工作正常。有什么区别?

【问题讨论】:

    标签: telerik radgrid


    【解决方案1】:

    我找到了解决方案。每当 RadGrid 加载时,它都会以这种方式调用各种事件:

    1. Page OnLoad
    m. RadGrid OnLoad
    x. NeedDataSource
    

    点击按钮后(以上述方式添加),事件以这种方式调用

    1. Page_OnLoad
    m. RadGrid OnLoad
    n. btnExport_Click
    x. NeedDataSource
    

    (至于奇怪的序号,这些事件之间可能还有其他事件,但发生的顺序是正确的) 因此,整个 Grid 与数据一起反弹,因此 exportPdf 的命令被刷新。所以什么也没有发生。 有趣的是,不需要添加一个额外的按钮,telerik 提供了自己的按钮来做到这一点。也可以自定义(通过实现 ITemplate)。这就是现在生成报告的方式(尽管不是特定于原始问题):

        [ToolboxData("<{0}:RadGridDP runat=server></{0}:RadGridDP>")]
        public class RadGridDP : RadGrid
        {
            //custom logic
            public RadGridDP()
            {
                this.ItemCreated += new GridItemEventHandler(RadGrid_ItemCreated);
                this.Load += new EventHandler(RadGridDP_Load);
                this.ItemCommand += new GridCommandEventHandler(RadGrid_ItemCommand);
                this.PdfExporting += new OnGridPdfExportingEventHandler(RadGridDP_PdfExporting);
                this.GridExporting += new OnGridExportingEventHandler(RadGridDP_GridExporting);
    
                this.ExportSettings.ExportOnlyData = true;
                this.ExportSettings.IgnorePaging = true;
                // this.ExportSettings.OpenInNewWindow = true;
    
                DoPdfFormatting();
                DoExcelFormatting();
    
            }
            protected void RadGridDP_PdfExporting(object sender, GridPdfExportingArgs e)
            {
                e.RawHTML = e.RawHTML.Replace("border=\"1\"", "").Replace("style=\"", "style=\" border:0.5px Solid black; ")
                            .Replace("<thead>", String.Format("<thead>{0}", TableHeader)).Replace("</tbody>", String.Format("{0}</tbody>", TableFooter));
            }
            protected void RadGridDP_GridExporting(object sender, GridExportingArgs e)
            {
                e.ExportOutput = e.ExportOutput.Replace("<thead>", String.Format("<thead>{0}", TableHeader))
                                 .Replace("</tbody>", String.Format("{0}</tbody>", TableFooter));
            }
    
      }
    

    所以基本上我必须处理 PdfExporting(用于 Pdf)和 GridExporting(用于 excel).. 我还必须处理 Load、ItemCommand 和 ItemCreated。前一个是某些条件逻辑所必需的,后两个是 PDF 文档格式所必需的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2011-11-27
      相关资源
      最近更新 更多