rdlc水晶报表在wpf里的使用

时间:2021-12-05 14:14:26

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;
        }

 

调用