You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:38:17