解決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.新建的當然只有一個數據源,但在設計中可以再新增資料來源和資料集
如有不足歡迎指正 謝謝