【ActiveReports】使用REST Web Service数据

本文主要讨论如何在ActiveReports 7.0中使用RESTful Web Service所返回的XML数据。为了实现该功能,我们可以在LocateDataSource事件中通过DataSet或Object数据提供器实现运行时的数据绑定。当报表引擎需要加载数据时,会触发LocateDataSource事件。通过REST Web Service获取XML数据之后,我们可以在运行时使用DataSet数据提供器给报表绑定数据源。

发布于 2013/03/04 00:00

ActiveReports

本文主要讨论如何在ActiveReports 7.0中使用RESTful Web Service所返回的XML数据。为了实现该功能,我们可以在LocateDataSource事件中通过DataSet或Object数据提供器实现运行时的数据绑定。当报表引擎需要加载数据时,会触发LocateDataSource事件。通过REST Web Service获取XML数据之后,我们可以在运行时使用DataSet数据提供器给报表绑定数据源。

?

实现,我们需要从一个URL中将XML数据加载到XmlDocument对象中,如何我们需要创建一个DataTable的实例,DataTable中的列名与XML中的节点名称对应。创建完成之后,我们可以遍历XmlDocument中的数据并填充中DataTable中,代码如下:

XmlDocument _doc = new XmlDocument();
dt = new DataTable();
dt.Columns.Add(new DataColumn("Title", typeof(String)));
dt.Columns.Add(new DataColumn("Artist", typeof(String)));
dt.Columns.Add(new DataColumn("Country", typeof(String)));
dt.Columns.Add(new DataColumn("Company", typeof(String)));
dt.Columns.Add(new DataColumn("Price", typeof(Double)));
dt.Columns.Add(new DataColumn("Year", typeof(Int32)));
_doc.Load("http://www.w3schools.com/xml/cd_catalog.xml");
XmlElement root = _doc.DocumentElement;
XPathNavigator navigator = _doc.CreateNavigator();
XPathNodeIterator cdData = navigator.Select("//CD");
while (cdData.MoveNext())
{
   XPathNodeIterator cdDataElements = cdData.Current.SelectChildren(XPathNodeType.Element);
   DataRow dr = dt.NewRow();
   while (cdDataElements.MoveNext())
    {
       //Read the values based on the element name
          switch (cdDataElements.Current.Name)
          {
               //convert values as necessary to match the business object's property types
               case "TITLE": dr["Title"] = cdDataElements.Current.Value.ToString();
                             break;
               case "ARTIST": dr["Artist"] = cdDataElements.Current.Value.ToString();
                              break;
               case "COUNTRY": dr["Country"] = cdDataElements.Current.Value.ToString();
                               break;
               case "COMPANY": dr["Company"] = cdDataElements.Current.Value.ToString();
                               break;
               case "PRICE": dr["Price"] = Convert.ToDouble(cdDataElements.Current.Value);
                             break;
               case "YEAR": dr["Year"] = Convert.ToInt32(cdDataElements.Current.Value);
                            break;
           }
      }
   dt.Rows.Add(dr);
}

如何在LocateDataSource事件中添加以下代码:

private void _runtime_LocateDataSource(object sender, LocateDataSourceEventArgs args)
{
  Object data = null;
  if (StringsAreEqual("DataSource1", args.DataSourceName))
  {
    if (StringsAreEqual("DataSet1", args.DataSetName))
    {
       data = dl.GetData;
    }
  }
}

?

运行截图:

?

源码下载:

XmlBindSourcec#.zip (18.91 kb)

ActiveReports 报表控件| 下载试用

ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForm / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求,作为专业的报表工具为全球超过 300,000 开发人员提供了全面的报表开发服务。

您对ActiveReports产品的任何技术问题,都有技术支持工程师提供1对1专业解答,点击此处即可发帖提问>>技术支持论坛

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态