Inserire subreport

giovedì 03 dicembre 2009 - 19.04

x69asterix Profilo | Junior Member

espongo il mio problema:

mi sono creato un report con crystal report dove dovrei inserire due subreport,

per caricare il report uso questo metodo:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e per caricarlo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e fin qui nessun problema...
però come faccio a caricare sempre sullo stesso report un subreport..

freeteo Profilo | Guru

Ciao,
non è possibile caricare un sottoreport da codice sui report, devi farlo a livello di design del report, scegliendo il file e altre impostazioni che ti servono alla corretta visualizzazione come i links, parametri vari, posizione e formattazione etc...
Fatto questo, da codice puoi "caricare i dati" di questo subreport (ma non l' "intero subreport") con un codice del tutto simile a quello tuo di prima, infatti un subreport di fatto è sempre un oggetto ReportDocument:

ReportDocument report = new ReportDocument(); //--- principale report.Load(...); report.Database.Tables[0].SetDataSource(...); //--- subreport report.OpenSubreport("nomedelsottoreport").SetDataSource(...); etc...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

quindi diciamo così...?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


freeteo Profilo | Guru

Si esatto,
solo che il nome del sottoreport che metti non serve che abbia il ".rpt" è in realtà il nome che vedi dentro al designer del report...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

ma se tolgo l'estensione và in errore!

freeteo Profilo | Guru

Ok allora significa che il nome del tuo sottoreport comprende anche il ".rpt"
Cmq debuggando vedi subito se te l'ha aperto correttamente, perchè deve essere un oggetto ReportDocument (lo puoi provare da finestra di watch).

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

ok...
ancora una cosa
io ho un campo decimale impostato a 4 cifre, come faccio a eliminare eventali zeri a destra?

esempio

0,1200
come faccio a farlo diventare 012?
ciao

freeteo Profilo | Guru

>ok...
>ancora una cosa
>io ho un campo decimale impostato a 4 cifre, come faccio a eliminare
>eventali zeri a destra?
prova ad impostare il formato numerico come preferisci con tasto DX sul campo->format object->number, li trovi tutte le varie impostazioni su arrotondamenti etc...


Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

si ma se il numero
è 0,1234
ed imposto a 4 decimali è ok,
ma se i decimali li porto a tre
diventa 1,123
ed è sbagliato
perche io devo eliminare solo gli 0 finali.
esempio
0,1200
deve diventare
0,12

freeteo Profilo | Guru

mmmhhh...capisco si tratta di una cosa in cui l'aspetto dei record non deve essere uguale, ossia se finisce con 00 il numero di cifre deve essere minore del record che sta prima.
Perciò non è ne arrotondamento, ne il truncate che ti possono aiutare in questo caso, ovvero l'arrotondamento si da un punto di vista matematico, ma dal punto di vista della visualizzazione devi passare per una stringa:

Ovvero fare un ToText({campo}) e andare poi a togliere gli zeri "come carattere" in coda secondo me...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

io ho già provato con il totext...
però il problema è che dopo la virgola mi fà vedere solo 2 decimali!!

freeteo Profilo | Guru

No ma intendo, una formula in cui lo trasformi in stringa e poi ci togli tu gli zeri:
stringvar str := ToText({campo},"#.0000",4); while mid(str, len(str) ,1) = "0" do str := mid(str,0,len(str)-1); str

in questo modo lo porti in stringa (con 4 decimali), e poi finchè non finisce con un numero diverso da 0 gli togli lo zero finale...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

ciao,
io non ho capito bene dove dovrei inserire questo codice?

freeteo Profilo | Guru

Ciao
il codice lo devi inserire in una formula, ossia nella treeview dove hai tutti i vari campi da poter mettere nel report, vai nel nodo "formula" e ne aggiungi una con quel codice.
Attento che devi però modificare il nome del campo che ha il valore da leggere che dicevamo prima.

Poi quando l'hai salvata, la trascini come fosse un campo qualsiasi nel report al posto quindi del campo che ha i decimali...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

ciao,
purtroppo a me và in errore

freeteo Profilo | Guru

Che valori hai?
Allega un progetto d'esempio con il report con un database dove hai l'errore che vedo di correggertelo.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

io ho un report dove il campo è impostato a numerico a quattro decimali
quando inserisco una nuova formula ed avvio il report mi resituisce:
stringvar str := ToText({Table.Mani},"#.0000",4);
while mid(str, len(str) ,1) = "0"
do str := mid(str,0,len(str)-1);

str

[img]http://img193.imageshack.us/img193/2696/immagine1dl.png[/img]

freeteo Profilo | Guru

L'errore è nel ciclo, perchè hai qualche valore che non è lungo almeno 1 char...forse hai dei valori che possono essere nulli?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

si....
possono essere anche nulli.

freeteo Profilo | Guru

>si....
>possono essere anche nulli.
ok questo lo controlli con la funzione "IsNull(...)" e gli passi il campo.
Quindi modifica la formula di prima con un if prima di quel codice altrimenti ti da l'errore ovviamente...


Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

scusa per la mia ignoranza...
ma come dovrebbe diventare la formula?

freeteo Profilo | Guru

Ciao,
forse senza modificare la formula puoi andare nelle proprietà del report (menu file->report option) puoi settare la proprietà "Convert null to default".

Se questo non basta, puoi come ti dicevo controllare nella formula insull prima di fare il ToText:
stringvar str; if isnull({@123}) then str := "0" else str := ToText({@123},"#.0000",4); while mid(str,len(str),1) = "0" do str := mid(str,1,len(str)-1); str

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

x69asterix Profilo | Junior Member

così è ok,
ma purtroppo arrotonda il numero è non va bene
oltre a togliere gli zeri.
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