找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-21 13:55  /   查看:5673  /  回复:0
相关文章:http://gcdn.grapecity.com/showtopic-6716.html

此文是紧接着Silverlight中动态绑定PageReport数据源(GrapeCity数据提供器)文章讲解如何动态绑定PageReport的数据源,此文中的方法是使用DataSet数据提供器将System.Data.DataSet作为PageReport的数据源。

第一步:创建一个Silverlight项目
在VS2010中创建一个名为【PageReportDataSource_Silverlight_CSharp_2】的Silverlight应用程序

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


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


第三步:添加虚拟数据源
打开PageReport1的设计界面,在VS菜单的View>Other Windows中打开Report Explorer 7


在Report Explorer 7窗口中,在DataSource节点中添加一个名为DataSetDataSource数据源,并且在类型下拉框中选择Dataset Provider


在DataSetDataSource数据源中添加以下两个数据集
Name:ProductsDataSet
Fields:ProductID、InStock、Price


Name:PersonDataSet
Fields:PersonID、FirstName、LastName、DateOfBirth


第四步:设计报表模板
在PageReport1中添加两个Table、第一个Table的DataSetName设置为ProductsDataSet,第二个Table的DataSetName设置为PersonDataSet


第五步:准备数据源
在PageReportDataSource_Silverlight_CSharp_2.Web中创建一个名为DataLayer的类来组织并返回数据源,代码如下:
  1.     internal sealed class DataLayer
  2.     {
  3.         private DataSet dataSetData;
  4.         public DataLayer()
  5.         {
  6.             LoadDataToDataSet();
  7.         }

  8.         public DataSet DataSetData
  9.         {
  10.             get { return dataSetData; }
  11.         }

  12.         private void LoadDataToDataSet()
  13.         {
  14.             string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\Reels.mdb";

  15.             dataSetData = new DataSet();
  16.             OleDbConnection conn = new OleDbConnection(connStr);
  17.             OleDbCommand cmd = new OleDbCommand("", conn);
  18.             OleDbDataAdapter adapter = new OleDbDataAdapter();
  19.             adapter.SelectCommand = cmd;

  20.             DataTable dt = new DataTable();
  21.             dt.TableName = "Products";
  22.             cmd.CommandText = "SELECT TOP 50 * From Product";
  23.             adapter.Fill(dt);
  24.             dataSetData.Tables.Add(dt);

  25.             DataTable dt2 = new DataTable();
  26.             dt2.TableName = "Person";
  27.             cmd.CommandText = "SELECT TOP 50 * From Person";
  28.             adapter.Fill(dt2);
  29.             dataSetData.Tables.Add(dt2);
  30.         }
  31.     }
复制代码


在PageReportDataSource_Silverlight_CSharp_2.Web中创建一个名为ReportService1的WebService返回报表内容:
  1.         [WebMethod]
  2.         public Byte[] GetProductsReport()
  3.         {
  4.             System.IO.FileInfo rptPath = new System.IO.FileInfo(Server.MapPath("PageReport1.rdlx"));
  5.             //Create a report definition that loads an existing report.
  6.             GrapeCity.ActiveReports.PageReport definition = new GrapeCity.ActiveReports.PageReport(rptPath);
  7.             definition.ConfigurationProvider = new GrapeCity.ActiveReports.Configuration.DefaultConfigurationProvider();
  8.             //Load the report definition into a new page document.
  9.             GrapeCity.ActiveReports.Document.PageDocument runtime = new GrapeCity.ActiveReports.Document.PageDocument(definition);
  10.             //Attach the runtime to an event. This line of code creates the event shell below.
  11.             runtime.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(runtime_LocateDataSource);

  12.             GrapeCity.ActiveReports.Export.Rdf.RdfRenderingExtension rdfe = new GrapeCity.ActiveReports.Export.Rdf.RdfRenderingExtension();
  13.             GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider ms = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();

  14.             runtime.Render(rdfe, ms);

  15.             GrapeCity.ActiveReports.Document.SectionDocument doc_rdf = new GrapeCity.ActiveReports.Document.SectionDocument();
  16.             doc_rdf.Load(ms.GetPrimaryStream().OpenStream() as System.IO.MemoryStream);

  17.             return doc_rdf.Content;
  18.         }

  19.         void runtime_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
  20.         {
  21.             DataLayer dl = new DataLayer();
  22.             switch (args.DataSetName.ToUpper())
  23.             {
  24.                 case "PRODUCTSDATASET":
  25.                     args.Data = dl.DataSetData.Tables["Products"];
  26.                     break;
  27.                 case "PERSONDATASET":
  28.                     args.Data = dl.DataSetData.Tables["Person"];
  29.                     break;
  30.             }
  31.         }
复制代码

注意:要在PageReportDataSource_Silverlight_CSharp_2.Web中添加GrapeCity.ActiveReports.Export.Rdf.v7的引用

第六步:在Silverlight端加载报表
在PageReportDataSource_Silverlight_CSharp_2中添加ReportService1的引用


并给viewer1的Load事件添加以下后台代码:
  1.         private void viewer1_Loaded(object sender, RoutedEventArgs e)
  2.         {
  3.             // 从WebService加载报表
  4.             ReportServiceReference.ReportService1SoapClient client = new ReportServiceReference.ReportService1SoapClient();
  5.             client.GetProductsReportAsync();
  6.             client.GetProductsReportCompleted += new EventHandler<ReportServiceReference.GetProductsReportCompletedEventArgs>(client_GetProductsReportCompleted);
  7.         }

  8.         void client_GetProductsReportCompleted(object sender, ReportServiceReference.GetProductsReportCompletedEventArgs e)
  9.         {
  10.             // 显示报表
  11.             System.IO.MemoryStream ms = new System.IO.MemoryStream(e.Result);
  12.             GrapeCity.Viewer.Common.StreamDocumentLoader loader = new GrapeCity.Viewer.Common.StreamDocumentLoader(ms, GrapeCity.Viewer.Common.DocumentFormat.Rdf);
  13.             viewer1.LoadDocument(loader);
  14.         }
复制代码


运行结果:


源码下载:VS2010 + ActiveReports 7 V7.0.6158.0 + Silverlight 4

本帖子中包含更多资源

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

x

0 个回复

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