在Silverlight中動態綁定頁面報表(PageReport)的數據源

ActiveReports 7中引入了一種新的報表模型——PageReport(頁面佈局報表),這種報表模型又細分了兩種具體顯示形式: 
o    固定頁面佈局報表模型(FPL)是ActiveReports 7中獨創的一種 .NET報表模型,經過這種模型能夠很是方便地設計出擁有複雜格式的報表模板。您只需定義好頁面大小,而後以一種可視化的方式添加須要的控件並設置數據填充方式,剩下的工做將由報表引擎自動完成。 
o    連續頁面佈局報表模型(CPL)主要經過數據區域來控制報表的佈局,並能自動實現數據分頁顯示。這種報表模型很是適合於在同一個報表中顯示多個數據集數據的需求,並且沒必要精細的控制數據在頁面中的顯示位置。連續頁面佈局報表還容許用戶經過摺疊/ 展開的方式來隱藏/顯示報表內容。 
下面就來看看在Silverlight平臺中若是動態綁定PageReport數據源,本文中建立的報表選用的是連續頁面佈局模型(CPL)。 
c#

第一步:建立一個Silverlight項目


在VS2010中建立一個名爲【PageReportDataSource_Silverlight_CSharp】的Silverlight應用程序
ide

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)」
post

3

完成以上操做以後,咱們在PageReport1報表中添加一個Table控件,並按照下圖設置單元格的顯示內容 spa

到如今,咱們完成了全部報表部分的開發工做,下面就須要給PageReport綁定數據源 
設計

第三步:獲取Viewer控件所要顯示的報表內容


接下來咱們經過一個WebService來返回Viewer所須要的報表內容。 
在【PageReportDataSource_Silverlight_CSharp.Web】項目中,添加一個WebService,在添加項目對話框中選擇Web分類下的Web Service 模板
code

4

切換到ReportService.asmx的代碼視圖,並添加如下代碼: orm


[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」中
htm

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)的數據源

使用控件下載地址:點擊下載

相關文章
相關標籤/搜索