在 Telerik Reporting (Desktop) 中,如何将 json 子节点注入子报告字符串参数

问题描述 投票:0回答:1

简介

基于下面的 json 示例,我尝试使用主报告和子报告定义一个 Telerik 报告,其中第二个报告包含主报告 json 数据的子集。

基本上,数据流模仿如下:

  1. 应用程序将基本 json 数据注入主报告中 jsonData(字符串)参数;
  2. jsonData绑定为报表数据源;
  3. 应用Json数据选择器;
  4. Json 选定的数据 Employes 节点被注入到子报表中,子报表也会将其用作 json 数据源。

第 4 步出现了问题,渲染主报告时出现 [报告参数“jsonData”的值无效] 错误。

似乎

Telerik Report无法将选定的json节点字段数据转换为正确的字符串。

完整上下文

完整上下文:

  • 在两份报告中

    • 有一个

      string数据类型的jsonData报告参数;

    • 定义了一个

      JsonDataSource

    • 字符串

      jsonData 参数和主 JsonDataSource 之间的绑定基于:

        属性路径:
      • DataSource.Source
      • 表达式:=
      • Parameters.jsonData.Value
  • 主要报告

    正在使用
      JsonDatasource
    • $.Companies 数据选择器,生成一个表示包含公司列表的列表,每个实例具有:
  • Name,代表公司名称的字符串;

  • Employes,包含公司员工列表的对象。

      完整的示例 json 数据通过
    • jsonData 参数 作为字符串注入;
  • 关于子报告

      还有一个
    • string数据类型的jsonData报告参数; 正在使用
    • JsonDataSource
    • $ 数据选择器,这应该会导致:
        以下字段的列表:
        • Name,代表员工姓名的字符串;
        • 工资,代表员工工资的数值。
  • 再次在主报告上,我使用以下子报告参数映射:

      参数名称:
    • jsonData
    • 参数值:
    • Fields.Employes
  • 我正在使用

    Telerik Report Designer v15.1.21.716(桌面版)

数据选择器似乎将 json

Employes 节点日期转换为 System.Object[],这让我很难弄清楚如何将其转换回 json 字符串。

我已经在文档、网络、ChatGPT 等方面广泛搜索了有效的解决方案。到目前为止,还没有运气。

在你帮助我之前

尽管我非常感谢任何试图帮助我的人:

    我正在追求仅 json 数据源解决方案。我的意思是,我对任何其他支持的 Telerik Reporting 数据源不感兴趣;
  • 解决方案必须在设计时和运行时都有效。
{ "Companies": [ { "Name": "Company1", "Employes": [ { "Name": "Joe", "Wage": 1000 }, { "Name": "Jack", "Wage": 2000 } ] }, { "Name": "Company2", "Employes": [ { "Name": "Mary", "Wage": 3000 }, { "Name": "Mike", "Wage": 4000 } ] } ] }
    
json report subreport telerik-reporting
1个回答
1
投票
事实上,将“Employes”对象传递给子报表的“jsonData”参数应该不起作用,因为该对象无法直接转换为 JSON 字符串。您必须通过

CStr() 函数将其转换。

但是,您可以使用

如何表示分层嵌套数据知识库文章中描述的绑定,而不是使用参数来设置子报表的数据源。

我还想提一下,在

R3 2022 SP1 版本中,DataSource 属性也被添加到 SubReport 项中。这使得我上面建议的方法已经过时了,因为它允许您直接在主报表中绑定子报表的数据源。 例如:

解决方案1

基于DataSource属性的SubReport项绑定:

Property path: DataSource Expression: = Fields.Employes
解决方案2

在@Julio提供的示例中,它允许注入json节点作为子报告参数,而不是直接数据源,您应该使用以下方法。

通过子报表参数绑定子报表项:

Property path: jsonData Expression: = CStr(Fields.Employes)
请记住...

  • 解决方案1,不需要显式地将内部子报表绑定到数据源;

  • 解决方案2,需要子报表之间额外绑定 参数及其数据源,如原始帖子所述。

有关此主题的更多详细信息,请查看原文

Telerik 的原始帖子

© www.soinside.com 2019 - 2024. All rights reserved.