Creare un'indice - sommario con reporting service

giovedì 26 febbraio 2009 - 09.04

perla0279 Profilo | Senior Member

ciao
ho cercato parecchio in giro ma non sono riuscita a trovare nessuna soluzione.

Penso che questo post possa interessare numerose persone (visto la completa assenza di informazioni facilmente raggiungibili)

Ho un report in cui stampo una categoria di prodotti per pagina (uso la gunzione di agregazione gruppo), alcune categorie avendo molti prodotti possono avere più pagine.

Avrei la necessità di creare un indice con categoria e numero di pagina dove verrà stampata.

Essendo un recor dinamico l'indice dovrebbe venire ricreato ogni volta che si esegue la stampa.

Come posso fare?? Reporting service gestisce questa funzione oppure come posso crearne uno???





Sono riuscita quardando un pò in giro a creare un sommario mettendo un'etichetta label map al campo..........
l'unica cosa non riesco ad inserire la pagina di stampa perche (giustamente) la varibile numberpage non gestisce la posizione nel body....

come posso fare per inserire la pagina di stampa ???

freeteo Profilo | Guru

>Sono riuscita quardando un pò in giro a creare un sommario mettendo
>un'etichetta label map al campo..........
>l'unica cosa non riesco ad inserire la pagina di stampa perche
>(giustamente) la varibile numberpage non gestisce la posizione
>nel body....
cosa intendi per la "posizione nel body" ?
Non so se possa esserti utile,ma hai fatto qualche prova anche scrivendo il codice per gestire questa cosa? Intendo ad esempio come viene fatto qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=9573
li viene usato del codice per fare un'operazione sui dati, non so se potresti pensare di recuperare da li il numero di pagina o qualcosa del genere...


Ciao.

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

perla0279 Profilo | Senior Member

ciao
grazie della risposta ormai ci stavo rinunciando :-)

Ho provato a vedere il post che mi hai mandato. Non ho mai usato le funzioni quindi non so da che parte iniziare.

Non sò se mi possa aiutare questa funzionalità. Dovrei creare un indice come quello di word per fare un esempio del tipo:
- Inizio paragrafo ........... pag. 1
ecc.

Solo che non sò come associare la pagina di stampa che viene fuori nel footer con la voce che inserirò nell'indice.

freeteo Profilo | Guru

>ciao
>grazie della risposta ormai ci stavo rinunciando :-)
si perdona il ritardo, sono stato parecchio incasinato in questo periodo...


>Ho provato a vedere il post che mi hai mandato. Non ho mai usato
>le funzioni quindi non so da che parte iniziare.
sono funzioni scritte in vb.net, solo che non hanno un'editor "serio" puoi scriverle e lui le compila al volo, e da dentro al report nel campo di testo puoi mettere la chiamata al codice "Code.NomeFunzione(...)" etc...


>Solo che non sò come associare la pagina di stampa che viene
>fuori nel footer con la voce che inserirò nell'indice.
Ma tu il nome del paragrafo riesci a metterlo mi sembrava di capire dal post di prima, ti mancava solo il numero di pagina.
Io pensavo di passare il numero di pagina ad una funzione che si tenga in memoria il nome e il numero di pagina, mettendo un campo nel corpo del report che lo passi.
Poi sempre chiamando il codice (questa volta una funzione diversa che legga la variabile) visualizzare la lista, anche qui facendoti tornare una stringa che lo componga...non so bene...il mio era solo uno spunto, purtroppo non ho una soluzione al tuo problema già chiara...

Cmq qualcosa di questo tipo:
Shared sommario As New System.Collections.Generic.Dictionary(Of String, String) Public Function Aggiungi(ByVal nome As String) sommario.Add(nome, Me.Report.Globals!PageNumber) End Function Public Function GetSommario() As String Dim sb As New System.Text.StringBuilder() For Each chiave As String In sommario.Keys sb.AppendFormat("{0}.......{1}" + VbCrlf, chiave, sommario(chiave)) Next Return sb.ToString() End Function

e nel report nella riga di dettaglio metti la chiamata ad "=Code.Aggiungi(Fields!Codice.Value)" mentre su un altro TextBox metti la chiamata a "=Code.GetSommario()" per farti tornare una stringa da visualizzare.

Dovrebbe funzionare.

Ciao.

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

perla0279 Profilo | Senior Member

potrebbe essere un'idea :-)

Ci provo poi ti faccio sapere come è andata...... tenendo conto che è la mia prima funzione in Reporting Service..... :-)

freeteo Profilo | Guru

