You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C# WinForm中如何将主窗体文本框值传入Report1.rdlc文本框

解决VS2010中WinForms文本框值传入RDLC报表的问题

没问题,我帮你一步步搞定这个传值需求,在VS2010的C# WinForms环境下操作很清晰,咱们分步骤来:

第一步:给RDLC报表添加对应参数

首先得让报表“知道”要接收哪些值,所以先给Report1.rdlc定义参数:

  • 打开你的Report1.rdlc报表文件
  • 在报表空白处右键,选择报表参数
  • 在弹出的窗口里,点击添加按钮,依次创建四个参数:
    • 参数名称:p_SerialNo(注意大小写要和后面代码一致),数据类型选字符串
    • 参数名称:p_TypeNo,数据类型字符串
    • 参数名称:p_Date,数据类型字符串
    • 参数名称:p_TestEngineer,数据类型字符串
  • 点击确定保存参数设置

接下来把报表里的文本框和这些参数绑定:

  • 选中报表里需要显示对应值的文本框,右键选择表达式
  • 在表达式窗口里输入对应的参数引用,比如要显示SerialNo的文本框就输入:
    =Parameters!p_SerialNo.Value
    
  • 其他文本框同理,分别绑定对应的参数后保存报表

第二步:在主窗体中编写代码传递参数

假设你的主窗体有一个触发打印的按钮(比如btn_Print),咱们在它的点击事件里写逻辑,把文本框的值传到带ReportViewer的打印窗体:

方法一:直接在主窗体中设置ReportViewer参数

首先确保打印窗体(比如叫PrintForm)里的ReportViewer1控件的Modifiers属性设为Public(在PrintForm的设计视图里选中ReportViewer1,在属性窗口找Modifiers改成Public),然后在主窗体的按钮点击事件里写:

private void btn_Print_Click(object sender, EventArgs e)
{
    // 实例化打印窗体
    PrintForm printForm = new PrintForm();
    
    // 获取ReportViewer的本地报表对象
    LocalReport localReport = printForm.ReportViewer1.LocalReport;
    
    // 指定报表的嵌入资源路径(替换成你项目的命名空间,比如你的项目叫TestReportApp,就是TestReportApp.Report1.rdlc)
    localReport.ReportEmbeddedResource = "你的项目命名空间.Report1.rdlc";
    
    // 创建参数集合,把主窗体文本框的值传进去
    List<ReportParameter> reportParams = new List<ReportParameter>();
    reportParams.Add(new ReportParameter("p_SerialNo", tb_SerialNo.Text.Trim()));
    reportParams.Add(new ReportParameter("p_TypeNo", tb_TypeNo.Text.Trim()));
    reportParams.Add(new ReportParameter("p_Date", tb_Date.Text.Trim()));
    reportParams.Add(new ReportParameter("p_TestEngineer", tb_TestEngineer.Text.Trim()));
    
    // 给报表设置参数
    localReport.SetParameters(reportParams);
    
    // 刷新报表,确保参数生效
    printForm.ReportViewer1.RefreshReport();
    
    // 显示打印窗体
    printForm.ShowDialog();
}

方法二:在打印窗体中写公共方法接收参数(更规范)

如果不想把ReportViewer设为Public,推荐在PrintForm里写一个公共方法来处理参数:

在PrintForm的代码文件里添加:

public void LoadReportWithParameters(string serialNo, string typeNo, string date, string testEngineer)
{
    // 确认ReportViewer的ProcessingMode是Local(默认应该是,可在属性窗口检查)
    ReportViewer1.ProcessingMode = ProcessingMode.Local;
    
    // 指定报表路径
    LocalReport localReport = ReportViewer1.LocalReport;
    localReport.ReportEmbeddedResource = "你的项目命名空间.Report1.rdlc";
    
    // 创建并设置参数
    List<ReportParameter> reportParams = new List<ReportParameter>();
    reportParams.Add(new ReportParameter("p_SerialNo", serialNo));
    reportParams.Add(new ReportParameter("p_TypeNo", typeNo));
    reportParams.Add(new ReportParameter("p_Date", date));
    reportParams.Add(new ReportParameter("p_TestEngineer", testEngineer));
    
    localReport.SetParameters(reportParams);
    ReportViewer1.RefreshReport();
}

然后主窗体的按钮点击事件里调用这个方法:

private void btn_Print_Click(object sender, EventArgs e)
{
    PrintForm printForm = new PrintForm();
    // 传递主窗体文本框的值
    printForm.LoadReportWithParameters(
        tb_SerialNo.Text.Trim(),
        tb_TypeNo.Text.Trim(),
        tb_Date.Text.Trim(),
        tb_TestEngineer.Text.Trim()
    );
    printForm.ShowDialog();
}

注意事项

  • 报表参数的名称要和代码里的完全一致,包括大小写,否则参数无法传递
  • 确认报表的嵌入资源路径正确:可以在Report1.rdlc的属性窗口里看“嵌入的资源”的值,直接复制过来用
  • 如果ReportViewer没有显示报表,检查ProcessingMode是否设为Local,报表路径是否正确

这样操作后,主窗体文本框里的值就能准确显示到RDLC报表对应的位置了,要是有细节问题随时提!

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

火山引擎 最新活动