2014-06-13 15 views
6

Penso che molti sviluppatori stiano affrontando il problema di provare a visualizzare i numeri di pagina utilizzando SSRS 2008 R2.Come visualizzare il numero di pagina nel corpo del report di SSRS 2008 R2?

Esiste una soluzione alternativa che richiede SSRS 2010 + versione. Altrimenti ne riceverai 1 tutto il tempo.

Vai a "Report" ->"Proprietà Report" ->"Codice"

Nella sezione Custom Code, inserire il seguente:

Public Function PageNumber() as String 
    Dim str as String 
    str = Me.Report.Globals!PageNumber.ToString() 
    Return str 
End Function 

Public Function TotalPages() as String 
    Dim str as String 
    str = Me.Report.Globals!TotalPages.ToString() 
    Return str 
End Function 

Ora sarà in grado di accedere a queste funzioni in qualsiasi punto del report (intestazione, corpo o piè di pagina). Così, per emettere il numero di pagina e pagine totali in una casella di testo situato nel corpo è sufficiente inserire questo per il valore:

="Page " + Code.PageNumber() + " of " + Code.TotalPages() 

This soluzione non funziona con SSRS 2008 R2.

Tuttavia esiste una soluzione alternativa, funzionerà con qualsiasi versione superiore a 2008 R2 (include 2008 R2). Pubblicherò una risposta, spero che possa aiutare alcune persone che hanno difficoltà a risolvere questo problema.

+0

Din't Lavoro per me! in SQL Server 2012. – Rama

+1

Questo non funziona in SQL Server 2016. –

+2

@HuseinRoncevic Mi dispiace amico, ho scritto questo post nel 2014, non ho avuto la possibilità di usare SSRS 2016 ......... –

risposta

10

In primo luogo è necessario utilizzare variabili del report: fare clic destro sul spazio vuoto della relazione -> Variabili -> Crea una variabile, ad esempio (valore impostato di default a 0) PageCount

Poi in voi nell'intestazione o footer -> crea una casella di testo e imposta espressione ->

=Variables!PageCount.SetValue(Variables!PageCount.Value+1) 

Aumenterà automaticamente per ogni pagina. (IMPORTANTE: NON nasconderlo dall'intestazione o dal piè di pagina, il SetValue NON funzionerà se si nasconde la casella, quindi cambiare il carattere in 1 o testo in bianco, fare qualsiasi cosa, semplicemente NON nasconderlo (verrà stampato 'true' come impostazione prese posti))

quindi è possibile utilizzare:

=Variables!PageCount.Value 

in qualsiasi parte del corpo del report per accedere al numero di pagina.

IMPORTANTE: si prega di notare che ho provato a utilizzare Globals! PageNumber per impostare la variabile ma non è accessibile dal corpo del report. Quindi, deve essere qualcosa accessibile da Intestazione/piè di pagina o Corpo.

Nel mio caso, devo reimpostare il numero di pagina per ogni istanza del mio gruppo. Quindi ho appena impostato un trigger alla fine del gruppo. (ad esempio, controllo se ho i ritorni del mio valore totale, perché so che per ciascuna estremità del mio gruppo avrò una visualizzazione Totale.

A causa della funzione IIF entrambi parte Vero e Falso saranno trattati, quindi se mettere setter nel IIF come di seguito:

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0)) 

) 

si vuole finisce per avere un valore 0 per tutto il tempo, perché la relazione controllerà la parte vera, allora la parte false, verranno eseguite due setter (valore verrà impostato due volte)

quindi abbiamo bisogno di 2 scatole e qualcosa di simile: (Devi nasconderti scatola inutili le vostre condizioni di controllo)

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"") 
) 

hai bisogno di nascondere questo riquadro quando NOT IsNothing(ReportItems!TotalBox.Value)

=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"") 
) 

Anche in questo caso è necessario nascondere questa scatola quando IsNothing(ReportItems!TotalBox.Value)

Naturalmente si può usare qualche altro modo per determinare la fine del un'istanza di gruppo, ad esempio: crea una casella di testo che SOLO contiene un valore fisso alla fine della tabella di gruppo. e nascondilo. quando controlli il grilletto esegui l'approccio simile come faccio io.

Funziona bene per tutte le versioni sopra 2008 R2 (incluse).

+0

Grazie, ha funzionato per me. – Snesh

+1

@ Vin.X Non funziona per me! in SQL Server 2012 – Rama

+0

Questo aumenta il numero di pagina quando si torna indietro di una pagina. –

0

In Visual Studio 2013Report variables sarà Visible nel menu Report.

dal menu principale - Relazione>ReportProperties>Variabili>Aggiungi

0

Prima Seguire i passaggi 1 qui sotto per fare impaginazione:
1)
1,1. Fare clic sul gruppo Dettagli nel riquadro Gruppi di righe.
1.2. Dal riquadro Proprietà del membro Tablix, espandere "Gruppo" -> "PageBreak".
1.3.Impostare il “BreakLocation” a “Fine” e impostare il “Disattiva” proprietà per l'espressione come di seguito:

=IIF(rownumber(nothing) mod 40=0,false,true) 

Il precedente punto 1 è uso fare impaginazione nella relazione di uscita (solo visualizzazione 40 record per pagina in uscita)

2) uso codice personalizzato:

Public Function PageNumberno(val as integer) as String 
    Dim str as String 
    str =(val/40) 
    Return str 
End Function 

3) Creare colonna calcolata nel set di dati e inserire =0 nell'espressione

4) In 2 colonna calcolata
1) pageno
2) n
nel set di dati

In Report uso del corpo espressione per PageNo:

=code.PageNumberno(Rownumber("DataSet1")) 

uso di espressioni per No:

=IIF(Instr(code.PageNumberno(Rownumber("DataSet1")) 
,".")<>0, 
(Left(code.PageNumberno(Rownumber("DataSet1")), 
(Instr(code.PageNumberno(Rownumber("DataSet1")),".")-1))+1) 
,code.PageNumberno(Rownumber("DataSet1")) 
) 

5) Fare clic destro e inserire colonna sul lato destro e in Nome colonna aggiungere codice nella casella di testo

=ReportItems!No.Value 

Nota: Non è calcolato campo nome della colonna.

6) Sotto AdvancedMode IN Gruppo Row selezionare Statico e impostare RepeatOnNewPage Proprietà per True

Nella colonna sopra creato al punto 5 visualizzerà la pagina corretta non in ogni pagina nel corpo della relazione

Ho provato e funziona Fine ... Provalo.