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

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

第一步:创建一个Silverlight项目

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

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

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

第二步:添加PageReport

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

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

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

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

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

切换到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”中

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

完成以上操作之后,切换到“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); }

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏c#开发者

Asp.net dynamic Data web Site 之二创建第一个Web Site

Asp.net dynamic Data web Site 之二创建第一个Web Site 本专题介绍一个ASP.NET动态数据的网站的布局,其中包括这些文件...

45860
来自专栏林德熙的博客

win10 uwp 如何创建修改保存位图 创建保存图片在 Image 控件使用WriteableBitmap 转换通过读写像素转换 CanvasBitmap

在 UWP 使用底层的图像渲染就是使用 Softwarebitmap ,这个类提供直接数据修改,可以使用这个类进行软渲染。实际上 Softwarebitmap ...

41710
来自专栏程序员互动联盟

【Windows编程】系列第八篇:创建通用对话框

Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单、工具栏、状态栏以及各个控件。当然除了这些单独的...

360140
来自专栏腾讯NEXT学位

使用Sublime Text编辑器,你所不知道的11个秘密!

16920
来自专栏xiaoheike

Windows 托盘区域显示图标

这个结构体包含了向通知区域(底部任务栏右下角区域,下面都称为托盘)显示的信息。需要使用函数Shell_NotifyIcon。

22720
来自专栏佳爷的后花媛

markdown欢迎使用Markdown编辑器写博客

14720
来自专栏施炯的IoT开发专栏

Windows Universal 应用 – Tip Calculator

声明     以下内容取材于 Bob Tabor 的课程《Windows Phone 8.1 Development for Absolute Beginner...

17580
来自专栏静晴轩

sublime text下的Markdown写作

什么是 Markdown wiki Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如...

36470
来自专栏c#开发者

Convert string to DateTime

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页 察看本文应用于的产品 文章编号 : 307710 最后修改...

38290
来自专栏一个爱瞎折腾的程序猿

依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题

有园友在博问中提了这样一个问题 —— .NET Core 中文等非英文文字html编码输出问题,到我们的 ASP.NET Core 项目中一看,也是同样的问题。

9110

扫码关注云+社区

领取腾讯云代金券