/// <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 { } } }