2016-12-20 2 views
0

Ich muss einen Crystal Report erstellen, dessen Daten aus Dataset aufgefüllt werden. Datensatz hat drei Datentypen. Nämlich:Mehrere Datentypen im Dataset verwenden

CustDetais
Buchungsdetails
FoodNExtra

Wenn ich Setup-Crystal-Bericht über Crystal Report Wizard, ich neuen Bildschirm bekam die enter image description here Nicht sicher sagt, was hier zu tun, so dass ich nur als nächstes geklickt. Und heres Crystal Report Viewer meinen Code für:

private void CRKOTQoute_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     MySqlCommand cmd = new MySqlCommand("select CustName,Phone,Address,Email from tblCustDetails where [email protected]", 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 [email protected]", 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 [email protected]", 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); 
    } 
} 

habe ich genauso wie here erwähnt.

Und wenn ich Kristallbericht laufen lasse, gibt es keinen Fehler aber keine Daten werden angezeigt. Ich habe versucht, nur eine Datentabelle zu verwenden, und es hat gut funktioniert. Auch ich benutze MySQL als Datenbank.

Antwort

0

Versuchen und fusionieren die drei Datensätze in einer vor ihnen in die Berichtsdatenquelle zuweisen:

ds.Merge(ds1) 
ds.Merge(ds2) 

Auf diese Weise ds sollten alle Daten enthalten (alle Tabellen) in ds, ds1 und ds2. Weisen Sie dann als Datenquelle des Berichts nur ds zu.

0

Ich denke, dass Crystal Reports nur eine SELECT-Anweisung als Datenquelle pro Bericht unterstützt (zumindest ist dies in der Crystal Reports 8.5 UI, die ich verwendet habe), wenn Sie mehr verwenden, ist sein Verhalten ein wenig unvorhersehbar. Das ist wahrscheinlich der Grund, warum der Assistent von dir verlangt, sich an die Tische zu setzen. Wenn eine Join-Abfrage, die alle gewünschten Daten enthält, keine Lösung für Sie ist, dann ist wahrscheinlich die einzige Lösung, Unterberichte in Ihrem Bericht hinzuzufügen. Aber dennoch kann man sich programmatisch nicht hinzufügen, können Sie sie im Entwurfsmodus hinzufügen sollen, und fügen Sie dann die Datensätze als Datenquellen über Code wie folgt:

printKOTqoute.Subreports[0].SetDataSource(ds); 
printKOTqoute.Subreports[1].SetDataSource(ds1); 
printKOTqoute.Subreports[2].SetDataSource(ds2); 

Auch diese Besuche How to set datasource of Sub crystal report in c# win form app