webentwicklung-frage-antwort-db.com.de

So binden Sie den Crystal-Report an ein manuell erstelltes DataSet

Ich möchte DataSet aus Code erstellen und als Datenquelle für Crystal Reports festlegen.
Ich möchte keine DataSet-Xsd-Datei in VS erstellen, wenn ich nicht muss. Nur reiner Code.

DataSet ds = new DataSet();
DataTable tbl = new DataTable();
DataColumn cln = new DataColumn();
// I fill row, columns, table and add it to ds object
...

Wenn ich dann einen Bericht brauche, verwende ich:

myReport.SetDataSource(ds);

Das Problem hierbei ist, dass ich nicht weiß, wie ich diesen Bericht binden soll? Wie füge ich Felder hinzu?
Ich habe einen Text und binäre Daten (Bild).

9
1110

Es gibt nur einen Ausweg. Wie von rosado vorgeschlagen. Wenig erklärt 1. CReate eine RPT-Datei. 2. Erstellen Sie eine XSD mit den gewünschten Spalten. 3. Ziehen Sie die Spalten auf den Bildschirm. Formatieren Sie es nach Bedarf. 4. Erstellen Sie nun eine Verbindung, und füllen Sie dieses Dataset mit einem Adapter aus. 5. Das Ausfüllen des u-Datasets füllt die Berichtsspalten automatisch.

Nachfolgend finden Sie einen Beispielcode aus einem meiner Projekte.

Invoice invoice = new Invoice(); // instance of my rpt file
var ds = new DsBilling();  // DsBilling is mine XSD
var table2 = ds.Vendor;
var adapter2 = new VendorTableAdapter();
adapter2.Fill(table2);                   

var table = ds.Bill;
var adapter = new BillTableAdapter();
string name = cboCustReport.Text;
int month = int.Parse(cboRptFromMonth.SelectedItem.ToString());
int year = int.Parse(cboReportFromYear.SelectedItem.ToString());
adapter.Fill(table, name,month,year);

ds.AcceptChanges();

invoice.SetDataSource(ds);
crystalReportViewer1.ReportSource = invoice;
crystalReportViewer1.RefreshReport();
13
user240141

versuchen Sie es so ...

DataSet ds = new DataSet();
   oleAdapter.Fill(ds);
   ReportDocument rpt = new ReportDocument();
   rpt.load();
   rpt.Database.Tables[0].SetDataSource(ds.Tables[0]); 
   this.crystalReportViewer1.ReportSource = rpt;
2
Enigma State
// Use dummy image data column namely Photo, to store file system Images into data base table
GlobalVar.sql = " SELECT rollno AS reg_no, CAST(0xADB AS image) As Photo FROM mast_roll Where Rollno IN ('120512','120518')  ";
GlobalVar.da = new OleDbDataAdapter(GlobalVar.sql, GlobalVar.con);
GlobalVar.ds = new DataSet();
GlobalVar.da.Fill(GlobalVar.ds, "st_detail");

// load photo into data table
foreach (DataRow dr in GlobalVar.ds.Tables["st_detail"].Rows)
{
// complete path of photo file
    imgPath = @"D:\ImageSt\" + dr["reg_no"].ToString() + ".jpg";
    // read photo from file
    FsImage = Image.FromFile(imgPath);
    // convert image file to array
    byte[] PhotoArr;
    using (MemoryStream ms = new MemoryStream())
    {
        FsImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        PhotoArr = ms.ToArray();
    }
    // update photo
    dr["photo"] = PhotoArr;
    // end array conversion
}
// end loading
0
user5406160

Fügen Sie in Visual Studio ein Dataset-Objekt (.xsd) hinzu, und füllen Sie es mit einer oder mehreren Datentypen, die die gleichen Feldnamen enthalten, die Sie in Ihrer DataSet ds = new DataSet(); erhalten haben.

Gehen Sie dann zu Ihrer .rpt-Datei: Datenbankfelder -> Datenbankexperte -> Projektdaten -> ADO.Net-DataSets, wählen Sie das soeben erstellte Dataset aus und entwerfen Sie den Bericht nach Ihren Wünschen.

Verwenden Sie den Bericht wie gewohnt.

myReport.SetDataSource(ds); 
0
D.Rosado