请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Eden.Sun Wyn认证

超级版主

231

主题

4106

帖子

7827

积分

超级版主

Rank: 8Rank: 8

积分
7827

Wyn高级认证Wyn认证

Eden.Sun Wyn认证
超级版主   /  发表于:2025-3-26 18:46  /   查看:36  /  回复:0
本帖最后由 Eden.Sun 于 2025-3-31 13:54 编辑

    前面介绍了创建 Object 和 DataSet 类型的运行时数据源。今天我们继续介绍运行时数据源的第三种场景——在程序中修改数据源的连接信息。
   
    我们以JSON数据源为例进行介绍。
    1. 报表设计
    1.1 添加数据源:首先是报表的数据源设计,这里我们选择"Json Provider(Json 提供程序)":
   

    1.2 添加数据集:数据集中有两个位置需要修改,
    第一个是"查询"的位置,这里是根据最终接口返回的数据结构书写对应的JSON表达式,如我使用的测试接口返回的数据结构是一个对象数组,所以此处的表达式就  是直接从数组中进行解析;
    第二个是"字段"的位置:这里是接口返回的字段信息,根据测试接口返回的信息,我这里的报表字段就是:userId、id、title 和 body 。所以最终的设计如下:

     接口返回的数据结构:
   
    根据接口返回数据,在报表数据集中的设计:
   
   
    1.3 数据展示:数据源、数据集创建完之后,使用这个数据集进行报表设置,展示数据:
   

    2. 代码内容
    2.1 Startup.cs:
    首先是 Startup.cs 中的内容,这里也是和之前通过数据集/对象动态添加数据不同的地方,之前是直接将数据内容塞进报表的数据集中。而这里我们只修改数据源连接信息,之后的发送请求、获取数据一直到解析、渲染都是报表按照本身逻辑自动执行的。所以在 UseReportViewer 的 settings 中我们修改的是 Provider :
  app.UseReportViewer(settings =>
  {
      var reportsFolder = Path.Combine(env.ContentRootPath, "Reports");
      // settings.UseFileStore(new DirectoryInfo(reportsFolder));
      settings.UseReportProvider(new MyJsonProvider());
  });

  

    2.2 MyJsonProvider.cs
    第二步就是需要自己实现一个提供器(Provider)的类,实现 IReportProvider 接口:
   
    并且重写其中的方法,其中 GetReportDescriptor 是对报表的描述:
   

    第二个方法 GetReport 是获取报表内容信息,我们要修改数据源就是再这里进行处理,方法中的 reportId 就是报表名称,我们根据报表名称加载到报表之后,就可以修改其中的json连接字符串:
// 设置报表数据源连接信息
private Stream GetData(string reportName)
{
     PageReport pageReport = new PageReport();
     pageReport.Load(new FileInfo("D:\\GC-CODE\\AR\\动态数据源\\ActiveReportsCoreApplication1\\Reports\\" + reportName));
     string jsonUrl = "jsondoc=https://jsonplaceholder.typicode.com/posts";
     pageReport.Report.DataSources[0].ConnectionProperties.ConnectString = jsonUrl;
     byte[] bytesOfString = Encoding.UTF8.GetBytes(pageReport.ToRdlString());
     return new MemoryStream(bytesOfString);
}

  

    3. 结果查看
    至此就已经设计完成,预览查看最终的效果:
   

    有需要的小伙伴可以下载附件中的工程进行参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部