Report

mercoledì 05 marzo 2008 - 13.15

enzo49910100 Profilo | Junior Member

ciao è la prima volta che uso i report volove sapere se è possibile da codice (c#) inserire un valore a un campo unbound Fields di un crystal report e se si come si fa? grazie

freeteo Profilo | Guru

ciao,
se un campo non è agganciata alla sorgente dati che gli passi, puoi pensare di passare il valore tramite un campo "Formula", ovvero un campo testo che visualizza qualcosa, tipicamente un calcolo, da cui il nome, ma tu puoi passare quello che vuoi.

Prova ad usare questo codice:

ReportDocument report = new ReportDocument(); report.Load(@"c:\..\CrystalReport1.rpt"); report.DataDefinition.FormulaFields["..."].Text = "ciao ciao";

ovviamente ci devi dare tra parentesi quadre il nome corretto come lo hai chiamato nel report al momento in cui lo hai disegnato...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

enzo49910100 Profilo | Junior Member

grazie mille sei stato molto gentile, adesso però ho un altro problema spero tu possa ancora aiutarmi,il problema è il seguente ho un dataset che associo da codice c# al report adesso vorrei stampare i campi di tale dataset nel report come posso visualizzare tali campi con tutti i loro valori(è una tabella con più righe e colonne)senza usare l'editor visuale, insomma vorrei fare tutto da codice senza la necessita di usare gli editor visuale

enzo49910100 Profilo | Junior Member

ciao ho provato al tua parte di codice e mi fornisce il seguente errore:
The remaining text does not appear to be part of the formula.

freeteo Profilo | Guru

>grazie mille sei stato molto gentile, adesso però ho un altro
>problema spero tu possa ancora aiutarmi,il problema è il seguente
>ho un dataset che associo da codice c# al report adesso vorrei
>stampare i campi di tale dataset nel report come posso visualizzare
>tali campi con tutti i loro valori(è una tabella con più righe
>e colonne)senza usare l'editor visuale, insomma vorrei fare tutto
>da codice senza la necessita di usare gli editor visuale
non puoi faro, devi prima disegnare un report da dentro al designer, in modo che nel file ci sia la struttura che poi da codice popoli i dati e lui te li visualizza.


>ciao ho provato al tua parte di codice e mi fornisce il seguente errore:
>The remaining text does not appear to be part of the formula
controlla che gli passi il valore stringa in modo corretto, compreso di apici singoli:

report.DataDefinition.FormulaFields["tet"].Text = " ' ciao ' ";

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

enzo49910100 Profilo | Junior Member

ciao grazie ancora comunque adesso sono riuscito a creare un parameter field da codice che viene associato a un Parameter Field del report a questo campo passo un arrayList il problema però è che mi stampa solo il primo elemento , ti passo il codice cosi mi spiego meglio :

ReportDocument rp=new ReportDocument();
ArrayList arrayList = new ArrayList();
foreach ( DataRow pRow in ds.Tables["Product"].Rows)
arrayList.Add(pRow["Price"].ToString());

ParameterValues currentParameterValues = new ParameterValues();

foreach(object submittedValue in arrayList)
{
ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
parameterDiscreteValue.Value = submittedValue.ToString();
currentParameterValues.Add(parameterDiscreteValue);
}
ParameterFieldDefinitions parameterFieldDefinitions = rp.DataDefinition.ParameterFields;
ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME];
parameterFieldDefinition.ApplyCurrentValues(currentParameterValues);

CrystalReportViewer1.ReportSource=rp;

ciao

freeteo Profilo | Guru

ciao,
il parametro visualizza sempre un solo valore, il fatto che tu ne aggiungi vari è per dare all'utente un range di scelta.
Dovresti girare con un campo formula i valori del parametri e accodare un stringa con degli acapo, dare il "can grow" alla formula, cosi' ti fa tutte le righe che vuoi.
il punto è che io non saprei minimamente come girare su i valori di un campo parametro dentro ad una formula, e non so nemmeno se sia possibile

A parte questo possibile "raggiro" , quello che se non ho capito male vuoi fare tu è passare dei dati a runtime, che non arrivano da un database specifico, e che possono via via cambiare.
Io ti consiglio vivamente ,di usare una datatable, con un'unica colonna, e dentro alle varie righe ci metti i valori che vuoi.
Costruisci il report facendolo puntare ad un db temporaneo access che ti dia solo la colonna, e poi da codice gli setti tu i dati a runtime ad una DataTable che passerai come sorgente dati al report con il metodo "SetDataSource"
Se fai cosi' non hai problemi di cambiare via via la colonna, ti basta solo creare la tabella a runtime con quella sola colonna e poi passarla come sorgente dati al report, senza tanti giri di parametri...

Ed es:

DataTable table = new DataTable(); table.Columns.Add("Descrizione", typeof(string)); for (int i = 0; i < 10; i++) { //--- qui metti i valori che vuoi... table.Rows.Add(new object[] { i.ToString() }); } report.SetDataSource(table);

niente di piu' facile, e dinamico, ed hai lo stesso risultato del parametro.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

enzo49910100 Profilo | Junior Member

ciao grazie dell'aiuto ,cmq il mio scopo è proprio quello di non legare il report con il database, io i dati da stampare li ho già in un dataset quindi vorrei usare il report solo come visualizzatore dei dati

freeteo Profilo | Guru

si perfetto allora fai come ti ho detto, glieli passi dopo lavorando su una tua DAtaTable (che nel to caso sara' tuoDataSet.Tables["..."]).
Quello che resta pero' è il fatto che quando disegni il report devi dargli una sorgente dati, quindi passargli in quel momento un dataset del tuo progetto se ce l'hai, se n on ce l'hai perche' fai tutto a codice, allora dagli un database temporaneo giusto per costruirlo...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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