rdlc水晶报表在wpf里的使用
1引用程序集
Microsoft.ReportViewer.WinForms
2 xaml 命名空间
xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
3 xaml 里用windowsFormsHost 来装报表控件
<WindowsFormsHost Margin="135,75,0,0" Panel.ZIndex="-1" Height="auto"> <rv:ReportViewer x:Name="reportViewer" /> </WindowsFormsHost>
3.初始化控件参数
this.reportViewer.Messages = new Health.Client.Base.ReportViewerMessagesZhcn();
public class ReportViewerMessagesZhcn : IReportViewerMessages { public string BackButtonToolTip { get { return "后退"; } } public string BackMenuItemText { get { return "后退"; } } public string ChangeCredentialsText { get { return "更改"; } } public string CurrentPageTextBoxToolTip { get { return "当前页"; } } public string DocumentMapButtonToolTip { get { return "文档视图"; } } public string DocumentMapMenuItemText { get { return "文档视图"; } } public string ExportButtonToolTip { get { return "导出"; } } public string ExportMenuItemText { get { return "选择格式"; } } public string FalseValueText { get { return "不正确的值"; } } public string FindButtonText { get { return "查找"; } } public string FindButtonToolTip { get { return "查找"; } } public string FindNextButtonText { get { return "下一个"; } } public string FindNextButtonToolTip { get { return "下一个"; } } public string FirstPageButtonToolTip { get { return "首页"; } } public string LastPageButtonToolTip { get { return "最后一页"; } } public string NextPageButtonToolTip { get { return "下一页"; } } public string NoMoreMatches { get { return "无匹配项"; } } public string NullCheckBoxText { get { return "空值"; } } public string NullCheckBoxToolTip { get { return "空值"; } } public string NullValueText { get { return "空值"; } } public string PageOf { get { return "页"; } } public string PageSetupButtonToolTip { get { return "页面设置"; } } public string PageSetupMenuItemText { get { return "页面设置"; } } public string ParameterAreaButtonToolTip { get { return "参数设置区"; } } public string PasswordPrompt { get { return "请输入密码:"; } } public string PreviousPageButtonToolTip { get { return "前一页"; } } public string PrintButtonToolTip { get { return "打印"; } } public string PrintLayoutButtonToolTip { get { return "打印"; } } public string PrintLayoutMenuItemText { get { return "打印"; } } public string PrintMenuItemText { get { return "打印"; } } public string ProgressText { get { return "正在生成报表......"; } } public string RefreshButtonToolTip { get { return "刷新"; } } public string RefreshMenuItemText { get { return "刷新"; } } public string SearchTextBoxToolTip { get { return "查找"; } } public string SelectAll { get { return "全选"; } } public string SelectAValue { get { return "SelectAValue"; } } public string StopButtonToolTip { get { return "停止"; } } public string StopMenuItemText { get { return "停止"; } } public string TextNotFound { get { return "未找到"; } } public string TotalPagesToolTip { get { return "总页数"; } } public string TrueValueText { get { return "正确值"; } } public string UserNamePrompt { get { return "用户名"; } } public string ViewReportButtonText { get { return "显示报表"; } } public string ViewReportButtonToolTip { get { return "显示报表"; } } public string ZoomControlToolTip { get { return "缩放"; } } public string ZoomMenuItemText { get { return "缩放"; } } public string ZoomToPageWidth { get { return "页宽"; } } public string ZoomToWholePage { get { return "整页"; } } }
4 .加载视图,设置视图RDLC的方法
private void ShowReportViewer(int index, Microsoft.Reporting.WinForms.ReportDataSource dataSourse, List<Microsoft.Reporting.WinForms.ReportParameter> reportParameters, System.Collections.IEnumerable detailDataSource) { ReportViewer reportViewer = SelectReportViewer(index); //索引超出范围 if (reportViewer == null) return; if (dataSourse != null) { reportViewer.LocalReport.ReportPath = GetReportFilePath(dataSourse.Name); reportViewer.LocalReport.DataSources.Clear(); reportViewer.LocalReport.DataSources.Add(dataSourse); } else { reportViewer.LocalReport.ReportPath = GetReportFilePath("ChargeFeezyAmountMain"); reportViewer.LocalReport.DataSources.Clear(); } if (reportParameters != null) { reportViewer.LocalReport.SetParameters(reportParameters); } if (detailDataSource != null) { _subDataSource = detailDataSource as List<ReportDataSource>; reportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); } //if (dataSourse.Name == "CancelArrears") //{ // var pageSettings = reportViewer.GetPageSettings(); // pageSettings.Landscape = false; // reportViewer.SetPageSettings(pageSettings); //} //else if (dataSourse.Name == "CarrearagePat" || dataSourse.Name == "RecoveryArrears") //{ // var pageSettings = reportViewer.GetPageSettings(); // pageSettings.Landscape = true; // reportViewer.SetPageSettings(pageSettings); //} reportViewer.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout); reportViewer.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent; reportViewer.ZoomPercent = 100; reportViewer.RefreshReport(); } private void ShowReportViewer1(int index, List<Microsoft.Reporting.WinForms.ReportDataSource> dataSourse, List<Microsoft.Reporting.WinForms.ReportParameter> reportParameters, System.Collections.IEnumerable detailDataSource) { ReportViewer reportViewer = SelectReportViewer(index); //索引超出范围 if (reportViewer == null) return; if (dataSourse != null) { reportViewer.LocalReport.ReportPath = Health.Reports.ReportHelper.GetReportFilePath(dataSourse[0].Name); reportViewer.LocalReport.DataSources.Clear(); foreach (var data in dataSourse) { reportViewer.LocalReport.DataSources.Add(data); } } else { reportViewer.LocalReport.ReportPath = Health.Reports.ReportHelper.GetReportFilePath("ChargeFeezyAmountMain"); reportViewer.LocalReport.DataSources.Clear(); } if (reportParameters != null) { reportViewer.LocalReport.SetParameters(reportParameters); } if (detailDataSource != null) { _subDataSource = detailDataSource as List<ReportDataSource>; reportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); } reportViewer.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout); reportViewer.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent; reportViewer.ZoomPercent = 100; reportViewer.RefreshReport(); } private ReportViewer SelectReportViewer(int index, bool isReset = true) { if (isReset) reportViewer.Reset(); return reportViewer; } private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) { foreach (var item in _subDataSource) { e.DataSources.Add(item); } }
public static string GetReportFilePath(string reportFileName) { string filePath= @"Reports\" + reportFileName + ".rdlc"; filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filePath); if(!System.IO.File.Exists(filePath)) { return ""; } return filePath; }
调用