2012-01-12 83 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文档