当前位置: 首页 > news >正文

在Silverlight中动态绑定页面报表(PageReport)的数据源

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

ActiveReports 7中引入了一种新的报表模型——PageReport(页面布局报表),这种报表模型又细分了两种具体显示形式: 
o    固定页面布局报表模型(FPL)是ActiveReports 7中首创的一种 .NET报表模型,通过这种模型可以非常方便地设计出拥有复杂格式的报表模板。您只需定义好页面大小,然后以一种可视化的方式添加需要的控件并设置数据填充方式,剩下的工作将由报表引擎自动完成。 
o    连续页面布局报表模型(CPL)主要通过数据区域来控制报表的布局,并能自动实现数据分页显示。这种报表模型非常适合于在同一个报表中显示多个数据集数据的需求,而且不必精细的控制数据在页面中的显示位置。连续页面布局报表还允许用户通过折叠/ 展开的方式来隐藏/显示报表内容。 
下面就来看看在Silverlight平台中如果动态绑定PageReport数据源,本文中创建的报表选用的是连续页面布局模型(CPL)。 

第一步:创建一个Silverlight项目


在VS2010中创建一个名为【PageReportDataSource_Silverlight_CSharp】的Silverlight应用程序

1

指定应用程序使用的Silverlight版本,我们选择Silverlight 4,并创建一个新的Web项目

2

这样我们就创建了一个最基本的Silverlight应用程序。 

第二步:添加PageReport


在【PageReportDataSource_Silverlight_CSharp.Web】项目中添加一个PageReport, 
添加项目对话框中我们选择【ActiveReports 7 Page Report】模板类型。新添加的PageReport默认为“固定页面布局报表(FPL)”,我们打开PageReport的设计视图,然后在VS的菜单中可以看到一个【Report】菜单项,此时,我们可以通过【Report】菜单中的【Convert to CPL Report】菜单项,将报表转换为“连续页面布局报表(CPL)”

3

完成以上操作之后,我们在PageReport1报表中添加一个Table控件,并按照下图设置单元格的显示内容

到现在,我们完成了所有报表部分的开发工作,下面就需要给PageReport绑定数据源 

第三步:获取Viewer控件所要显示的报表内容


接下来我们通过一个WebService来返回Viewer所需要的报表内容。 
在【PageReportDataSource_Silverlight_CSharp.Web】项目中,添加一个WebService,在添加项目对话框中选择Web分类下的Web Service 模板

4

切换到ReportService.asmx的代码视图,并添加以下代码:


[WebMethod]
    public Byte[] GetProductsReport()
    {
        // 创建一个空白页面报表
        GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport();
        // 加载报表布局
        rpt.Load(new System.IO.FileInfo(Server.MapPath("PageReport1.rdlx")));
        // 创建并设置数据源
        GrapeCity.ActiveReports.PageReportModel.DataSource myDataSource = new GrapeCity.ActiveReports.PageReportModel.DataSource();
        myDataSource.Name = "DataSource1";
        myDataSource.ConnectionProperties.DataProvider = "OLEDB";
        myDataSource.ConnectionProperties.ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\Reels.mdb";
        // 设置数据集
        GrapeCity.ActiveReports.PageReportModel.DataSet myDataSet = new GrapeCity.ActiveReports.PageReportModel.DataSet();
        GrapeCity.ActiveReports.PageReportModel.Query myQuery = new GrapeCity.ActiveReports.PageReportModel.Query();
        myDataSet.Name = "DataSet1";
        myQuery.DataSourceName = "DataSource1";
        myQuery.CommandType = GrapeCity.ActiveReports.PageReportModel.QueryCommandType.Text;
        myQuery.CommandText = GrapeCity.ActiveReports.Expressions.ExpressionInfo.FromString("SELECT TOP 50 * FROM Product");
        myDataSet.Query = myQuery;
        // 添加字段
        GrapeCity.ActiveReports.PageReportModel.Field _field = new
        GrapeCity.ActiveReports.PageReportModel.Field("ProductID", "ProductID", null);
        myDataSet.Fields.Add(_field);
        _field = new GrapeCity.ActiveReports.PageReportModel.Field("InStock", "InStock", null);
        myDataSet.Fields.Add(_field);
        _field = new GrapeCity.ActiveReports.PageReportModel.Field("Price", "Price", null);
        myDataSet.Fields.Add(_field);
        // 将数据源和数据集绑定到报表中
        rpt.Report.DataSources.Add(myDataSource);
        rpt.Report.DataSets.Add(myDataSet);
        // 保存Rdf格式的报表
        GrapeCity.ActiveReports.Export.Rdf.RdfRenderingExtension rdfe = new GrapeCity.ActiveReports.Export.Rdf.RdfRenderingExtension();
        GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider ms = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
        rpt.Run();
        rpt.Document.Render(rdfe, ms);
        GrapeCity.ActiveReports.Document.SectionDocument doc_rdf = new GrapeCity.ActiveReports.Document.SectionDocument();
        doc_rdf.Load(ms.GetPrimaryStream().OpenStream() as System.IO.MemoryStream);
        return doc_rdf.Content;
    }

