我尝试使用下面的代码,但它不起作用。
我使用SQL查询将报告数据存储在ReportDataSet
中。之后,我将此ReportDataSet
设置为DataSource
对象的CrystalReport
。
private void btnGenReport_Click(object sender, EventArgs e)
{
CrystalReport1 objRpt = new CrystalReport1();
string sql; //creating sql query
sql = "SELECT invoice.InvoiceNo, invoice.Date, invoiceitems.Name, invoice.InvoiceTo, invoice.CusName, invoiceitems.Qty, invoiceitems.Rate, invoiceitems.Amount ";
sql += "FROM (invoice INNER JOIN invoiceitems ON invoice.Date = invoiceitems.Date) ";
sql += "WHERE (invoice.Date BETWEEN '" + DateTimePickerFrom.Value + "' AND '" + DateTimePickerTo.Value + "');";
ReportDataSet ds = new ReportDataSet();
string path = Application.StartupPath + "\\";
string conStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + path + "SMS_DB.mdf;Integrated Security=True;User Instance=True";
SqlConnection con = new SqlConnection(conStr); // create connection
try
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(ds, "InvoiceItemData");
objRpt.SetDataSource(ds.Tables["InvoiceItemData"]);
crystalReportViewer1.ReportSource = objRpt;
con.close();
}
catch (Exception ex)
{
MessageBox.Show("Error ! \n" + ex.ToString());
}
}
答案 0 :(得分:1)
我将假设一些事情:
ReportDataSet
是使用VS的数据集设计器通过与数据库文件SMS_DB.mdf的连接设置的,并且此文件中已存在数据rt1
,其中数据源是项目中类型化数据集InvoiceItemData
中的表ReportDataSet
换句话说,我假设你已经设置了所有内容的条件,你已经完成了最新的非beta环境中的btnReportGen
按钮点击所做的一切,并且你不要试图在另一台机器上运行这个版本。
现在,我有一些建议和澄清要做。
如果你考虑上述所有问题,我认为你会发现自己有一个正常工作的项目。但是,如果你仍然卡住了,我可以通过每个建议,并通过屏幕截图和示例代码修复所有内容。如果你需要我这样做是没关系的,因为我在VS2010中创建了各种各样的Crystal Report项目,我只是从经验告诉你,作为程序员和用户最适合你的是什么。你可能会认为只是通过编程方式输入所有内容并将其丢给报表查看器来节省时间和资源,但这也是它不合作的原因。