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

wbgh16ku  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(74)

简介

基于下面的json示例,我尝试使用主报告和子报告定义一个Telerik报告,其中se second被馈送主报告json数据的子集。
基本上,数据流模仿的是:
1.应用将基础json数据注入主报表的jsonData(string)参数;
1.jsonData绑定为报表数据源;
1.应用JSON数据选择器;

  1. Json选定数据Employee节点注入子报表,子报表也将其作为json数据源使用。

步骤4出现问题,主报表呈现时出现[**报表参数'jsonData'**无效值]错误。
Telerik Report似乎无法将选中的json节点字段数据转换为正确的字符串。

完整上下文

对于完整上下文:

*两份报告

  • jsonData报表参数,数据类型为string;
  • 定义了JsonDataSource;
  • stringjsonData参数与mainJsonDataSource的绑定基于:
  • 属性路径:数据源.来源
  • 表达式:=Parameters.jsonData.Value
    *主报告
  • 使用JsonDatasource**$.Companies**数据选择器,生成一个表示包含公司列表的列表,每个示例具有:
    *Name,表示公司名称的字符串;
    *Employes,包含公司employes列表的对象。
  • 通过jsonData参数注入完整的json样本数据作为字符串;
    *分报表上
  • 还有一个jsonData报表参数,string数据类型;
  • 正在使用JsonDataSource**$**数据选择器,结果应该是:
  • 以下字段的列表:
    *Name,代表员工姓名的字符串;
    *工资,代表员工工资的数值。
    *再次在main-report上使用以下子报表参数Map:
  • 参数名称:jsonData
  • 参数值:字段.员工
  • 我正在使用Telerik Report Designer v15.1.21.716(桌面版)

数据选择器似乎将jsonEmployesnode date转换为System.Object[],这让我很难弄清楚如何将其转换回json字符串。
我已经广泛搜索了文档,网络,ChatGPT和类似的一个有效的解决方案。到目前为止还没找到

在你帮我之前

虽然我最感谢任何人试图帮助我的努力:

  • 我正在追求一个JSON唯一的数据源解决方案。我的意思是,我对任何其他支持的Telerik报告数据源不感兴趣;
  • 解决方案必须在设计时和运行时都有效。
{
    "Companies": [
        {
            "Name": "Company1",
            "Employes": [
                {
                    "Name": "Joe",
                    "Wage": 1000
                },
                {
                    "Name": "Jack",
                    "Wage": 2000
                }
            ]
        },
        {
            "Name": "Company2",
            "Employes": [
                {
                    "Name": "Mary",
                    "Wage": 3000
                },
                {
                    "Name": "Mike",
                    "Wage": 4000
                }
            ]
        }
    ]
}
stszievb

stszievb1#

实际上,将“Employes”对象传递给子报表的“jsonData”参数不应该起作用,因为该对象不能直接转换为JSON字符串。您必须通过**CStr()**函数进行转换。
但是,您可以使用"如何表示分层嵌套数据知识库"一文中描述的绑定,而不是使用参数设置子报表的数据源。
我还想提一下,在R3 2022 SP1发行版中,DataSource属性也被添加到SubReport项中。这使得我上面建议的方法过时了,因为它允许您直接在主报表中绑定子报表的数据源。例如:

方案一

基于DataSource属性的SubReport项绑定:

Property path: DataSource

Expression: = Fields.Employes

方案二

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

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

Property path: jsonData

Expression: = CStr(Fields.Employes)

记住...

      • 方案1**,不需要显式绑定数据源内部子报表;
      • 方案2**,需要在子报表参数与其数据源之间附加绑定,如原帖子所述。

有关此主题的更多详细信息,请查看原始Telerik's original post

相关问题