2016-11-22 2 views
2

Ich habe seit langer Zeit Crystal Reports verwendet. Ich hatte ein Inventory-System in Windows-Formularen entwickelt.Crystal Report Keine Daten aus dem Dataset

Da ich Daten aus verschiedenen Tabellen bekommen in Crystal Reports, so habe ich benutzerdefinierte Datensatz machte es mit meinem erforderlichen Zeilen wie folgt gefüllt:

Code:

cmd = new SqlCommand(); 
SqlDataAdapter myDA = new SqlDataAdapter(); 
CustomDataSet myDS = new CustomDataSet(); 

con = new SqlConnection(cs.DBConn); 
cmd.Connection = con; 

//receipt code goes here 
       string query = "select Customer.CustomerName as Name,Customer.Address as Address,Customer.ContactNo as ContactNo, Product.ProductName as ItemName, ProductSold.Quantity as Quantity, Invoice_Info.InvoiceNo as InvoiceNumber, ProductSold.Price as PriceOfItem, ProductSold.Tax as TaxOnItem, ProductSold.Discount as DiscountOnItem, Invoice_Info.TotalPayment as PaidAmount, Invoice_Info.SoldBy as Salesman, Invoice_Info.CashedBy as Cashier, Invoice_Info.DiscountAmount as DiscountOnInvoice, Invoice_Info.PaymentType as PaymentType from Invoice_Info,Product,ProductSold,Customer where Invoice_Info.CustomerID=Customer.CustomerId and Invoice_Info.InvoiceNo=ProductSold.InvoiceNo and ProductSold.ProductID=Product.ProductId and Invoice_Info.InvoiceNo=" + txtInvoiceNo.Text; 
cmd.CommandText = query; 
cmd.CommandType = CommandType.Text; 
myDA.SelectCommand = cmd; 
myDA.Fill(myDS.Invoice); 

//if customer is walking customer show change else show credit of regular customer 
if (txtCustomerName.Text == Constants.WalkingCustomer) 
{ 
for (int i = 0; i < myDS.Invoice.Count; i++) 
{ 
myDS.Invoice[i].Balance = double.Parse(txtTotal.Text) - double.Parse(txtTotalPayment.Text); 
} 
} 

//filling company informtation 
myDS.Company.AddCompanyRow(Company.Name, Company.Address, Company.Phone); 
rptReceipt rpt = new rptReceipt(); 
rpt.SetDataSource(myDS); 
frmInvoiceReport frm = new frmInvoiceReport(); 
frm.crystalReportViewer1.ReportSource = rpt; 
frm.crystalReportViewer1.RefreshReport(); 
frm.Visible = true; 

Bild von CR entworfen Bericht:

enter image description here

Bild Custom Datensatz:

enter image description here

Dataset gefüllt Bild

enter image description here

leeren Bericht

enter image description here

Frage: Da ist alles perfekt. Warum werden meine Daten nicht im Bericht angezeigt?

+0

ein Formular anzuzeigen sind Sie eine Fehlermeldung bekommen? Passt der DataType aus Ihrer Datenbank und DataTable? – Prashanth

+0

Der Datentyp stimmt perfekt überein. Nichts fehlt. – Umar

Antwort

0

Ich hatte das gleiche Problem mit Daten überhaupt nicht angezeigt.

Angenommen, Sie bereits Ihre dataSet mit Ihren Daten gefüllt haben gesendet nur Ihre Datentabelle auf Ihren Bericht wie folgt aus:

 rptH.Database.Tables[0].SetDataSource(myDataTableCompany); 
     rptH.Database.Tables[1].SetDataSource(myInvoiceDataTable); 

die Reihenfolge der Bericht Tabellen im Debug-Menü prüfen, setzen Sie es so und es wird okay sein. (Oder die Reihenfolge ändern, wenn CR eine andere Reihenfolge will)

+0

hat immer noch nicht funktioniert. – Umar

+0

Ich tat das Ding 'rpt.Database.Tables [0] .SetDataSource ((System.Data.DataTable) myDS.Company); rpt.Database.Tables [1] .SetDataSource ((System.Data.DataTable) myDS.Invoice); ' – Umar

+0

Haben Sie vor dem Binden überprüft, ob in Ihren Datentabellen Zeilen vorhanden sind? Schließen Sie die Verbindung, bevor Sie die Datenquelle setzen, und nachdem Sie das Dataset gefüllt haben und versuchen Sie es mit – Furtiro

0

Für Name, Adresse, Telefon No Use TextObjects (Crystal Reports Textfeld) anstelle von Datatable und verwenden Sie es als

rptReciept reciept = new rptReciept(); 

    TextObject tName = (TextObject)reciept.ReportDefinition.ReportObjects["txtName"]; 
    TextObject tAddress = (TextObject)reciept.ReportDefinition.ReportObjects["txtAddress"]; 
    TextObject tPhone = (TextObject)reciept.ReportDefinition.ReportObjects["txtPhoenNo"]; 

Betrachtet man die geholt haben Daten von DB RDas ist die resultSet

tName.Text = rSelect.Table["c_name"].ToString(); 
    tAddress.Text = rSelect.Table["c_address"].ToString(); 
    tPhone.Text = rSelect.Table["c_phone"].ToString(); 

Für Rechnung allein Datensatz mit den Code unten einzelne INVOICE Datatable und versuchen Wo RDas ResultSet der Rechnung

012 ist

Der Code unten ist mit Crystal CRV

frmShowReport frm = new frmShowReport(); 
    frm.Show(); 
    reciept.SetDataSource(tblInvoice); 
    frm.crv.ReportSource = reciept; 
    frm.crv.Show(); 
+0

Es wirft indexOutOfBound Ausnahme: '((TextObject) rpt.ReportDefinition.ReportObjects [" txtCompanyName "]). Text = Company.Name; ' – Umar

+0

Haben Sie TextField in CrystalReports anstelle von DataField – Prashanth

+0

eingefügt Ja, ich habe TextObject im Crystal Report hinzugefügt, setzen Sie seinen Namen auf" txtCompanyName "und stellen Sie dann entsprechend dem Code ein. – Umar