Crystal report

giovedì 15 maggio 2003 - 17.00

MauriBS Profilo | Newbie

Ciao a tutti, avrei un quesito da porre.
Ho alcune applicazioni scritte con Visual C++ 6.0, che ho ricompilato con Visual Studio .NET. In alcune di queste applicazioni vorrei inserire dei report fatti con Crystal Report. E' possibile senza dover riscrivere tutta l'applicazione? Attualmente queste applicazioni stampano dei report molto rozzi, ma vista la qualità dei report creati con Crystal report mi piacerebbe poterli sfruttare?
Qualcuno mi sa dare una risposta?
Grazie.
Ciao.

MauriBS Profilo | Newbie

Hei che entusiasmo, basta con le risposte, non riesco a leggerle tutte.
A parte gli scherzi avrei pensato di fare una cosa di questo tipo. Creare una DLL in C# contenente i report di Crystal report, quindi richiamare la DLL dalle vecchie applicazioni C++. Mi sembra una soluzione che mi permetta di non buttare le applicazioni VC++. Il problema è che non ho ben capito come richiamare le varie funzioni C# dall'applicativo.
Mi potete aiutare?
Grazie e ciao a tutti.

Brainkiller Profilo | Guru

Sì, ciao scusa, hai ragione.
Ma prima di darti una soluzione, bisogna anche pensare bene :)
Mah, in effetti hai pienamente ragione, ma bisogna fare qualche considerazione.
Intanto il Crystal Report integrato in Visual Studio .NET è proprio una versione ottimizzata per .NET e quindi anche la gerarchia degli oggetti ricorda molto quella del .NET Framework in più è ottimizzata per quello. Per Visual C++ 6.0 o altri ambienti mi pare ci siano versioni di Crystal diverse.

La tua soluzione potrebbe essere interessante e quindi poter usare una libreria scritta in C# con dentro della business logic per produrre dei report di qualità. Il problema qui è che ti scontri comunque con l'interoperabilità fra due ambienti ben diversi. In più ancora personalmente non sono molto preparato da questo punto di vista (C++ che richiama librerie .NET, più facile invece il contrario).

Un'opzione potrebbe essere quella di reimportare il progetto intero in Visual Studio .NET e quindi Visual C++ 7.0 e ricompilarlo, da quanto hai scritto non ho ben capito se è proprio così che hai fatto. In questa situazione allora l'utilizzo di codice managed C# quindi potrebbe essere più facile visto che Visual C++ permette di usare le classi del Framework così come un programma in C# permette di caricare librerie scritte in C++.

Valuta un po' tu e vedi quale soluzione potrebbe essere migliore per le tue esigenze.
Se hai commenti fammi sapere che ne parliamo.

Ciao
David

MauriBS Profilo | Newbie

Ciao.
In effetti ho preso i sorgenti e li ho ricompilati con Visual C++ 7.0 senza modificare nulla. Il problema è che comunque non sono riuscito a gestire Crystal report. Per questo motivo avevo pensato alla soluzione che ho esposto nel mio precedente messaggio. Magari molto più banalmente è possibile inserire i report anche all'interno di codice C++, però non so come fare. Qualsiasi consiglio è il benvenuto.
Grazie

MauriBS Profilo | Newbie

Ciao.
Per il momento sto facendo pratica. Ho creato una normale applicazione C# e ho provato a visualizzare alcuni report. La cosa funziona bene, solamente che vorrei avere la possibilità di ordinare i record prima di visualizzare il report. E' possibile? Ho fatto qualche prova ma non sono riuscito. Questa sera faccio altre prove e poi faccio sapere, se però c'è qualcuno che conosce la soluzione......
Ciao a tutti.

MauriBS Profilo | Newbie

Ciao.
Eccomi, ho fatto alcune prove. Cercando nella guida in linea ho trovato questo esempio che riassumo:
Report.DataDefinition.SortFields[0].Field=Report.Database.Tables["Rubrica"].Fields["Telefono"];
CrystalReportViewer1.RefreshReport();
Il sort lo esegue, però mi divide il report in gruppi in base al campo "Telefono". Non sono ancora riuscito a capire come fare per evitare di raggruppare i record.
Questa sera altre prove.
Ciao.

Brainkiller Profilo | Guru

Ciao Mauri,
è ottimo fare delle prove e sperimentare.
Mi chiedevo, se non era più comodo ordinare già i dati all'interno della query con la clausola "ORDER BY" ?
O forse ho capito male.

