Hallo!
Ich wollte einen Crystal Report aus einer Tabelle erstellen, die ich zur Laufzeit erzeuge, ohne eine Datenbank im Hintergrund.
Also dacht ich mir das ich das DataSet der Tabelle an den CrystalReportViewer übergebe. (siehe Code-Teil 2)
Das Form welches die Tabelle beinhaltet, übergibt sein DataSet an das Form (Report) und öffnet das selbige. (siehe Code-Teil 1)
//Tabelle erstellen ...
DataSet ds = new DataSet();
ds.Tables.Add("TAB1");
ds.Tables[0].Columns.Add("Index",System.Type.GetType("System.Int16"));
ds.Tables[0].Columns.Add("%", System.Type.GetType("System.Double"));
ds.Tables[0].Columns.Add("Stunden", System.Type.GetType("System.Double"));
ds.Tables[0].Columns.Add("Projekt", System.Type.GetType("System.String"));
DataRow dr = ds.Tables[0].NewRow();
// ------------------------
// DATAGRID mit Daten füllen
// ...
// ...
// ------------------------
ds.Tables[0].Rows.Add(dr);
dataGridView1.DataSource = ds.Tables[0];
Report rep = new Report();
rep.MyDataset=ds;
rep.Show();
//...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CSharpAnfaenger
{
public partial class Report : Form
{
private DataSet _myDS = null;
public DataSet MyDataset
{
get { return _myDS; }
set { _myDS = value; }
}
public Report()
{
InitializeComponent();
}
private void crystalReportViewer1_Load(object sender, EventArgs e)
{
CrystalReport1 oRep = new CrystalReport1();
oRep.SetDataSource(MyDataset.Tables[0]);
this.crystalReportViewer1.ReportSource = oRep;
}
}
}
Leider zeigt mir der Report keine Daten an.
Gut, als ich mich durch das WWW gegoogelt hatte, war mir klar warum, CrystalReport1.rpt muss vorher mit Feldern definiert sein.
Nun zu meiner Frage, wie kann ich diese Felder erzeugen, wenn ich doch vorher noch gar keine Daten habe? Oder anders gefragt, wie kann ich ein pseudo-Report erstellen, den ich später mit den Daten des DataSet füllen kann.
Ich hoffe mich verständlich ausgedrückt zu haben und vor allem auf hilfreiche Antworten.
THX & LG
Mighty
Hallo Mighty Panther,
in Crystal Reports sollte es ähnlich wie in den Microsoft Reports funktionieren:
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Du kannst auch eine Datenbank oder XML-Datei erzeugen, die Du dann als Quelle um Deine Reports zu erzeugen angibst.
Wenn Du Daten aus einem Dataset übergibts erstellt Du mit einem Kommando eine XML-Datei, mit der Du dann Crystal fütterst :
ds.XmlWrite(..)
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hallo Mighty Panther,
verusch mal nur eine Tabelle zu übergeben. Obwohl Intellisense einem anbietet eine DataSet-Instanz zu übergeben, hat das bei mir immer dasselbe Problem verursacht.
Mfg Steav
Hallo Panther,
ich übergebe nicht das ganze Dataset, sondern die einzelnen Tabellen des Dataset nacheinander :
foreach (CrystalDecisions.CrystalReports.Engine.Table tab in rpt.Database.Tables)
{
if (ds.Tables.Contains(tab.Name)) tab.SetDataSource(ds.Tables[tab.Name]);
}
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
klappt aber auch mit dem gesamten DataSet. Ich hab das an verschiedenen Stellen so im Einsatz - vordefiniertes typisiertes DataSet, das zur Laufzeit erzeugt, mit Daten gefüllt und an den Report übergeben wird.
Vielen Dank!
Dank eurer Hilfe habe ich es. 👍
Muss man aber erstmal drauf kommen, ein typisiertes DataSet zu erstellen, um es mit dem Crystel Report zu verbinden, damit man sein DataSet aus der Tabelle darauf anwenden kann.
THX & LG
Mighty
Hm!
Ich hab da doch noch eine Frage dazu.
Ich würde gern im Kopf des Reports ein Feld "Bemerkung" erstellen, welches die Daten von einer Textbox bekommt.
Nun zu der Frage.
Geht das irgendwie einfach zu realisieren?
Also kann ich irgendwie den Inhalt der Textbox direkt übergeben oder muss ich dafür erst eine virtuelle Tabelle erstellen mit Spalte/Zeile Bemerkung und diese dann an den Report übergeben.
THX & LG
Mighty
das geht mit parametern.
"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."