我有一个在datagridview中显示数据的程序。 datagridview中的数据来自数据集中的表。屏幕上的数据看起来不错,所以我决定添加一种打印数据的方法。
我创建了一个新表单,添加了一个reportviewer控件,并设计了该报表。我使用我的数据集作为报告的数据源。
然后我在原始表单中添加了一个按钮,这样当按下它时,它会显示带有reportviewer控件的表单。
我的问题是,当我点击打印按钮时,它会将我带到我的reportviewer控件表单,但它显示的报告只包含标题,没有数据。这就像我的数据集中没有数据!但是,当我单步执行调试时,它会在我的数据集中显示超过1000行。
所以,我的问题是,我忘了做什么?数据存在,它显示在一个表单上(使用datagridview)但它没有显示在reportviewer控件上(仅显示标题)。
实际上没有涉及编码。我刚刚创建了一个新表单,添加了reportviewer控件,设计了报表并告诉它使用我的数据集作为数据源。通常,这对我有用。我无法想象为什么它不起作用。
感谢您提供任何帮助或建议!
以下是我用来显示报告的代码:
private void btnPrint_Click(object sender, EventArgs e)
{
Form showReport = new frmPrintView();
showReport.Show();
}
这是我的两个屏幕的图像。数据显然在我的数据集中,否则在第一个屏幕上将没有数据。但是,第二个屏幕似乎显示我的数据集为空,因为除了标题之外什么都没有出现。
答案 0 :(得分:2)
我认为你缺少dataBind方法:
从考试70-516:TS:使用Microsoft .NET Framework 4访问数据:
ASP.NET controls require you to execute the DataBind method on the control to indicate
that the data is ready to be rendered. If you don’t execute the DataBind method, the control won’t render. When executing the DataBind method on a control, the control is obliged to call the DataBind method on its child controls. This means that you can execute the DataBind method on the Web form, and it will call the DataBind method on all its controls
将其添加到表单报告
上的表单加载事件答案 1 :(得分:0)
视频支持http://codepen.io/anon/pen/KzpKrm
你需要再次将数据添加到数据库中的ur数据集
billDataSet b1 = new billDataSet();
SqlDataAdapter s = new SqlDataAdapter("select * from TblOrder",con);
s.Fill(b1,b1.Tables[0].TableName);
ReportDataSource rds = new ReportDataSource("orders",b1.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportView er1.LocalReport.Refresh();
this.TblOrderTableAdapter.Fill(this.billDataSet.TblOrder, d1.ToString(),d2.ToString(), companyid);
this.reportViewer1.RefreshReport();