Telerik RadGrid ExportToPDF () или ExportToExcel () не работает - PullRequest
1 голос
/ 12 января 2012

У меня есть простой класс, наследующий 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 Ответ

1 голос
/ 30 января 2012

Я нашел решение.Всякий раз, когда 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

...