以编程方式将报告分配给我的 reportViewer
Programmatically assign report to my reportViewer
我有一个报告查看器和多个报告(例如 Report1.rdlc、Report2.rdlc、ecc),
我如何以编程方式在它们之间切换?
我能够分配不同的报告,但是当我执行程序时它说我需要分配数据源,我该如何实现?
编辑:到目前为止,这是我的代码:
public Report()
{
InitializeComponent();
this.View_StatoMagTableAdapter.Fill(this.NGStoreV2DataSet.View_StatoMag);
this.mag2TableAdapter.Fill(this.NGStoreV2DataSet.mag2);
this.mag2BindingSource.DataMember = "mag2";
this.mag2BindingSource.DataSource = this.NGStoreV2DataSet;
}
private void reportViewer1_Load(object sender, EventArgs e)
{
this.reportViewer1.Reset();
var binding = new BindingSource();
binding.DataSource = this.NGStoreV2DataSet.mag2;
ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report2.rdlc";
this.reportViewer1.RefreshReport();
}
新版本还是不行,当我运行程序时,它仍然要求数据来源。
我已经尝试过不同的组合,但 none 的这个有效。
组合如:
var binding = new BindingSource();
binding.DataSource = this.NGStoreV2DataSet.mag2;
ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding);
或
ReportDataSource rds = new ReportDataSourc("NGStoreV2DataSet", this.mag2BindingSource);
编辑:我终于设法解决了这个问题!!我使用了错误的数据集(NGStoreV2DataSet 而不是 DataSet1 的报告数据集)
感谢 tezzo 和 Hadi 的大力帮助 ;)
您需要同时设置 ReportPath
和 DataSources
:
YourReportViewer.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc"
YourReportViewer.LocalReport.DataSources.Clear()
YourReportViewer.LocalReport.DataSources.Add(New ReportDataSource("YourTableName", yourDataTable))
您可以执行以下操作
var binding = new BindingSource();
binding.DataSource = yourData;
reportViewer1.Reset();
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NGStoreV2DataSet",
binding));
reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc";
reportViewer1.RefreshReport();
希望对您有所帮助
/*
制作一个数据表,这是价值,清除本地很重要,您在报告中称呼数据集的名称更匹配
*/
DataTable dGraph = clsDailyReports.MakeTmpDataSet.Invoke(con, SqlAtd).Tables[0];
rpt.LocalReport.DataSources.Clear();
Microsoft.Reporting.WebForms.ReportDataSource rptdBody = new Microsoft.Reporting.WebForms.ReportDataSource();
rptdBody.Name = "DataSet1";
rptdBody.Value = dBody;
rpt.LocalReport.DataSources.Add(rptdBody);
Microsoft.Reporting.WebForms.ReportDataSource rptdTop = new Microsoft.Reporting.WebForms.ReportDataSource();
rptdTop.Name = "DataSet2";
rptdTop.Value = dGraph;
rpt.LocalReport.DataSources.Add(rptdTop);
DataTable dDate = clsDailyReports.MakeTmpDataSet.Invoke(con, sSqlDate).Tables[0];
Microsoft.Reporting.WebForms.ReportDataSource rptDate = new Microsoft.Reporting.WebForms.ReportDataSource();
rptDate.Name = "DataSet3";
rptDate.Value = dDate;
rpt.LocalReport.DataSources.Add(rptDate);
rpt.LocalReport.ReportPath = System.Web.HttpContext.Current.Server.MapPath(@"~\Reports\rptUnAdjustedPeriodTotals.rdlc");
rpt.LocalReport.Refresh();
Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "ProjectName.ReportName.rdlc"
我有一个报告查看器和多个报告(例如 Report1.rdlc、Report2.rdlc、ecc), 我如何以编程方式在它们之间切换?
我能够分配不同的报告,但是当我执行程序时它说我需要分配数据源,我该如何实现?
编辑:到目前为止,这是我的代码:
public Report()
{
InitializeComponent();
this.View_StatoMagTableAdapter.Fill(this.NGStoreV2DataSet.View_StatoMag);
this.mag2TableAdapter.Fill(this.NGStoreV2DataSet.mag2);
this.mag2BindingSource.DataMember = "mag2";
this.mag2BindingSource.DataSource = this.NGStoreV2DataSet;
}
private void reportViewer1_Load(object sender, EventArgs e)
{
this.reportViewer1.Reset();
var binding = new BindingSource();
binding.DataSource = this.NGStoreV2DataSet.mag2;
ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report2.rdlc";
this.reportViewer1.RefreshReport();
}
新版本还是不行,当我运行程序时,它仍然要求数据来源。
我已经尝试过不同的组合,但 none 的这个有效。 组合如:
var binding = new BindingSource();
binding.DataSource = this.NGStoreV2DataSet.mag2;
ReportDataSource rds = new ReportDataSource("NGStoreV2DataSet", binding);
或
ReportDataSource rds = new ReportDataSourc("NGStoreV2DataSet", this.mag2BindingSource);
编辑:我终于设法解决了这个问题!!我使用了错误的数据集(NGStoreV2DataSet 而不是 DataSet1 的报告数据集) 感谢 tezzo 和 Hadi 的大力帮助 ;)
您需要同时设置 ReportPath
和 DataSources
:
YourReportViewer.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc"
YourReportViewer.LocalReport.DataSources.Clear()
YourReportViewer.LocalReport.DataSources.Add(New ReportDataSource("YourTableName", yourDataTable))
您可以执行以下操作
var binding = new BindingSource();
binding.DataSource = yourData;
reportViewer1.Reset();
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NGStoreV2DataSet",
binding));
reportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewerForm.Report1.rdlc";
reportViewer1.RefreshReport();
希望对您有所帮助
/* 制作一个数据表,这是价值,清除本地很重要,您在报告中称呼数据集的名称更匹配 */
DataTable dGraph = clsDailyReports.MakeTmpDataSet.Invoke(con, SqlAtd).Tables[0];
rpt.LocalReport.DataSources.Clear();
Microsoft.Reporting.WebForms.ReportDataSource rptdBody = new Microsoft.Reporting.WebForms.ReportDataSource();
rptdBody.Name = "DataSet1";
rptdBody.Value = dBody;
rpt.LocalReport.DataSources.Add(rptdBody);
Microsoft.Reporting.WebForms.ReportDataSource rptdTop = new Microsoft.Reporting.WebForms.ReportDataSource();
rptdTop.Name = "DataSet2";
rptdTop.Value = dGraph;
rpt.LocalReport.DataSources.Add(rptdTop);
DataTable dDate = clsDailyReports.MakeTmpDataSet.Invoke(con, sSqlDate).Tables[0];
Microsoft.Reporting.WebForms.ReportDataSource rptDate = new Microsoft.Reporting.WebForms.ReportDataSource();
rptDate.Name = "DataSet3";
rptDate.Value = dDate;
rpt.LocalReport.DataSources.Add(rptDate);
rpt.LocalReport.ReportPath = System.Web.HttpContext.Current.Server.MapPath(@"~\Reports\rptUnAdjustedPeriodTotals.rdlc");
rpt.LocalReport.Refresh();
Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "ProjectName.ReportName.rdlc"