Loop tra i record del report

venerdì 16 settembre 2005 - 17.36

raffaeu Profilo | Newbie

Ho un report Crystal nellla mia applicazione NET, ho bisogno di looppare tra i record mentre vengono stampati e caricare un determinato valore in una field in base al valore che ricevo da quel record ...
Che evento evo usare?

freeteo Profilo | Guru

ciao,
eh eh looppare con crystal report è praticamente impossibile nel senso che non hai in memoria i dati come quando hai il risultato di 1a datatable...Ma ce' di meglio: i campi formula.
Puoi dire al report che faccia dei calcoli, delle operazioni con le stringhe e 1 sacco di altre operazioni usandoli e mettendoli nelle sezioni adatte alla tua esigenza, nel tuo caso la sezione dettagli.
Dentro ad essi scrivi 1 po di codice crystal per fare quello che ti serve, es:

campo1 = campo del database di 1 importo
campofourmula (creato da me) apro l'editor facendo "tastoDx->edit Formula Field" e scrivo dentro:
if importo >0 then
"ok"
else
"sei in rosso"

a questo punto lo piazzo nella sezione dettagli di fianco al campo importo e lui mi stampa riga x riga 1 piccolo case...
penso sia eusto che intedi o no?

ciao


Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

raffaeu Profilo | Newbie

Si è questo che intendo ma c'è un piccolo problema. Io ho un Array, ad ogni riga stampata devo looppare il mio array e se il campo del dettaglio ha un valore compreso nell' array, in un campo formula devo scrivere il valore dell' array (bidimensionale). Il mio problema è come portare l' array bidimesionale nel report ...

Hai qualche idea?

freeteo Profilo | Guru

mmm si effettivamente stampare 1 array non è il massimo della semplicita', hai provato a guardare 1po l'istruzione ToText che se non ricordo male è abbastanza flessibile, magari parcheggi il campo su 1a variabile Array e poi looppi sui valori.
Qualcosa del tipo:

NumberVar Array Input := {?Customer List};

ToText(Input [1],0,'') ....


anche se non ho 1 caso pratico che ho fatto,cmq io guarderei queste funzioni potrebbero tornare utili...
ciao

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

raffaeu Profilo | Newbie

Cavolo il tutto non e' semplice devo fare delle prove, poi ti faccio sapere, comunque lo spunto è questo, perchè devo confrontare le statistiche di vendita di quest' anno con quelle dell' anno percedente, ma non posso linkare le tabelle altrimenti mi si sballano i valori di quest' anno ....

Un casino.

Grazie provo e posto.

raffaeu Profilo | Newbie

Ho fatto cisi':

1-Creato Campo Parametro con 'Valori Multipli' si chiama ARRPAX
2-Passo i valori dal NET
3-Campo formula che preleva da array, ma non so come ottenere

Il Count dei valori del campo di parametro
Looppare dentro il campo parametro ..

freeteo Profilo | Guru

ciao,
hai provato con "numbervar zConto := Count(Input )" ?
e poi fa 1 loop tipo for e printi " Input [i] " dove i è la varibile del for...

se fai cosi funzia? Altrimenti se ci metti 1 carattere che sai tu, e poi fai lo Split per quel carattere...

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

raffaeu Profilo | Newbie

Ho provato ma nada, posto tutto il codice:

Popolo Parameter FIeld
rpt.SetParameterValue("ARRPAX", MyArray)

Campo formula in CR

NumberVar Input := Count({?ARRPAX});

Ma non esce nel report ... Magari sbaglio con SetParameterValue ...

freeteo Profilo | Guru

ciao
io ho provato con questo codice funziona

--------------------
mioReport.SetParameterValue("mioparametro",new string[]{"ciao","pippo"});
--------------------

e il campo parametro è:

--------------------
numbervar i;
stringvar zStr := "";

stringvar array zArr := {?mioparametro};
for i := 1 to Count(zArr) step 1 do
zStr := zStr + zArr[i] + chr(13);

zStr
--------------------



e ritorna i valori giusti e va a capo,basta mettere il campo formula che possa aumentare...
da te come si comporta?

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

raffaeu Profilo | Newbie

TROVATO!!
EUREKA!!

Bisogna passare un array di paramDiscreteValue cosi':

DR = CMD.ExecuteReader(CommandBehavior.CloseConnection)
Dim x As Int32 = 0
While DR.Read
MyVal = New ParameterDiscreteValue
MyVal.Value = DR("CODE")
MyParam.Add(MyVal)
x += 1
End While
Catch ex As Exception
WR(ex.Message)
End Try
'Popolo Array
Return MyParam


freeteo Profilo | Guru

si infatti ma anche con 1 array di oggetti del framework di dotnet si puo' fare, ma l atua collezione è piu tipizata quindi va sicuramente meglio ;-)

ottimo cmq alla fine funziona, obiettivo raggiunto.
ciao

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

raffaeu Profilo | Newbie

Bene un' ultima cosa, ho sempre postato su un 'altro ' forum e devo dire che per la tecnologia NET questo è proprio spettaculare veramente ...

Complimenti a tutti.

PS: Inoltre è l' unico forum di CR for NET in italiano.

freeteo Profilo | Guru

>Bene un' ultima cosa, ho sempre postato su un 'altro ' forum
>e devo dire che per la tecnologia NET questo è proprio spettaculare
> veramente ...
>
>Complimenti a tutti.


Grazie, facciamo del nostro meglio... ;-)



Matteo Raumer
.net addicted :-)
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5