In effetti ho controllato nella documentazione Crystal Report di Visual Studio e la procedura che utilizzi è corretta, evidentemente c'è qualcosa di errato nel Report.
Io ho sempre usato il Wizard per creare i Report a scanso di equivoci, e ho visto che è sempre andato molto bene.

Ciao
David De Giacomi

MauriBS Profilo | Newbie

Ciao David.
In effetti al report creato con il wizard do l'ordine che mi interessa. Quello che intendevo fare era di cambiare l'ordine a piacere secondo la volontà dell'ipotetico utente, che potrebbe non essere coincidente con l'ordine impostato durante la creazione del report. Avevo pensato di fare molti report quante sono le possibili combinazioni di sort selezionabili dall'utente, però se è possibile cambiare il sort di un unico report credo che sia meglio.
Questa sera non credo di riuscire a fare esperimenti, comunque appena ho un attimo di tempo libero ci provo.
Ci sentiamo. Ciao.

180675 Profilo | Newbie

Ciao Maurizio,
ho conosciuto da poco dotnethell ho letto il tuo messaggio, forse hai risolto, ti dico come ho affrontato io il tuo stesso problema.
Innanzitutto devi distinguere se hai o no un report, creato con crystal report, con gruppi oppure no.
Nel primo caso si puo' voler cambiare dinamicamente il gruppo quindi nel file.rpt avrai una formula con un nome(chiamiamola per esempio Break0)nella quale scriverai il campo sul quale raggruppare, questo per avere un default sul rpt.A livello dinamico puoi modificare questa formula nel seguente modo:
crei un oggetto ReportDocument
ReportDocument oRpt=new ReportDocument();
e carichi il report
oRpt.Load(percorsorpt);
poi ti crei una collezione di formule nella quale copi tutte quelle definite nel tuo report
FormulaFieldDefinitions myFormula=oRpt.DataDefinition.FormulaFields;
a questo punto modifichi la tua formula come segue
myFormula["Break0"].Text=myFormula["Break0"].Text.Replace(myFormula["Break0"].Text,"{"+NomeTabella+"."+Field+"}");

dove NomeTabella e Field sono i valori del db su cui vuoi raggruppare
dopodiche'
crystalReportViewer1.RefreshReport();
crystalReportViewer1.ReportSource = oRpt;
dove crystalReportViewer1 e' l'oggetto CrystalDecisions.Windows.Forms.CrystalReportViewer

Se invece il tuo report non ha gruppi allora puoi fare un ordinamento secondo un campo che decidi dinamicamente nel seguente semplice modo

oRpt.DataDefinition.SortFields[0].Field=oRpt.Database.Tables[NomeTabella].Fields[Field];

restando le definizione dette prima
Attenzione questa ultima ti funziona come un raggruppamento senel tuo rpt hai definito dei gruppi altrimenti no...
E qui viene il mio problema infatti io devo, una volta raggruppato dinamicamente secondo un campo,ordinarlo secondo un altro campo scelto sempre dinamicamente, ho provato natuaralmente l'istruzione combinata
myFormula["Break0"].Text=myFormula["Break0"].Text.Replace(myFormula["Break0"].Text,"{"+NomeTabella+"."+Field+"}");

oRpt.DataDefinition.SortFields[0].Field=oRpt.Database.Tables[NomeTabella].Fields[FieldOrd];

ma non funziona perche' l'ultima istruzione viene presa ancora come un break....
POTETE AIUTARMI, magari e' una stupidaggine, magari sbaglio io, ma non so piu' dove cercare la soluzione.........
Aspetto fiduciosa
Ciao a tutti Laura

MauriBS Profilo | Newbie

Ciao Laura.
Purtroppo ho avuto altri problemi e questo che non era urgente l'ho dovuto abbandonare. Ho letto il tuo post che mi sembra interessante, appena trovo un po' di tempo lo studio. Spero che tu nel frattempo abbia risolto il problema.
Ciao.
Maurizio

Arlene Profilo | Junior Member

Il problema probabilmente è nell'indice che utilizzi nel
oRpt.DataDefinition.SortFields[0].Field=oRpt.Database.Tables[NomeTabella].Fields[FieldOrd];
in quanto anche il gruppo viene considerato nel sortfields.
Nel mio caso io avevo i gruppi definiti in crystalreport cambiovo solo dinamicamente l'ordinamento dei campi e ho dovuto passare come parametro il numero di gruppi e far partire l'indice del sortfields dal valore passato +1
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5