martes 22 de febrero de 2011

Limitar formatos de exportación en ReportViewer

Hola amigos, aqui les dejo una manera de limitar el número de formatos a exportar. En mi caso unicamente deseo que el usuario pueda exportar a PDF, deshabilitando la exportación a Excel y a Word
'primero debemos declarar estos imports en la página donde se encuentra el 'reportviewer
Imports Microsoft.Reporting.WebForms
Imports System.Reflection

'Después en la carga de la página ponemos la siguiente rutina
'barremos las extensiones de localreport, mi reportviewer se llama reportviewer1
For Each elemento As RenderingExtension In reportViewer1.LocalReport.ListRenderingExtensions
'ponemos la condición para entrar a poner falso la exportación a Excel y a Word
If elemento.Name = "Excel" Or elemento.Name = "WORD" Then
'traemos la información del campo con sus respectivos flags
Dim infCampo As FieldInfo = elemento.[GetType]().GetField("m_isVisible", BindingFlags.Instance Or BindingFlags.NonPublic)
'colocamos el valor de false a la extension
infCampo.SetValue(elemento, False)
End If
Next
'si conocen otra manera mas eficiente de hacer esto, no duden en compartirla

6 comentarios:

  1. Hola jimenez, he seguido tu ejemplo, para deshabilitar la exportacion en excel. Pero en la ultima linea de tu codigo infCampo.SetValue(elemento, False). Me muestra e; sgte error.

    Referencia a objeto no establecida como instancia de un objeto

    Agradeceria, me podrias apoyar en el error.


    José.

    ResponderSuprimir
  2. Hola Josçe, si te fijas el error que te esta mandando es en elemento y el elemento(puede ser cualquier nombre) es un miembro de RenderingExtension. Lo que puede estar pasando es que no declaraste los imports o no los tienes declarados, o tambien pueda ser que yo tenga option strict off y tu tengas option strict on, aunque por lo general yo siempre ocupo option strict on, en fin, es complicado ver que error puede ser sin tener el codigo fuente a la mano, si me puedes enviar ese codigo a mi correo y yo lo intentare correr y probablemente sepamos la razon, este error significa que no has declarado la instancias de la clase, o sea que la clase esta pero la instancia no.
    saludos

    ResponderSuprimir
  3. Hola, Muchas Gracias.... me sirvio mucho tu ejemplo, para el que le da el error, si trabaja con 2008 quitele el word solo lo deja con excel


    un abrazo
    Andres

    ResponderSuprimir
  4. en C#

    foreach (RenderingExtension elemento in rptInforme.LocalReport.ListRenderingExtensions())
    {
    //ponemos la condición para entrar a poner falso la exportación a Excel y a Word
    if (elemento.Name == "Excel" | elemento.Name == "WORD")
    {
    //traemos la información del campo con sus respectivos flags
    FieldInfo infCampo = elemento.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic);
    //colocamos el valor de false a la extension
    infCampo.SetValue(elemento, false);
    }
    }

    ResponderSuprimir
  5. Andres, muchas gracis por tu comentario y tu aportacion de la solucion en C, de esa manera nos retroalimentamos y aprendemos un poco mas cada dia, un saludo y suerte con tus proyectos

    ResponderSuprimir
  6. Hola,

    el tema esta en que no se inicializa esta informacion:
    Dim infCampo As FieldInfo = elemento.[GetType]().GetField("m_isVisible", BindingFlags.Instance Or BindingFlags.NonPublic)
    Como si no reconociera la cadena "m_isVisible" que puede hacer falta?
    mil gracias.

    ResponderSuprimir