예제 #1
0
        /// <summary>
        /// Load Report.
        /// </summary>
        /// <param name="rptViewer">The instance of Report Viewer Control.</param>
        /// <param name="reportSource">The instance of RdlcReportModel.</param>
        public static void LoadReport(this ReportViewer rptViewer,
                                      RdlcReportModel reportSource)
        {
            RdlcMessageService.Instance.SendMessage("Begin Load Report.");

            rptViewer.ProcessingMode = ProcessingMode.Local;
            LocalReport lr = rptViewer.LocalReport;

            if (null != reportSource && null != reportSource.Definition &&
                null != reportSource.Definition.RdlcInstance &&
                null != reportSource.DataSources)
            {
                RdlcMessageService.Instance.SendMessage("Begin Load Report Definition.");

                // Load Rdlc file
                lr.LoadReportDefinition(reportSource.Definition.RdlcInstance);

                RdlcMessageService.Instance.SendMessage("Clear Report Data source.");
                // Clear all datasource before assign new one.
                lr.DataSources.Clear();

                if (reportSource.DataSources.Count > 0)
                {
                    // Set all data source.
                    foreach (var dataSource in reportSource.DataSources)
                    {
                        if (null == dataSource.Items)
                        {
                            continue;
                        }
                        RdlcMessageService.Instance
                        .SendMessage("Add New Report Data source - " + dataSource.Name);
                        lr.DataSources.Add(new ReportDataSource(
                                               dataSource.Name, dataSource.Items));
                    }
                }
                else
                {
                    RdlcMessageService.Instance
                    .SendMessage("No New Report Data source.");
                }

                if (lr.DataSources.Count > 0 &&
                    null != reportSource.Parameters && reportSource.Parameters.Count > 0)
                {
                    foreach (RdlcReportParameter para in reportSource.Parameters)
                    {
                        if (null == para || string.IsNullOrWhiteSpace(para.Name))
                        {
                            continue;
                        }
                        try
                        {
                            RdlcMessageService.Instance
                            .SendMessage("Set Report parameter - " + para.Name);

                            lr.SetValue(para.Name, para.Value);
                        }
                        catch (Exception) { }
                    }
                }
                else
                {
                    RdlcMessageService.Instance
                    .SendMessage("No Report parameter assigned.");
                }

                if (lr.DataSources.Count > 0)
                {
                    RdlcMessageService.Instance
                    .SendMessage("Set Report Page setting from Printer page setting.");

                    // Read Setting and set to report viewer
                    ReportPageSettings rdlcPageSettings = lr.GetDefaultPageSettings();
                    System.Drawing.Printing.PageSettings pageSettings = new System.Drawing.Printing.PageSettings();

                    pageSettings.PaperSize = rdlcPageSettings.PaperSize;
                    pageSettings.Landscape = rdlcPageSettings.IsLandscape;
                    pageSettings.Margins   = rdlcPageSettings.Margins;

                    rptViewer.SetPageSettings(pageSettings);
                    // refresh
                    rptViewer.LocalReport.Refresh();
                }
                else
                {
                    RdlcMessageService.Instance
                    .SendMessage("No Report data source so cannot set report page setting.");
                }
            }

            rptViewer.RefreshReport();
            // Set display mode to print layout.
            rptViewer.SetDisplayMode(DisplayMode.PrintLayout);

            if (null != reportSource && null != reportSource.Definition &&
                null != reportSource.Definition.RdlcInstance)
            {
                try
                {
                    reportSource.Definition.Dispose();
                }
                catch { }
            }
        }