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

如何为RDLC本地报表添加多组SetParameters实现多页输出?

RDLC报表多页显示数据的正确实现方式

你当前的问题在于:循环调用SetParameters时,每次都会覆盖之前设置的参数,所以最终报表只会保留最后一组参数的值,自然只显示最后一项数据。RDLC的参数是全局单值的,不能用来实现多页数据展示,正确的做法是使用数据源绑定。

步骤1:定义数据实体类

先创建和你的adat对象结构一致的实体类(假设类名为KartonData):

public class KartonData
{
    public string ugyfelKOD { get; set; }
    public string ugyfelnev { get; set; }
    public string uzletkoto { get; set; }
    public string fizetes { get; set; }
    public string ugyfelcime { get; set; }
    public string kapcsolattarto { get; set; }
    public string email { get; set; }
    public string szallitasNap { get; set; }
    public string szallitasKor { get; set; }
    public string csereGyakorisag { get; set; }
    public string megjegyzes { get; set; }
    public string megrendelo { get; set; }
    public string ev { get; set; }
    public string telszam { get; set; }
    public string szallitasUtemzes { get; set; }
    public string szallitandoSzonyegek { get; set; }

    // 可在这里统一处理空值
    public string GetSafeValue(string value)
    {
        return string.IsNullOrEmpty(value) ? " " : value;
    }
}

步骤2:配置RDLC报表的数据集

  1. 打开RDLC报表设计器,右键点击报表数据面板中的「数据集」→「添加数据集」
  2. 选择「对象数据源」,关联上面定义的KartonData类,命名数据集为dsKarton
  3. 将报表中的所有文本框控件的Value属性,替换为绑定数据集字段,比如=Fields!ugyfelKOD.Value,替代原来的参数绑定=Parameters!rUgyfelKOD.Value

步骤3:修改后台代码绑定数据源

替换原来循环设置参数的逻辑,直接将整个adatLista作为数据源传给报表:

public void ReportPrint_Load(object sender, EventArgs e)
{
    reportViewer.ProcessingMode = ProcessingMode.Local;
    LocalReport localReport = reportViewer.LocalReport;

    reportViewer.LocalReport.ReportPath = "KartonReport.rdlc";

    // 统一处理数据空值(若adatLista已处理可跳过)
    var processedData = adatLista.Select(adat => new KartonData
    {
        ugyfelKOD = string.IsNullOrEmpty(adat.ugyfelKOD) ? " " : adat.ugyfelKOD,
        ugyfelnev = string.IsNullOrEmpty(adat.ugyfelnev) ? " " : adat.ugyfelnev,
        uzletkoto = string.IsNullOrEmpty(adat.uzletkoto) ? " " : adat.uzletkoto,
        fizetes = string.IsNullOrEmpty(adat.fizetes) ? " " : adat.fizetes,
        ugyfelcime = string.IsNullOrEmpty(adat.ugyfelcime) ? " " : adat.ugyfelcime,
        kapcsolattarto = string.IsNullOrEmpty(adat.kapcsolattarto) ? " " : adat.kapcsolattarto,
        email = string.IsNullOrEmpty(adat.email) ? " " : adat.email,
        szallitasNap = string.IsNullOrEmpty(adat.szallitasNap) ? " " : adat.szallitasNap,
        szallitasKor = string.IsNullOrEmpty(adat.szallitasKor) ? " " : adat.szallitasKor,
        csereGyakorisag = string.IsNullOrEmpty(adat.csereGyakorisag) ? " " : adat.csereGyakorisag,
        megjegyzes = string.IsNullOrEmpty(adat.megjegyzes) ? " " : adat.megjegyzes,
        megrendelo = string.IsNullOrEmpty(adat.megrendelo) ? " " : adat.megrendelo,
        ev = string.IsNullOrEmpty(adat.ev) ? " " : adat.ev,
        telszam = string.IsNullOrEmpty(adat.telszam) ? " " : adat.telszam,
        szallitasUtemzes = string.IsNullOrEmpty(adat.szallitasUtemzes) ? " " : adat.szallitasUtemzes,
        szallitandoSzonyegek = string.IsNullOrEmpty(adat.szallitandoSzonyegek) ? " " : adat.szallitandoSzonyegek
    }).ToList();

    // 绑定数据源到报表
    reportViewer.LocalReport.DataSources.Clear();
    reportViewer.LocalReport.DataSources.Add(new ReportDataSource("dsKarton", processedData));

    this.reportViewer.RefreshReport();
}

步骤4:设置单条数据分页

若需要每条数据单独占一页:

  1. 在报表设计器中右键点击主体→「属性」
  2. 切换到「分页」选项卡,勾选「在组的结尾处分页」
  3. 或直接在主体底部插入分页符:右键点击主体空白处→「插入」→「分页符」

这样报表会自动为adatLista中的每一项生成独立页面,不会只显示最后一条数据。

内容的提问来源于stack exchange,提问作者Zxld1337

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:05:21