Laden...

Crystal Reports "per Hand" erstellen

Erstellt von Grimmbizkit vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.259 Views
G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren
Crystal Reports "per Hand" erstellen

Guten Morgen zusammen,

ich habe mal ein paar Fragen zu den Crystal Reports.

  1. Kann ich in einem Report auch eine Filterung/Sortierung/Gruppierung der gewünschten Daten vornhemen. Bräuchte das, weil ich in einem Formular einen Zeitbereich festlege z.B.: 15.01.2008 - 03.03.2008. Dann soll in meinen Bericht auch nur das angezeigt werden.

  2. Kann ich diesen Report auch direkt drucken? Also ihn per Befehl und ohne Vorschaufenster direkt ausdrucken?

  3. Kann ich den Report vll sogar einen DataTable oder DataSet oder so übergeben, welchen ich zur Laufzeit erstelle, das sich der Report daraus die Daten für den ausdruck holt?

Hoffe ihr könnt mir da etwas weiterhelfen.

Gruß Simon

3.825 Beiträge seit 2006
vor 16 Jahren

Hallo Simon,

  1. Ja

  2. Ja, mit rpt.PrintToPrinter(..);

  3. Ja, ein Dataset kann eine Datenquelle sein, Du kannst die Daten im Dataset vorher beliebig ändern :

