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).
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();
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;
// 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
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);