Recuperare numero pagina o numero riga in una formula

domenica 03 agosto 2008 - 12.24

andreagugu Profilo | Newbie

Ciao a tutti,
ho il problema di dover gestire dei campi in funzione del numero di riga (record) oppure del numero di pagina. Posso inserire campi speciali che li mostrano ma non li vedo poi lato codice..
come potrei fare?

freeteo Profilo | Guru

ciao,
per il page number non lo sai se non dal Crystal Report Viewer, in questo modo:
crystalReportViewer1.GetCurrentPageNumber();

oppure nell'evento "Navigate" del viewer:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


per il fatto di sapere da codice il recordNumber quello non credo sia possibile averlo da codice,inquanto è dato dall'elaboratore del report stesso, e ne hai accesso solo dentro al report, quindi se devi fare dei ragionamenti sul record dove sei, devi usare un campo formula, con un codice tipo:
if recordnumber mod 2 then ... else ...
ma da codice non puoi sapere il valore restituito dal campo, puoi sapere che c'è quel campo, e se è un campo Formula o Parameter puoi anche cambiarci il contenuto, ma non riesci a leggere il valore a runtime.
ciao.

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

andreagugu Profilo | Newbie

grazie 1000,
ti chiedo un'altra cosa.. dato che dovrò quindi lavorare da codice dentro il report (nelle formule).. se ho dati che normalmente sono visualizzati in 3 colonne, tipo: nome, descrizione, valore, vorrei cambiare il
layout dei dettagli a seconda del contenuto dei records.. e visualizzare ad esempio solo 2 colonne se in
tutti i campi della pagina non c'è nessun record con descrizione.. mi spiego meglio:
ho una query con 2 pagine di records del report.. i primi 5 records ho valori in tutte e 3 le colonne, dal sesto records in poi il campo descizione è vuoto. Bene.. vorrei che la prima pagina dove ci sono i primi 30 records venisse scelto il layout con 3 colonne dato che nella pagine c'è almeno un records con i 3 campi pieni (primi 5) mentre la pagina 2 dato che ha gli ultimi records dove tutti i records della pagina hanno solo 2 campi pieni, venisse scelto il layout con 2 colonne (più grandi..)
Spero di aver spiegato cosa voglio fare.. il problema principale è che dovrei valutare i records prima di scegliere il layout dei dettagli.. possibile? oppure nell'header c'è modo di fare un loop tra i records per fare poi delle scelte?

freeteo Profilo | Guru

ciao,
la modifica dell'aspetto del report (linee, oggetti etc...) è data solamente dalla visibilità degli stessi, quindi controllabile con la proprietà "Suppress" (che ovviamente lavora "negata").
Quindi se hai oggetti linee ad esempio che non hanno la proprietà "Suppress" che puoi gestire tramite formula devi agire in qualche altro modo.

Io ad esempio proverei questa tecnica:
- nella sezione dettagli fai 2 sezioni di dettaglio, "detailsA" e "detailsB" (tastoDX->Insert Section Below)

- le sezioni le fai una con un layout con 3 colonne, e l'altra con 2 (trascini gli stessi campi, ma 2 al posto di 3 nella seconda)

- alla sezione A la sopprimi se il campo descrizione è nullo:
IsNull({campoDescrzione}) or {campoDescrizione} = ''

- e l'altra viceversa con i not

A questo punto il report a seconda del valore del campo, visualizzerà una o l'altra sezione, dando l'effetto di "cambio layout".
ciao.

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

andreagugu Profilo | Newbie

perfetto.. è quello che ho già fatto. Quando ti parlavo di cambio di layout infatti intendevo switchare da dettagliA a dettagliB proprio in quel modo.
Ho già affrontato pari pari il problema della mancanza della proprietà suppress nelle linee (che mancanza però!!!!)
Il problema è che non voglio una visualizzazione diversificata per ogni record.. se anche un record soltanto nella pagina ha i 3 campi allora tutti i
record della pagina saranno visualizzati col layout a 3 colonne.. anche se hanno 2 campi soltanto!
è questo l'inghippo.. se cambio il layout durante la visualizzazione dei record, se ad esempio i primi 2 hanno solo 2 campi succede che visualizzo
il layout a 2 colonne.. ma se il terzo ne ha 3, dovrei andare a cambiare il layout anche dei primi 2! possibile??

freeteo Profilo | Guru

eh effettivamente quello che vuoi fare tu è abbastanza complesso, e non credo sia possibile inquanto il report lavora in verticale, quindi elaborando dall'alto verso il basso...mmm...le formule sono dipendenti dai record quindi credo che non sia possibile.

E hai provato con un sottoreport? ovvero usare la stessa tecnica di prima del suppress delle sezioni solo che applicate ad un sottoreport o l'altro...Se anche questo non dovesse andarti bene, non vedo altro di possibile purtroppo
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