>Ci provo poi ti faccio sapere come è andata...... tenendo conto
>che è la mia prima funzione in Reporting Service..... :-)
ok, cmq e ti basta andare nel menu Report->Properies->Code e copiare quanto ti ho scritto.
E poi mettere i 2 campi nel report, chiaramente se vuoi migliorarlo devi fare un codice tuo, puoi provartelo in un programma temporaneo Vb.net e poi quando vedi che va bene lo copi in quella tab...

Ciao.

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

yuri85 Profilo | Junior Member

ciao,

riprendo in mano questo vecchio post perchè avrei la stessa necessità, ovvero di creare un sommario ma stranamente su internet non ho trovato nulla a riguardo tranne questo post.

L'ho testato ma a me restituisce sempre pagina 1 ... la funzione Code.Aggiungi(......") l'ho messa nell'intestazione del gruppo mentre il code.sommario() alla fine di tutto . i titoli me li propone correttamente ma a fianco sempre pagina 1.

Voi l'avete usato senza problemi ? grazie.

freeteo Profilo | Guru

>Voi l'avete usato senza problemi ? grazie.
eh, "senza problemi" è una parola grossa
Prova a postare un esempio con un db che contenga dati di test, ma dove si ripresenta il problema del numero di pagina, provo a darci un'occhiata.


Ciao.

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

yuri85 Profilo | Junior Member

allora in intestazione della pagina ho messo Code.Aggiungi(reportitems!textbox12.value)

Public Function Aggiungi(ByVal nome As String) sommario.Add(nome, Me.Report.Globals!PageNumber ) End Function

poi per quanto riguarda la funzione

Public Function GetSommario() As String Dim sb As New System.Text.StringBuilder() For Each chiave As String In sommario.Keys sb.AppendFormat("{0}..{1}" + VbCrlf, chiave, sommario(chiave)) Next

..questa funziona soltanto se posta in piè di pagina .... se la metto all'interno del corpo / tabella / raggruppamento mi restituisce sempre "#Errore".

messa in piè di pagina, visualizza i valori contenuti in sommario.

freeteo Profilo | Guru

>..questa funziona soltanto se posta in piè di pagina .... se
>la metto all'interno del corpo / tabella / raggruppamento mi
>restituisce sempre "#Errore".
forse bisogna controllare che sommario non sia nothing prima di enumerare, perchè in testa forse non è ancora stato creato l'oggetto?
La cosa è sempre delicata con questi pezzi di codice, perchè non si capisce mai precisamente il momento in cui viene elaborato...

Ma il tuo problema era la pagina sempre a 1 o l'errore nella prima pagina?

Ciao.

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

yuri85 Profilo | Junior Member

inizialmente la pagina era sempre a 1 ... questo perchè la chiamata alla funzione Aggiungi l'avevo posta nel corpo, in intestazione del gruppo .

Spostandola in intestazione invece, il numero di pagina viene letta correttamente e sommario accodato ... ma riesco a leggerlo solo se posto in piè pagina.

intanto ti chiedo un'altra cosa ... con Crystal report è più semplice creare l'indice o mi ritroverei nella stessa situazione?

freeteo Profilo | Guru

>Spostandola in intestazione invece, il numero di pagina viene
>letta correttamente e sommario accodato ... ma riesco a leggerlo
>solo se posto in piè pagina.
ma hai provato a controllare il nullo? ti succede anche dalla seconda pagina in poi (quindi già passato almeno una volta sull'add per intenderci..) ?



>intanto ti chiedo un'altra cosa ... con Crystal report è più
>semplice creare l'indice o mi ritroverei nella stessa situazione?
mah non ho esperienze in merito, è sempre complicato avere questa funzionalità in entrambi i casi secondo me...forse in Crystal non hai però problemi di numero di pagina perchè ricordo che è disponibile in varie sezioni senza problemi...magari lavorando con una variabile shared riesci a fare una cosa analoga a quanto detto qui...purtroppo però non ho esperienze in merito quindi non posso darti certezza.

Ciao.

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

yuri85 Profilo | Junior Member


>ma hai provato a controllare il nullo? ti succede anche dalla
>seconda pagina in poi (quindi già passato almeno una volta sull'add
>per intenderci..) ?
>
>come posso controllare il null? non riesco a trovare una formula corretta .
>

freeteo Profilo | Guru

>come posso controllare il null? non riesco a trovare una formula corretta .
puoi mettere nella funzione prima di enumerare sulle Keys, il controllo:
if not sommario is nothing then ...foreach...etc.. end if

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
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