1. 程式人生 > >解決vs2015引用時沒有Report Viewer的問題 (附WPF做Reportviewer的例項)

解決vs2015引用時沒有Report Viewer的問題 (附WPF做Reportviewer的例項)

1.選擇“工具”>“Nuget包管理器”>“程式包管理器控制檯”

2.執行命令:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms -Pre

3.在專案-引用上點右鍵,選擇“新增引用”,在.net framework組建選項卡中選擇“瀏覽”,然後在你的工程根目錄下的“\packages\Microsoft.ReportingServices.ReportViewerControl.Winforms.140.1000.523\lib\net40”目錄下選擇“Microsoft.ReportViewer.WinForms.dll”等檔案,然後report viewer就被新增到你的專案裡了!


WPF做Reportviewer的例項

一、

新增引用後,在wpf專案xmal中引入名稱空間

             xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

             xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"

  新增一個reportviewer

             <WindowsFormsHost>
              <rv:ReportViewer x:Name="_reportViewer" Width="300"/> <!--ProcessingMode="Remote"遠端處理方式-->
             </WindowsFormsHost>

二、

    右鍵點選專案  新增-新建項

點選新增按鈕,選擇自己的資料來源資料集

點選下一步按鈕,排列欄位(具體自己嘗試)

點選下一步選擇佈局,下一步選擇樣式(無關緊要,不再截圖),點選完成

三、

在xaml.cs後臺程式碼檔案中新增如下程式碼

    /// <summary>
    /// DetectorQuery.xaml 的互動邏輯
    /// </summary>
    public partial class DetectorReportAndQuery : UserControl
    {
        private bool _isReportViewerLoaded;
        public DetectorReportAndQuery()
        {
            InitializeComponent();
            _reportViewer.Load += _reportViewer_Load;

        }


        private void _reportViewer_Load(object sender, EventArgs e)
        {
            if (!_isReportViewerLoaded)
            {
                Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new
                Microsoft.Reporting.WinForms.ReportDataSource();
                Microsoft.Reporting.WinForms.ReportDataSource reportDataSource2 = new

                 Microsoft.Reporting.WinForms.ReportDataSource();    //第二個資料來源,可在下方的紅色字型中找到建立方法

                InternalRadiationSystemDataSet dataset = new InternalRadiationSystemDataSet();


                dataset.BeginInit();


                reportDataSource1.Name = "DataSet";
                reportDataSource1.Value = dt;


                reportDataSource2.Name = "DataSet1";    
                reportDataSource2.Value = listMeasureData;


                this._reportViewer.LocalReport.DataSources.Add(reportDataSource1);
                this._reportViewer.LocalReport.DataSources.Add(reportDataSource2);


                this._reportViewer.LocalReport.ReportPath = "../../Report/ReportDetail.rdlc";
                dataset.EndInit();




                InternalRadiationSystemDataSetTableAdapters.ReportViewTableAdapter
                ReportInfo = new
                InternalRadiationSystemDataSetTableAdapters.ReportViewTableAdapter();
                ReportInfo.ClearBeforeFill = true;




                ReportInfo.Fill(dataset.ReportView);
                if (dataset.ReportView.Rows.Count == 0)
                {
                    MessageBox.Show("沒有查詢到相應記錄!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                    return;
                }
                if (dataset.ReportView.Select(filter).FirstOrDefault()!=null)
                {
                    dt.Rows.Add(dataset.ReportView.Select(filter).FirstOrDefault().ItemArray);
                }


                //Padding margin = new Padding();
                //_reportViewer.Margin = "20,0";
                _reportViewer.RefreshReport();
                _isReportViewerLoaded = true;


            }
        }
    }
F5執行即可看到效果
ps:
1.InternalRadiationSystemDataSet 指的是第二張圖中你建立報表嚮導時選擇的資料來源    
2.新建的當然只有一個數據源,但在設計中可以再新增資料來源和資料集


如有不足歡迎指正  謝謝