服务器端创建RadGrid后绑定Excel导出事件未触发求助
RadGrid动态创建时Excel导出格式化事件未触发的问题解决
我太懂这种断点打了半天却根本不进去的郁闷了!你这个问题大概率是动态创建RadGrid时的事件绑定时机或者控件生命周期没处理对,结合你的代码片段,我给你梳理几个必查的点:
1. 动态控件的事件必须在页面早期生命周期绑定
动态创建的RadGrid不像静态声明的控件会自动被页面管理,你必须在Page_Init或者Page_Load的早期阶段完成控件创建和事件绑定,而且每次页面回发都要重复这个操作(因为动态控件不会存在于ViewState里)。
如果你的blabla()方法是在导出按钮的点击事件里才执行的,那太晚了——页面的事件处理阶段已经过去了,事件根本注册不上。正确的做法是把控件创建和事件绑定移到页面初始化阶段:
protected void Page_Init(object sender, EventArgs e) { RadGrid dg = new RadGrid(); // 先绑定事件!再做其他配置 dg.ExcelExportCellFormatting += RadGrid_Equipment_ExcelExportCellFormatting; dg.ID = "RadGrid_Equipment"; // 给控件设固定ID,回发时才能正确识别 dg.DataSource = dt; dg.ExportSettings.IgnorePaging = true; dg.ExportSettings.OpenInNewWindow = true; // 一定要把控件添加到页面的容器(比如PlaceHolder)里 YourPlaceHolder.Controls.Add(dg); } // 你的事件处理方法 protected void RadGrid_Equipment_ExcelExportCellFormatting(object sender, ExcelExportCellFormattingEventArgs e) { // 这里放你的格式化逻辑,比如设置单元格背景色 e.Cell.Style["background-color"] = "#FFFFCC"; }
2. 事件绑定顺序不能搞反
一定要先绑定事件,再设置数据源、导出配置。如果先把数据源绑好了再挂事件,控件的事件队列已经初始化完成,新绑定的事件不会被纳入导出流程。
3. 别漏了显式触发导出操作
光配置导出参数还不够,你需要在触发导出的操作(比如按钮点击)里调用导出方法,这样事件才会在导出过程中被触发:
protected void btnExportToExcel_Click(object sender, EventArgs e) { // 从容器里找到创建好的RadGrid RadGrid dg = (RadGrid)YourPlaceHolder.FindControl("RadGrid_Equipment"); // 触发导出,此时事件才会执行 dg.MasterTableView.ExportToExcel(); }
4. 确认事件方法的签名完全匹配
检查你的RadGrid_Equipment_ExcelExportCellFormatting方法签名是不是和官方要求的一致:
- 返回值必须是
void - 参数必须是
object sender和ExcelExportCellFormattingEventArgs e - 方法的访问修饰符至少是
protected(要让页面生命周期能访问到)
内容的提问来源于stack exchange,提问作者Robel Haile
相关产品推荐
相关产品推荐

