2012-01-12 59 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 

(爲怪序列號,這些事件之間可能還有其他事件,但發生的順序是正確的)因此,整個網格會與數據反彈,因此命令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文件).. 我不得不處理負載, ItemCommand和ItemCreated。雖然前者對於某些條件邏輯是必需的,但稍後需要兩個來格式化PDF文檔