foreach (CrystalDecisions.CrystalReports.Engine.Table table in rpt.Database.Tables)
{
	if (ds.Tables.Count > 1)
		table.SetDataSource(ds);
	else
		table.SetDataSource(ds.Tables[0]);
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Hallo Bernd,

Zu 1.: Die Filterung etc. kann ich ja dann anwenden/festlegen, wenn ich das DataSet erstelle oder?

Zu 3.: Das DataSet kann ich ja auch gleichzeitig mit der Datenquelle (SQL Server /Servername,Datenbankname,Username,Passwort) zuweisen oder?

Gruß Simon

Wichtige Frage:
Fallen für Crystal Reports eigentlich irgendwelche Lizenzkosten an? Weil das soweit ich sehe ja schon in Visual Studio 05 Prof. enthalten ist.

3.825 Beiträge seit 2006
vor 16 Jahren

Hallo Simon,

Die Filterung etc. kann ich ja dann anwenden/festlegen, wenn ich das DataSet erstelle oder?

Ja, aber schränke möglichst viel im SQL-Statement ein, sonst lädst Du zu viele Daten die du nicht brauchst, dann wirds langsam.

Also im SQL-Statement möglichst alles selektieren und sortieren. Im Dataset nur ein paar Feinheiten ändern.

Dataset füllen ganz normal mit DataAdapter, DBCommand und ds.Fill().

Für den Reportviewer fallen keine Lizenzkosten an. Wenn der Anwender aber selbst Reports erstellen will braucht man eine Lizenz, die kostet was.

Im Herbst kommt der Report Designer von Microsoft, der ist besser als Crystal Reports. Der ist beim SQL Server dabei. Ob es den einzeln geben wird weiss ich nicht.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Danke für die Hilfe.

Also sollte ich nun doch besser mit den Microsoft Reports arbeiten.
Da habe ich das Problem, das ich Reports nicht direkt durcken kann. Sondern nur mit dem ReportViewer.

Der Endbenutzer wird die Reports nicht verändern/erstellen. Die werden mit den Software aus VS05 quasi mitgeliefert.

Aber bei dem neuen Designer kann ich dann auch CrystalReports verwenden/erstellen?
Oder muss ich dann wieder auf die MS Variante umsteigen.

Noch eine wichtige Frage:
Kann ich auch Bilder in einem Report drucken?
Ich habe eine Spalte (bool) in meiner Tabelle (Besipiel) lGeld. Wenn der Datensatz dort ein True hat, dann soll auf dem Report ein Bild von einem Geldschein gedruckt werden.
Geht das?

3.825 Beiträge seit 2006
vor 16 Jahren

Hallo Simon,

der Report Viewer kann nicht ohne Vorschau drucken.

Es gibt irgendwo ein Tool um von Kommandozeile direkt zu drucken, musst Du aber suchen.

Der Report Designer kann keine Reports von Crystal verarbeiten, sind 2 völlig verschiedene Formate.

Nimm doch Crystal Reports, scheint doch für Deine Zwecke zu funktionieren.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Glaube ich habe auch rausgefunden, wie ich das mit den Bilder drucken machen kann, wenn eine Wert True ist. Dann ist der CrystalReport genau das richtige. Ansonsten hätte ich ein Problem.
Weil das ist eigentlich sehr wichtig.

Kann man in den CrystalReports auch Variablen aus der Anwendung nutzen wenn der Report nicht als Ressource sondern als externe Datei gentuzt wird?

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

ich habe nun einen CrystalReport erstellt.
Im Report habe ich eine Datenbank (SQL) eingefügt.
Der Report wird richtig angezeigt. Doch wenn ich nun die Quelle des Reports auf ein DataSet ändere (Weil ich nach einem Datumzeitraum Filtern will) reagiert der Report nicht drauf.

SQL Abfrage:


String cSqlCmd = @"SELECT Lieferscheine.*, LieferscheinDaten.* FROM Lieferscheine INNER JOIN LieferscheinDaten ON Lieferscheine.LieferscheinDaten = LieferscheinDaten.id WHERE VDatum BETWEEN @Date1 AND @Date2";
daReport = new SqlDataAdapter(cSqlCmd, DataHvs.connHvs);
daReport.SelectCommand.Parameters.Add("@Date1", SqlDbType.DateTime).Value = von;
daReport.SelectCommand.Parameters.Add("@Date2", SqlDbType.DateTime).Value = bis;

try
{
     daReport.Fill(dsReport, "Reports");
}
catch (Exception e)
{
     MessageBox.Show(e.ToString());
}

return dsReport;

Zuweisung des DataSet:


// LogOnfunktion für SQL Server für jede Tabelle des Reports
TableLogOnInfo logonInfo = new TableLogOnInfo();
foreach (Table rpTable in rp.Database.Tables)
{
     rpTable.SetDataSource(dsReport);
     logonInfo = rpTable.LogOnInfo;

     logonInfo.ConnectionInfo.ServerName = cServer;
     logonInfo.ConnectionInfo.DatabaseName = cDataBase;
     logonInfo.ConnectionInfo.UserID = cUser;
     logonInfo.ConnectionInfo.Password = cPassword;

     rpTable.ApplyLogOnInfo(logonInfo);
}
// Parameterübergabe
rp.ParameterFields["DatumVon"].CurrentValues.AddValue (Program.tTimespanFrom.ToString("dd.MM.yyyy"));    // Datum Von
rp.ParameterFields["DatumBis"].CurrentValues.AddValue (Program.tTimespanTo.ToString("dd.MM.yyyy"));      // Datum Bis
rp.ParameterFields["Werksname"].CurrentValues.AddValue (DataHvs.GetWerksname);                                   // Werksname
// Zeigt Report im Vorschaufenster an
crystalReportViewer1.ReportSource = rp;

Woran kann das liegen?

Gruß Simon

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Grimmbizkit,

bitte keine Crossposts ==> gleichlautender Crosspost gelöscht.

herbivore

3.825 Beiträge seit 2006
vor 16 Jahren

Glaube ich habe auch rausgefunden, wie ich das mit den Bilder drucken machen kann,

Gut ! Bilder (Datentyp Image) kann man einfach auf den Report ziehen und dort die Größe bestimmen. Leider kann Crystal Bilder nich skalieren, d.h. die Bilder werden oft verzerrt dargestellt. ich habs jedenfalls nicht hinbekommen. Ich habe nun manuell per C# die Bilder alle so verändert, dass sie die gleichen Seitenverhältnisse haben.

Doch wenn ich nun die Quelle des Reports auf ein DataSet ändere (Weil ich nach einem Datumzeitraum Filtern will)

Wenn Du nach einem Datumszeitraum filtern willst mache das im SQL Statement.

Wenn Du berechnen vorher ausführen willst, noch Spalten dazufügen oder Daten ändern willst (z.B. Bild skalieren) dann gib ein Dataset als Quelle an (nur das Dataset).

Das tust Du ein deinem Sourcecode aber nicht, du gibst Dataset UND Logon-Info an, um sich mit dem SQL-Server zu verbinden. Das brauchst Du aber nicht.


foreach (CrystalDecisions.CrystalReports.Engine.Table table in rpt.Database.Tables)
{
	if (ds.Tables.Count > 1)
		table.SetDataSource(ds);
	else
		table.SetDataSource(ds.Tables[0]);
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3