ActiveReports11 新特性(4): 运行时使用JSON 数据源

发布时间:2016/10/31 00:10 发布者:Lenka.Guo

返回博客中心

 

之前我们学习了(ActiveReports11 新特性(3): JSON数据的使用)设计时绑定静态数据源,但json一般在Web项目操作过程中生成的,所以运行时绑定JSON 数据源应用场景会更为广泛。

本文就主要讲解了如何在运行时为报表绑定JSON数据源。

有很多步骤与之前“运行时绑定数据源类似”只有因为在AR中使用JSON数据必须指定JSON Schema 文件或格式,会在后台绑定数据源时有略微区别,在之前运行时绑定数据源时,主要是通过调用Document.LocateDataSource接口来实现的。

而在JSON 运行时绑定数据源,当以下两种情况时应调用LocateDataSource方法:

l 未指定JSON数据源的ConnectionString;

l ConnectionString设置了,但是只指定了Schema,未指定JSON文件。

运行时支持

1. 新建Winform程序

clip_image002

2. 添加Viewer 控件

3. 添加RDL报表

clip_image004

3.1添加数据源

3.2 选择数据源类型“JSON”,并输入JSON Schema(必须要输入的)。输入完成后点击确定。

有了JSON Schema 才能生成对应的数据结构,调用JSON 可视化编辑器哦,如果大家不清楚JSON Schema可以使用网站工具来生成:http://jsonschema.net/#/

clip_image006

3.3 添加数据集

如果对于JSON 查询语法不是很了解,可以点击JSON查询生成器,会根据您输入的Schema来生成数据结构,您只需要选择需要的节点,会自动生成查询语句。

点击确定后会生成对应的字段。

clip_image008

添加表格控件,将数据字段绑定到表格中。到这一步,报表设计的工作就完成了,接下来再程序后台中来实现LocateDataSource 方法。

4. 实现MainForm_Load 方法:

var rptPath = new FileInfo(@"..\..\testReport.rdlx");

var definition = new PageReport(rptPath);

definition.Document.LocateDataSource += OnLocateDataSource;

reportPreview.ReportViewer.LoadDocument(definition.Document);

4.1 实现OnLocateDataSource方法

private void OnLocateDataSource(object sender, LocateDataSourceEventArgs args)

{

object data = null;

var dataSourceName = args.DataSourceName;

var source = new DataLayer();

if (dataSourceName == "DataSource1")

{

data = source.CreateData();

}

args.Data = data;

}

4.2 解析JSON 数据

public String CreateData()

{

string source_url = @"http://localhost:30187/Service.asmx/GetJson";

string responseText = null;

using (var webClient = new WebClient())

{

webClient.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("admin:1")); // username:password

webClient.Headers[HttpRequestHeader.ContentType] = "application/json;";

webClient.Encoding = Encoding.UTF8;

var responseJson = webClient.DownloadString(source_url);

Dictionary<string, string> values = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(responseJson);

if (values.ContainsKey("d"))

{

responseText = values["d"];

}

}

return responseText;

}

到这里JSON 数据运行时绑定就成功了。

 

您可以打开本地示例来查看源码:C:\Users\您的计算机名\Documents\GrapeCity Samples\ActiveReports 11\Page Reports And RDL Reports\Data\JsonDataSource\C#

补充:

AR支持动态绑定JSON数据源示例代码:

var report = new GrapeCity.ActiveReports.PageReport();
varjsonDataSource=new GrapeCity.ActiveReports.PageReportModel.DataSource();
jsonDataSource.Name = "storDs";
jsonDataSource.ConnectionProperties.DataProvider = "JSON";
jsonDataSource.ConnectionProperties.ConnectString = "jsondoc=c:\data.json";
// set up other properties and add data set, see http://arhelp.grapecity.com/webhelp/AR9/Bind%20Page%20Reports%20to%20a%20Data%20Source.html
report.Report.DataSources.Add(jsonDataSource);

 

您在使用产品过程中有任何疑问,可以登录葡萄城开发者社区和经验丰富的技术工程师、ActiveReports开发人员交流:了解更多

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网