Metodo Generico de Exportar GridView para Excel
Boas pessoas, tudo bem?
Eu estou tentando criar esse método de forma genérica para ser usada varias vezes em varias situações
Segue o código abaixo
public static void ExportaGridToExcel(GridView gr)
{
int intLinha = 0;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment;filename=Relatorio {0}.xls", DateTime.Now.ToString("dd/MM/yyyy").Substring(0, 2) + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Year.ToString()));
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
StringBuilder sb = new StringBuilder();
sb.Append("<style type=\"text/css\">\r\n");
sb.Append(".tabHead\r\n");
sb.Append("{\r\n");
sb.Append(" background-color: #000080;\r\n");
sb.Append(" border: solid 1px black;\r\n");
sb.Append(" color: White;\r\n");
sb.Append(" font-weight: bold;\r\n");
sb.Append("}\r\n");
sb.Append(".tabRow\r\n");
sb.Append("{\r\n");
sb.Append(" border: solid 1px black;\r\n");
sb.Append("}\r\n");
sb.Append("</style>\r\n\r\n");
//Header
sb.AppendFormat("<table>\r\n");
sb.AppendFormat("<tr>\r\n");
sb.AppendFormat("</tr>\r\n");
sb.AppendFormat("<tr>\r\n");
sb.AppendFormat("\t<td></td>\r\n");
sb.AppendFormat("\t<td></td>\r\n");
sb.AppendFormat("\t<td></td>\r\n");
sb.AppendFormat("\t<td class=\"tabHead\">" + DateTime.Now.ToString("dd/MM/yyyy") + "</td>\r\n");
sb.AppendFormat("</tr>\r\n");
sb.AppendFormat("</table>\r\n");
sb.AppendFormat("<table>\r\n");
sb.AppendFormat("<thead>\r\n");
sb.AppendFormat("<tr>\r\n");
sb.AppendFormat("</tr>\r\n");
sb.AppendFormat("<tr>\r\n");
for (int i = 0; i < gr.Columns.Count; i++)
{
sb.AppendFormat("\t<td class=\"tabHead\">" + gr.Columns[i].HeaderText + "</td>\r\n");
}
sb.AppendFormat("</tr>\r\n");
sb.AppendFormat("</thead>\r\n");
sb.AppendFormat("<tbody>\r\n");
sb.AppendFormat("<tr>\r\n");
for (int a = 0; a < gr.Columns.Count; a++)
{
GridViewRow row = gr.Rows[i];
for (int b = 0; b < row.Cells.Count; b++)
{
sb.AppendFormat("\t<td class=\"tabRow\">" + ((row.Cells[b].Text != null) ? row.Cells[b].Text : "").ToString() + "</td>\r\n");
sb.Append("\n");
}
}
sb.AppendFormat("</tr>\r\n");
//Footer
sb.AppendFormat("</tbody>\r\n");
sb.AppendFormat("</table>\r\n");
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Write(sb.ToString());
HttpContext.Current.Response.End();
}o problema é que ele esta gerando a Cells na mesma linha deveria quebrar as linhas e fazer linha a linha, alguém sabe onde estou errando ?
Discussão (2)
Carregando comentários...