2011-11-28 16 views
5

Tengo una vista de cuadrícula. Que contiene algunas columnas. Supongamos que tiene 10 columnas, solo 8 columnas tienen encabezado, mientras que 2 encabezado de columnas están vacías. Ahora estoy exportando este gridview a Excel que contiene las 10 columnas con 2 columnas sin nombre. ¿Cómo puedo excluir esas 2 columnas de encabezado vacías mientras exporto GridView a Excel? Estoy utilizando el código siguiente para el mismo:Cómo saltear una columna mientras se exporta la vista de cuadrícula en excel?

 protected void btnExportToExcel_Click(object sender, EventArgs e) 
     { 
      Export("Customers.xls", this.gdvMessages); 
     } 

     private void Export(string fileName, GridView gv) 
     { 
      HttpContext.Current.Response.Clear(); 
      HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format("attachment; filename={0}", fileName)); 
      HttpContext.Current.Response.ContentType = "application/ms-excel"; 

      using (StringWriter sw = new StringWriter()) 
      { 
       using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
       { 
        // Create a form to contain the grid 
        Table table = new Table(); 

        // add the header row to the table 
        if (gv.HeaderRow != null) 
        { 
         PrepareControlForExport(gv.HeaderRow); 
         table.Rows.Add(gv.HeaderRow); 
        } 

        // add each of the data rows to the table 
        foreach (GridViewRow row in gv.Rows) 
        { 
         PrepareControlForExport(row); 
         table.Rows.Add(row); 
        } 

        // add the footer row to the table 
        if (gv.FooterRow != null) 
        { 
         PrepareControlForExport(gv.FooterRow); 
         table.Rows.Add(gv.FooterRow); 
        } 

        // render the table into the htmlwriter 
        table.RenderControl(htw); 

        // render the htmlwriter into the response 
        HttpContext.Current.Response.Write(sw.ToString()); 
        HttpContext.Current.Response.End(); 
       } 
      } 
     } 

Respuesta

3

usted podría no incluir esas dos columnas en la tabla HTML si no los necesita .... O bien, podría volver a escribir la tabla cuando el usuario presione el botón "Exportar a Excel" y no incluya las columnas. También podría tener la tabla más otra tabla con columnas ocultas y obtener los datos de ella cuando el usuario haga clic en el botón "Exportar a Excel". Además, no podría tener los datos mostrados en absoluto, y cuando el usuario carga la página, o haga clic en el botón, descargue los datos sin las columnas. ¡Buena suerte!

Editado: Para este escenario exclusivo, es posible que desee editar el código de la siguiente manera:

// add the header row to the table 
      if (gv.HeaderRow != null) 
      { 
       TableRow tr = new TableRow(); 

       foreach (DataControlFieldHeaderCell c in gv.HeaderRow.Cells) 
       { 
        if (c.Text != " ") { 
         tr.Cells.Add(new TableCell() { Text = c.Text}); 
        } 
       } 

       PrepareControlForExport(tr); 
       table.Rows.Add(tr); 
      } 

Lo que parte del código que hace es recorrer cada celda de la fila de cabecera, y si está vacío, entonces no lo incluyas. Luego agréguelo a la tabla html. Esto se puede modificar si se quiere para que el resto de la tabla agregue un cellspan al que pertenecen estas columnas. Si esto no es lo que necesita, tal vez un par de capturas de pantalla con su Gridview real y el resultado deseado sería ideal.

¡Buena suerte!

+0

Puede darme un ejemplo para "simplemente no incluir esas dos columnas en su tabla HTML" – Sandy

2

su lugar se puede ocultar las columnas al exportar a Excel utilizando el código de abajo

this.myGridview.Columns [0] .Visible = false;

donde '0' es el índice de la columna que queremos ocultar.

+0

Tenía la misma necesidad que Sandy, solo estaba usando un control DataGrid usando un código vb.net anterior. La idea de user2508258 me solucionó el problema. Mi código de vb.net: DataGrid1.Columns (0) .Visible = False (también quise eliminar la primera columna durante la exportación a Excel). – Doreen

Cuestiones relacionadas