Telerik RadGrid ExportToPDF()或ExportToExcel()无法正常工作

时间:2012-01-12 13:15:23

标签: telerik radgrid

我有一个继承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时,它可以正常工作。有什么区别?

1 个答案:

答案 0 :(得分: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文档