Arquivo

Posts Tagged ‘GridView’

Exportar uma DataGridView para HTML em C#

7 de novembro de 2012 1 comentário

Olá pessoas!

Algumas vezes, trabalhando com desenvolvimento em WindowsForms, há a necessidade de imprimir uma DataGridView, exatamente como está sendo exibida.

Então criei uma classe para gerar um HTML com dados de uma DataGridView e abrir o HTML no navegar padrão instalado no windows. Segue o código:

public static class DataGridViewToHTML
{
	public static void ExibirHTML(DataGridView dgv)
	{
		string caminho = Path.Combine(Application.StartupPath, "relat.html");
		StreamWriter r = new System.IO.StreamWriter(caminho, false);

		Font fonte = dgv.ColumnHeadersDefaultCellStyle.Font;
		int tabSize = 0;
		foreach (DataGridViewColumn col in dgv.Columns)
			if (col.Visible) tabSize += col.Width;

		string[] conteudo = new string[dgv.Columns.Count];

		r.WriteLine("<html><head>");
		r.WriteLine("<meta http-equiv='Content-Type' "
			+ "content='text/html; charset=utf-8' />");
		r.WriteLine("<title>" + dgv.Name + "</title>");
		r.WriteLine("</head><body>");

		r.WriteLine("<div style='position:static'>");
		r.WriteLine("<table style='border-collapse: collapse; width:"
			+ tabSize.ToString() + "px'>");
		r.WriteLine("<tr>");

		foreach (DataGridViewColumn coluna in dgv.Columns)
		{
			if (coluna.Visible)
			{
				r.WriteLine("<td style='padding: 2px 2px 2px 2px; "
					+ "font-weight:bold; font-size:"
					+ Convert.ToInt32(fonte.Size + 3).ToString()
					+ "px; border-collapse: collapse; ' align='"
					+ coluna.InheritedStyle.Alignment.ToString().Substring(6, 
						coluna.InheritedStyle.Alignment.ToString().Length - 6)
					+ "' width='" + coluna.Width + "'>");
				r.WriteLine("<font face='" + fonte.Name + "'>");
				r.WriteLine(coluna.HeaderText.ToString());
				r.WriteLine("</font>");
				r.WriteLine("</td>");
			}
		}
		r.WriteLine("</tr>");
		if (dgv.Rows.Count > 0)
		{
			foreach (DataGridViewRow linha in dgv.Rows)
			{
				r.WriteLine("<tr>");
				foreach (DataGridViewCell celula in linha.Cells)
				{
					if (celula.Visible)
					{
						r.WriteLine("<td style='padding: 2px 2px 2px 2px; font-size:"
							+ Convert.ToInt32(fonte.Size + 3).ToString()
							+ "; border-collapse: collapse; ' align='"
							+ celula.InheritedStyle.Alignment.ToString().Substring(6,
								celula.InheritedStyle.Alignment.ToString().Length - 6)
							+ "' width='" + celula.Size.Width + "'>");
						r.Write("<font face='" + fonte.Name + "'>" 
							+ celula.FormattedValue.ToString() + "</font>");
						r.WriteLine("</td>");
					}
				}
				r.WriteLine("</tr>");
			}
		}
		r.WriteLine("</table></div></body></html>");
		r.Close();

		Process p = new Process();
		p.StartInfo = new ProcessStartInfo(caminho);
		p.StartInfo.UseShellExecute = true;
		p.Start();
	}
}

O código pode ser melhorado. Pode ainda acrescentar detalhes como um cabeçado ou roda-pé, para dar um sentido de relatório, ou ainda acrescentar cores. É, mas ai já é HTML.

Quem quiser, poderá baixar um exemplo de uso da classe DataGridViewToHTML, clicando aqui.

Um forte abraço a todos,
Ivan Meirelles

André Alves de Lima

Talking about Software Development and more...

Ivan Guimarães Meirelles

Analista Desenvolvedor

Vida de Suporte

Analista Desenvolvedor

Analista Desenvolvedor