Laden...

Crystal Report ohne DB

Erstellt von Mighty Panther vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.222 Views
Mighty Panther Themenstarter:in
22 Beiträge seit 2008
vor 15 Jahren
Crystal Report ohne DB

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

2.082 Beiträge seit 2005
vor 15 Jahren

Hallo Mighty Panther,

in Crystal Reports sollte es ähnlich wie in den Microsoft Reports funktionieren:

  1. Du erstellst ein typisiertes DataSet.
  2. Du kannst in deinem Report Datenquellen angeben. Hier wählst du dein typisiertes DataSet aus.
  3. Dein Report weiß jetzt bescheid, welche Datenfelder übergeben werden können und du kannst dann dementsprechend Textboxen und Tabellen mit den Datensätzen verknüpfen.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

3.825 Beiträge seit 2006
vor 15 Jahren

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

S
142 Beiträge seit 2007
vor 15 Jahren

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

3.825 Beiträge seit 2006
vor 15 Jahren

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

G
497 Beiträge seit 2006
vor 15 Jahren

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.

Mighty Panther Themenstarter:in
22 Beiträge seit 2008
vor 15 Jahren

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

Mighty Panther Themenstarter:in
22 Beiträge seit 2008
vor 15 Jahren

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

D
496 Beiträge seit 2005
vor 15 Jahren

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."