我必须创建一个水晶报告,其数据将从Dataset填充。数据集有三个数据表。 即:
CustDetais
BookingDetails
FoodNExtra
当我通过Crystal Report向导设置水晶报表时,我看到了的新屏幕 不知道该怎么做,所以我只是点击下一步。 继承我的水晶报告查看器代码:
private void CRKOTQoute_Load(object sender, EventArgs e)
{
try
{
MySqlCommand cmd = new MySqlCommand("select CustName,Phone,Address,Email from tblCustDetails where custid=@custid", con.con);
cmd.Parameters.AddWithValue("@custid", BLDashboard.custid);
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataSet1 ds = new DataSet1();
adapter.Fill(ds, "CustDetais");
if (ds.Tables["CustDetais"].Rows.Count == 0)
{
MessageBox.Show("No Data Found", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
MySqlCommand cmd1 = new MySqlCommand("select BookingID,BookingDate,Event,EventDate,EventTime,Pax,Service,ServiceTime from tblBookingDetails where BookingID=@Bookid", con.con);
cmd.Parameters.AddWithValue("@bookid", BLDashboard.bookingID);
MySqlDataAdapter adapter1 = new MySqlDataAdapter(cmd1);
DataSet1 ds1 = new DataSet1();
adapter.Fill(ds1, "BookingDetails");
if (ds1.Tables["BookingDetails"].Rows.Count == 0)
{
MessageBox.Show("No Data Found", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
MySqlCommand cmd2 = new MySqlCommand("select FoodMenu,ExtraItem from tblItem where BookingID=@Bookid1", con.con);
cmd.Parameters.AddWithValue("@bookid1", BLDashboard.bookingID);
MySqlDataAdapter adapter2 = new MySqlDataAdapter(cmd2);
DataSet1 ds2 = new DataSet1();
adapter.Fill(ds2, "BookingDetails");
if (ds2.Tables["FoodNExtra"].Rows.Count == 0)
{
MessageBox.Show("No Data Found", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
RPTKOTQoute printKOTqoute = new RPTKOTQoute();
//RPTKitchenQoute printKOTqoute = new RPTKitchenQoute();
//RPTKOTTest printKOTqoute = new RPTKOTTest();
printKOTqoute.SetDataSource(ds);
printKOTqoute.SetDataSource(ds1);
printKOTqoute.SetDataSource(ds2);
crystalReportViewer1.ReportSource = printKOTqoute;
System.Drawing.Printing.PrintDocument printDocument = new System.Drawing.Printing.PrintDocument();
printKOTqoute.PrintOptions.PrinterName = printDocument.PrinterSettings.PrinterName;
printKOTqoute.PrintOptions.PrinterName = "EPSON TM-U220 Receipt";
printKOTqoute.PrintToPrinter(1, false, 0, 0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
我使用与here相同的方法。
当我运行水晶报告时没有错误但没有显示数据。 我尝试使用一个数据表,它工作正常。 我也使用MySQL作为数据库。
答案 0 :(得分:0)
尝试将三个数据集合并为一个,然后再将它们分配给报告数据源:
ds.Merge(ds1)
ds.Merge(ds2)
这样,ds应该包括ds
,ds1
和ds2
中的所有数据(所有表格)。然后,仅指定ds
作为报告的数据源。
答案 1 :(得分:0)
我认为Crystal Reports仅支持一个SELECT语句作为每个报告的数据源(至少在我使用过的Crystal Reports 8.5 UI中就是这种情况),如果你使用更多它的行为有点不可预测。这可能是向导要求您加入表格的原因。如果连接查询将带来所需的所有数据不适合您,那么可能唯一的解决方案是在报表中添加子报表。但仍然无法以编程方式添加它们,您应该在设计模式下添加它们,然后通过以下代码将数据集作为数据源附加:
printKOTqoute.Subreports[0].SetDataSource(ds);
printKOTqoute.Subreports[1].SetDataSource(ds1);
printKOTqoute.Subreports[2].SetDataSource(ds2);
另请查看How to set datasource of Sub crystal report in c# win form app