2012-01-12 10 views
1

私はRadGridを継承する単純なクラスを持っています。 RadGridにボタンを追加し、そのボタンにClickイベントハンドラを追加します。ボタンが必要な位置に正しく追加され、クリックイベントハンドラが起動していますが、radGrid.ExportToExcel()は何もしていません。実際、クリックするとページがポストバックすると、ボタンは消えます。なぜこうなった?Telerik RadGrid ExportToPDF()または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

私は解決策を見つけました。たびRadGridロード、それはこの方法で様々なイベントを呼び出します:

1. Page OnLoad 
m. RadGrid OnLoad 
x. NeedDataSource 

をし、(上記のように追加)ボタンをクリックすると、イベントは奇妙用として

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

(このように呼ばれていますシリアル番号は、これらのイベントの間に他のイベントがありますが、発生順序は正しい) です。したがって、Grid全体がデータでリバウンドされ、exportPdfへのコマンドがフラッシュされます。だから何も起こらない。 興味深いことに、1つの特別なボタンを追加する必要はありません.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用)と(Excel用)GridExporting .. を処理しなければならなかった私は負荷を処理しなければなりませんでした、 ItemCommandとItemCreatedも同様です。前者はいくつかの条件付きロジックに必要でしたが、後で2つはPDFドキュメントの書式設定に必要でした

関連する問題