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

如何在C#中通过循环将列表参数传入Crystal Report并从DataGridView获取Delivery No

我来帮你梳理下如何把提取到的_DELIVERYNO列表传入Crystal Report,这里有两种常见的实用方法,你可以根据自己的报表需求来选:

先提个小细节

你现有代码里最后那个循环的list应该是_DELIVERYNO吧?不然会报未定义的错误,记得先修正过来哦😉


方法1:用Crystal Report的多值参数传递(最常用)

Crystal Report本身支持接收多值参数,这是传递多个Delivery No最直接的方式,步骤如下:

  1. 在报表设计器里准备参数
    打开你的Crystal Report,创建一个新参数,命名为@DeliveryNos(名字可自定义,但要和代码里对应),类型选“字符串”,并且勾选「允许多个值」选项。

  2. 在C#代码里给参数赋值
    你可以在get_INVOICE_DATA_RPT方法结束后,添加这段代码来传递参数:

    // 假设你已经实例化了报表对象,替换成你的报表类名
    ReportDocument crReport = new YourReportFileName(); 
    
    // 创建参数值集合
    ParameterValues paramValues = new ParameterValues();
    foreach (string deliveryNo in _DELIVERYNO)
    {
        ParameterDiscreteValue discreteVal = new ParameterDiscreteValue();
        discreteVal.Value = deliveryNo;
        paramValues.Add(discreteVal);
    }
    
    // 给报表参数赋值
    crReport.SetParameterValue("@DeliveryNos", paramValues);
    // 抑制参数提示框(不需要用户输入的话添加这句)
    crReport.ParameterFields["@DeliveryNos"].CurrentValues = paramValues;
    
    // 最后绑定到报表查看器
    crystalReportViewer1.ReportSource = crReport;
    
  3. 在报表里使用参数
    比如你要筛选数据的话,可以在报表的选择公式里写:

    {YourTableName.DeliveryNo} in {?@DeliveryNos}
    

    这样报表就只会显示匹配这些Delivery No的数据啦。


方法2:把列表转成临时数据源绑定(适合展示列表本身)

如果你的报表需要直接展示所有选中的Delivery No,或者要基于这个列表做更复杂的逻辑,可以把_DELIVERYNO转成DataTable作为报表的数据源:

  1. 创建临时DataTable并填充数据

    private void BindDeliveryNosAsDataSource()
    {
        // 创建一个只有DeliveryNo列的DataTable
        DataTable dtDelivery = new DataTable();
        dtDelivery.Columns.Add("DeliveryNo", typeof(string));
    
        // 把列表里的内容填充进去
        foreach (string no in _DELIVERYNO)
        {
            DataRow row = dtDelivery.NewRow();
            row["DeliveryNo"] = no;
            dtDelivery.Rows.Add(row);
        }
    
        // 绑定到报表
        ReportDocument crReport = new YourReportFileName();
        crReport.SetDataSource(dtDelivery);
        crystalReportViewer1.ReportSource = crReport;
    }
    
  2. 报表设计器里匹配数据源
    在报表设计时,你需要添加这个DataTable作为数据源(可以通过「ADO.NET数据集」定义结构,或者直接导入临时DataTable的结构),然后把DeliveryNo字段拖曳到报表的合适位置即可。


一些注意点

  • 代码里的报表类名、参数名、字段名一定要和报表设计器里的完全一致,Crystal Report是大小写敏感的哦。
  • 如果用多值参数,一定要在报表设计时勾选「允许多个值」,不然代码里传多个值会报错。

内容的提问来源于stack exchange,提问作者Cát Tường Vy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:24