giovedì 6 maggio 2010

impostare le voci della dropdown di esportazione di Reporting services

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_reporting-services-impostare-le-voci-del_894.aspx.



Figura 1



Introduzione
Nell’articolo verrà illustrata una tecnica riguardante la creazione di una classe che permette di personalizzare il controllo ReportViewer, in particolare la possibilità di personalizzare la casella combinata per l’esportazione del report, con solo due voci, come illustrato in figura 1.
Quando si utilizza un controllo Reportviewer per la visualizzazione dei report creati con Reporting Services, il controllo espone alcune funzionalità, come la visualizzazione della casella combinata relativa allo zoom, il pulsante di aggiornamento della pagina, ed altro ancora, tra queste funzionalità, si trova la casella combinata per l’esportazione del report in un determinato formato (PDF, Excel, csv, ecc) .
Per personalizzare tale casella, si può fare in due modi, o modificare una parte del webconfig relativo al reporting services, ma questo influisce su tutti report, oppure tramite codice .Net, personalizzare tale casella.
In questo articolo, vedremo come visualizzare due voci per l’esportazione del report nel formato PDF e Excel.


Creazione della classe
Dopo aver aggiunto il riferimento allo spazio dei nomi Microsoft.Reporting.WebForms si crea una classe che avrà il compito di personalizzare il controllo ReportViewer.
La classe ha due costruttori, il primo costruttore accetta un oggetto di tipo ReportViewer, che è il controllo che andremo a passare, mentre il secondo costruttore, accetta il valore di un oggetto di tipo ServerReport, questa classe è anche una proprietà del controllo ReportViewer.
Il metodo AbilitaFormato, è una funzione pubblica che viene richiamata nelle nostre applicazioni web (o windows) passando un array di tipo string, relativo al formato (imposto da Reporting Services) che vogliamo visualizzare nella casella combinata.
Il metodo privato nascondi Voci, viene richiamato dal metodo pubblico, creando un oggetto di tipo FieldInfo relativo alla proprietà che permette di visualizzare o no il campo, mentre con il metodo SetValue, si imposta a false tale proprietà.



Si riporta il codice completo della classe


VB.Net


Imports System.Reflection


Imports Microsoft.Reporting.WebForms 'reference


Imports Microsoft.SqlServer.ReportingServices2005.execution'reference




Public Class ReportingServicesAbilitaVoci


Private ReadOnly serverReport As ServerReport


''' <summary>


''' Costruttore della classe - passare il controllo ReportinViewer dopo averlo valorizzato in base al percorso del report


''' </summary>


''' <param name="rpReportViewer"></param>


''' <remarks></remarks>


Public Sub New(ByVal rpReportViewer As Microsoft.Reporting.WebForms.ReportViewer)


Me.serverReport = rpReportViewer.ServerReport


End Sub



Public Sub New(ByVal rpReportViewer As Microsoft.Reporting.WebForms.ServerReport)


Me.serverReport = rpReportViewer


End Sub


''' <summary>


''' Funzione che abilita un determinato formato


''' </summary>


''' <param name="formati">Array di tipo string ES. PDF, EXCEL</param>


''' <remarks></remarks>


Public Sub AbilitaFormato(ByVal formati As String())


For Each extension As RenderingExtension In serverReport.ListRenderingExtensions()


If formati.Length > 0 Then


If formati.Contains(extension.Name) <> True Then


NascondiVoce(extension)


End If



End If


Next


End Sub


''' <summary>


''' Funzione che nasconde la voce


''' </summary>


''' <param name="extension"></param>


''' <remarks></remarks>


Private Sub NascondiVoce(ByVal extension As RenderingExtension)


'Rilevo l'impostazione di tipo visibile


Dim m_isVisible As FieldInfo = extension.GetType().GetField("m_isVisible", BindingFlags.NonPublic & BindingFlags.Instance)


'Imposto il valore a False in modo che nasconde la voce


m_isVisible.SetValue(extension, False)


End Sub



End Class



C#


using Microsoft.Reporting.WebForms; //reference


using Microsoft.SqlServer.ReportingServices2005.ution; //reference





public class ReportingServicesAbilitaVoci


{



private readonly ServerReport serverReport;



/// <summary>



/// Costruttore della classe - passare il controllo ReportinViewer dopo averlo valorizzato in base al percorso del report



/// </summary>



/// <param name="reportViewer"></param>



public ReportingServicesAbilitaVoci(Microsoft.Reporting.WebForms.ReportViewer reportViewer)


{



this.serverReport = reportViewer.ServerReport;


}



public ReportingServicesAbilitaVoci(ServerReport serverReport)


{



this.serverReport = serverReport;


}



/// <summary>



/// Funzione che abilita un determinato formato



/// </summary>



/// <param name="Formati">Array di tipo string ES. PDF, EXCEL</param>



public void AbilitaFormato(string[] Formati)


{



foreach (RenderingExtension extension in serverReport.ListRenderingExtensions())


{



if (Formati.Length > 0)


{



if (Formati.Contains(extension.Name) != true)


{


NascondiVoce(extension);


}


}


}


}



/// <summary>



/// Funzione che nasconde la voce



/// </summary>



/// <param name="extension"></param>



private void NascondiVoce(RenderingExtension extension)


{



//Rilevo l'impostazione di tipo visibile



FieldInfo m_isVisible = extension.GetType().GetField("m_isVisible", BindingFlags.NonPublic BindingFlags.Instance);



//Imposto il valore a False in modo che nasconde la voce


m_isVisible.SetValue(extension, false);


}


}



Effettuare il test
Ora non ci resta che testare la nostra classe, dalla pagina asp.net, dopo aver valorizzato il controllo ReportViewer, con le dovute impostazioni , nell’evento load della pagina, come riportato qui di seguito-.


VB.Net


ReportViewer1.ServerReport.ReportPath = ReportPath


C#


ReportViewer1.ServerReport.ReportPath = ReportPath;


Il codice riportato qui di seguito è da utilizzare nell’evento load, ma nel caso, che il report, permette la navigazione (tramite collegamenti) ad altri report, dobbiamo inserire il codice nell’evento loadcomplete, in modo che ad ogni caricamento, imposta la combobox, altrimenti viene impostata solo nel primo report


VB.Net


Private Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete



Dim report as new ReportingServicesAbilitaVoci (ReportViewer)


Dim formati As String() = {"PDF", "EXCEL"}


report. AbilitaFormato(formati)



C#


protected void Page_LoadComplete(object sender, EventArgs e)


{



ReportingServicesAbilitaVoci report = new ReportingServicesAbilitaVoci(ReportViewer1);



string[] Formati = new string[] { "PDF", "EXCEL" };


report.AbilitaFormato(Formati);


}


}




Conclusioni


Si è visto come personalizzare una parte del controllo ReportViewer di reporting Services 2005, visualizzando determinati formati di esportazioni.
La classe può essere estesa con funzionalità che permettono altre impostazioni, come la modifica del testo nella casella di esportazione o altro ancora.



Nessun commento: