ASP.NET中实现RadGrid每条记录单独导出为PDF一页的方法
实现RadGrid导出PDF时每条记录单独占一页
看了你的代码,问题出在后台的数据源处理上——你把所有记录的Message内容合并到了单个DataRow里,然后绑定到RadGrid,导出自然只会显示一页。要实现每条记录单独占一页,我们需要调整数据源逻辑,同时利用PDF导出的分页规则来强制每行分页。
解决方案步骤
1. 修正后台数据绑定逻辑
首先,不要合并所有记录,保留每条记录作为独立的行。然后在每条记录的末尾添加PDF能识别的强制分页标记(最后一行除外,避免多出空白页)。
修改后的print_page方法代码:
protected void print_page(object sender, EventArgs e) { try { // 替换成你获取原始数据的逻辑,确保DataTable包含每条独立的记录 DataTable originalDt = GetYourDataSource(); // 清理每条记录的HTML并添加分页标记 foreach (DataRow row in originalDt.Rows) { string message = row["Message"].ToString(); // 移除样式和脚本标签(保留你的原有逻辑) message = Regex.Replace(message, "(<style.+?</style>)|(<script.+?</script>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline); // 给除了最后一行之外的所有记录添加分页标记 if (originalDt.Rows.IndexOf(row) != originalDt.Rows.Count - 1) { message += "<div style='page-break-after: always;'></div>"; } row["Message"] = message; } // 直接绑定原始数据(每条记录一行) dlTemplate.DataSource = originalDt; dlTemplate.DataBind(); dlTemplate.MasterTableView.ExportToPdf(); } catch (Exception ex) { BLGeneral.LogException(ex); } }
2. 调整前台RadGrid配置
需要确保GridBoundColumn允许HTML内容(否则分页标记会被转义成文本),同时保持导出设置正确:
修改后的ASPX代码:
<telerik:RadGrid ID="dlTemplate" runat="server" AutoGenerateColumns="false" AllowPaging="true"> <GroupingSettings CaseSensitive="false" /> <PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric" /> <ExportSettings ExportOnlyData="true" OpenInNewWindow="true" IgnorePaging="true" FileName="Template"> <Pdf PageTitle="Letter Template" PaperSize="A4" PageWidth="270mm" PageHeight="297mm" /> </ExportSettings> <MasterTableView DataKeyNames="Message" TableLayout="Auto" HeaderStyle-CssClass="title-b14px" ItemStyle-CssClass="txtlable-b13px-normal"> <Columns> <!-- 新增HtmlEncode="false",确保HTML分页标记生效 --> <telerik:GridBoundColumn UniqueName="Message" DataField="Message" HeaderText="Message" HtmlEncode="false"> </telerik:GridBoundColumn> </Columns> </MasterTableView> </telerik:RadGrid>
关键说明
- 分页标记原理:
page-break-after: always是CSS分页规则,Telerik的PDF导出引擎会识别这个样式,在对应行之后自动分页。 - 最后一行处理:不给最后一行加分页标记,避免导出的PDF最后多一页空白。
- HtmlEncode设置:必须设为
false,否则<div>标签会被转义成文本,无法触发分页。
这样调整后,你的RadGrid导出的PDF就会每条记录单独占一页了——100条记录对应100页,每页只显示一条记录。
内容的提问来源于stack exchange,提问作者Srikanth Reddy
相关产品推荐
相关产品推荐

