Criação de métodos complementares: Exportação de dados de GridView para Excel e Word – Parte 2

Veja neste artigo como exportar dados de um gridview para arquivos Excel e Word

 

Na parte anterior do artigo, criamos o método que fará a exportação do GridView, Poderíamos parar por ali mas existe a possibilidade de o GridView conter TemplateFields, contendo WebControls. Para essa situação, deveremos criar um método que substitui esses TemplateFields com WebControls por textos contidos nos próprios WebControls.

private static void PrepareGridViewForExport(Control gv) { LinkButton lb = new LinkButton(); Literal l = new Literal(); string name = String.Empty; for (int i = 0; i < gv.Controls.Count; i++) { if (gv.Controls[i].GetType() == typeof(LinkButton)) { l.Text = (gv.Controls[i] as LinkButton).Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(DropDownList)) { l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(ImageButton)) { l.Text = (gv.Controls[i] as ImageButton).ToolTip; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(Button) || gv.Controls[i].GetType() == typeof(HiddenField) || gv.Controls[i].GetType() == typeof(CheckBox)) { gv.Controls.Remove(gv.Controls[i]); } if (gv.Controls[i].HasControls()) { PrepareGridViewForExport(gv.Controls[i]); } } }


 

Aqui criamos uma função recursiva que lê  todos os controles de um GridView. Uma vez detectado um controle, é verificado seu tipo para poder ler seu conteúdo e jogar num controle Literal, que é colocado no logar do WebControl.

 

Pronto, com esse método, podemos criar um método público que fará a exportação do gridView:

public static void ExportGridView(FileType pType, string pFileName, GridView pGrid) { pGrid.AllowPaging = false; pGrid.GridLines = GridLines.Both; PrepareGridViewForExport(pGrid); ExportGrid(pGrid, pType, pFileName); }


 

    

A única observação a ser feita em relação a esse método é que ele retira a paginação do GridView, pois precisamos exportar todo o conteúdo do Grid.

 

Com nossa classe pronta, podemos codificar o evento do botão contido na página Default.aspx:

 

protected void btnExport_Click(object sender, EventArgs e) { Exporter.ExportGridView(Exporter.FileType.Excel, "teste", this.GridView1); }

 

O leitor poderá testar a aplicação exportando para Word e Excel. Vale ressaltar que é mantida a formatação do Grid:





 

Com o resultado da exportação, terminamos nosso artigo.

 

Espero que seja útil.

 

Um grande abraço a todos!

 

 

Artigos relacionados