如何为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报表的数据集
- 打开RDLC报表设计器,右键点击报表数据面板中的「数据集」→「添加数据集」
- 选择「对象数据源」,关联上面定义的
KartonData类,命名数据集为dsKarton - 将报表中的所有文本框控件的
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:设置单条数据分页
若需要每条数据单独占一页:
- 在报表设计器中右键点击主体→「属性」
- 切换到「分页」选项卡,勾选「在组的结尾处分页」
- 或直接在主体底部插入分页符:右键点击主体空白处→「插入」→「分页符」
这样报表会自动为adatLista中的每一项生成独立页面,不会只显示最后一条数据。
内容的提问来源于stack exchange,提问作者Zxld1337
相关产品推荐
相关产品推荐