第四步:在Silverlight中浏览报表内容


切换到【PageReportDataSource_Silverlight_CSharp】工程中,打开“MainPage.xaml”的设计视图,此时在VS工具箱的“ActiveReports 7”分类下可以看到一个Viewer的控件,将该控件添加到“MainPage.xaml”中

6

在【PageReportDataSource_Silverlight_CSharp】工程中,添加ReportService.asmx的引用:

7

完成以上操作之后,切换到“MainPage.xaml”的代码视图,添加Viewer.Loaded事件的代码:

private void viewer1_Loaded(object sender, RoutedEventArgs e)
    {
        // 从WebService加载报表
        ReportServiceReference.ReportServiceSoapClient client = new ReportServiceReference.ReportServiceSoapClient();
        client.GetProductsReportAsync();
        client.GetProductsReportCompleted += new EventHandler<ReportServiceReference.GetProductsReportCompletedEventArgs>(client_GetProductsReportCompleted);            
    }
    void client_GetProductsReportCompleted(object sender, ReportServiceReference.GetProductsReportCompletedEventArgs e)
    {
        // 显示报表
        System.IO.MemoryStream ms = new System.IO.MemoryStream(e.Result);
        GrapeCity.Viewer.Common.StreamDocumentLoader loader = new GrapeCity.Viewer.Common.StreamDocumentLoader(ms, GrapeCity.Viewer.Common.DocumentFormat.Rdf);
        viewer1.LoadDocument(loader);
    }

运行工程,我们可以得到以下结果:

8

源码下载地址: 在Silverlight中动态绑定页面报表(PageReport)的数据源

使用控件下载地址:点击下载

转载于:https://my.oschina.net/u/852404/blog/145289

相关文章:

  • xsd
  • Apache Struts2 远程命令执行漏洞
  • perf 简介
  • linux 压缩解压缩命令
  • Qt4过渡至Qt5
  • 啊速度发说法
  • Tiny6410 LED字符设备驱动
  • java对文件的检索
  • ×××服务让用户看得见
  • Sencha Touch 2.1学习图表Chart概述
  • tail tailf 使用
  • openal 基础知识3
  • JavaScript 表单验证
  • 网站架构资料收集整理
  • Parallels Desktop 8 虚拟机安装 windows 教程
  • [数据结构]链表的实现在PHP中
  • 【React系列】如何构建React应用程序
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • github从入门到放弃(1)
  • JavaScript服务器推送技术之 WebSocket
  • Linux CTF 逆向入门
  • Phpstorm怎样批量删除空行?
  • Rancher-k8s加速安装文档
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • VuePress 静态网站生成
  • Vultr 教程目录
  • webpack+react项目初体验——记录我的webpack环境配置
  • 翻译--Thinking in React
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 模型微调
  • 七牛云假注销小指南
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • ​2021半年盘点,不想你错过的重磅新书
  • # 计算机视觉入门
  • $ git push -u origin master 推送到远程库出错
  • (1)Android开发优化---------UI优化
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Unity3DUnity3D在android下调试
  • (转)德国人的记事本
  • 、写入Shellcode到注册表上线
  • .NET : 在VS2008中计算代码度量值
  • .net 按比例显示图片的缩略图
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • ??eclipse的安装配置问题!??
  • @GlobalLock注解作用与原理解析