2010-08-16 80 views
15

Estoy interesado en crear una opción personalizada Exportar a Excel para mi Informe en ReportViewer. Esto es sobre todo porque quiero pdf disalbed y lo hice a través de:Crear una exportación personalizada a Excel para ReportViewer (rdlc)

ReportViewer1.ShowExportControls = false; 

Puesto que no hay manera de desactivar cualquier funcionalidad específica de exportación (por ejemplo, PDF, pero no sobresalir) en ReportViewer. Aquí está mi código (ligeramente modificado) a continuación. Idealmente, me gustaría algo similar a las opciones de exportación anteriores donde puedo guardar el archivo en cualquier ubicación que desee.

EDITAR: El código funciona, pero ¿cómo tendría que modificar el Filestream para que, en lugar de guardar el archivo automáticamente, pueda pedirle al usuario que lo guarde en la ubicación que desee?

protected void btnExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    FileStream fs = new FileStream(@"c:\output.xls", 
     FileMode.Create); 
    fs.Write(bytes, 0, bytes.Length); 
    fs.Close(); 

} 

Respuesta

18

puse esto juntos sobre la base de la documentación de Microsoft sobre ReportViewer y algunas búsquedas de Google en caso de que alguien se encuentra con el problema similar al mío:

protected void ExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 
    string filename; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    filename = string.Format("{0}.{1}", "ExportToExcel", "xls"); 
    Response.ClearHeaders(); 
    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 
    Response.ContentType = mimeType; 
    Response.BinaryWrite(bytes); 
    Response.Flush(); 
    Response.End(); 
} 
26

Sólo una cabeza ... la respuesta será aceptado render como un archivo XLS, que fue solicitado por el póster original.

Sin embargo, ahora también puede exportar a XLSX. Debe cambiar el parámetro format del método Render() de "Excel" a "EXCELOPENXML".

Para obtener una lista completa de valores posibles, puede llamar al ReportViewer1.LocalReport.ListRenderingExtensions(). Cuando me encontré en mi ejemplo visor de informes Tengo estos posibles opciones:

"Excel" "EXCELOPENXML" "IMAGE" "PDF" "WORD" "WORDOPENXML"

he encontrado que es muy difícil determinar lo que sea necesario para pasar en los formatos . MSDN documenta esto muy mal si me preguntas.

+1

He buscado esta respuesta por tanto tiempo. Muchas gracias. –

0

Si desea ocultar una sola opción de exportación (aunque suena como usted parece encontrar una exportación personalizada útil), aquí hay dos opciones:

Opción A. El uso de CSS para ocultar la opción de exportación:

  1. En la ventana de depuración F12 de su navegador, ubique el elemento HTML DOM para la exportación, haga clic con el botón derecho y copie el identificador único de CSS.
  2. Agregar a su archivo CSS (en sustitución del selector CSS con el contexto de su portapapeles): se aconseja

    #ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3) 
    { 
        display:none; 
    } 
    

precaución cuando se hace referencia a un selector CSS oscura como esta, ya que es hacker.

Opción B. El uso de código subyacente para ocultar la opción de exportación

  1. Añadir el método siguiente para su .aspx.archivo cs como código de fondo.

    public void DisableUnwantedExportFormat(ReportViewer ReportViewerID, string strFormatName) 
    { 
        FieldInfo info; 
        foreach (RenderingExtension extension in ReportViewerID.ServerReport.ListRenderingExtensions()) 
        { 
         if (extension.Name == strFormatName) 
         { 
          info = extension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic); 
          info.SetValue(extension, false); 
         } 
        } 
    } 
    
  2. Elija el control Reportviewer relevante y presione F4.

  3. En la ventana Propiedades, haga clic en el icono de eventos, haga doble clic en el elemento PreRender para generar el método ReportViewer1_PreRender, que asumen su ID de control ReportViewer es ReportViewer1, editar su método, como a continuación:

    protected void ReportViewer1_PreRender(object sender, EventArgs e) 
    { 
        DisableUnwantedExportFormat((ReportViewer)sender,"Excel"); 
    } 
    

(Origen: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/74dad27b-ef7e-4b9b-8922-666b317b3094/how-to-hide-pdf-in-export-option-in-ssrs-reportviewer?forum=sqlreportingservices, y el enlace de @ valik solo responde.)

Cuestiones relacionadas