Formatando colunas da GridView em tempo de execução

 
Este artigo mostra como formatar uma coluna da GridView deixando a propriedade Auto-Generate Fields como True.

Primeiramente criei uma tabela com o nome de MERCADORIAS nela foram criados apenas quatro campos, são eles: , , e .

Foram inseridos dois registros.
Registros

Criaremos agora nosso formulário e nele iremos apenar adicionar uma GridView, não alterei nenhuma propriedade, o código HTML ficou da seguinte forma:

									
									
								
Neste exemplo utilizei o banco de dados Sql Server e também iremos trabalhar com a classe DataSet. Para o nosso artigo var ser necessário importar duas classes.
									using System.Data;
									using System.Data.SqlClient;
								
No Page_Load do formulário vamos montar nossa Grid com os dados do banco.
									SqlConnection con = new  SqlConnection(@"Data Source=QUINTELAB\SQLEXPRESS;Initial Catalog=Teste;User ID=sa; Pwd=senha;");
									con.Open();

									SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MERCADORIAS", con);
									DataSet ds = new DataSet();

									da.Fill(ds, "MERCADORIAS");
									da.Dispose();
									con.Close();

									GridView1.DataSource = ds.Tables["MERCADORIAS"].DefaultView;
									GridView1.DataBind();
								
No código acima criamos uma conexão com o nosso banco em Sql Server, um DataAdapter e um DataSet, depois de alimentado nosso DataSet. Populamos o nosso GridView com este DataSet.

Até agora, com o código, os nossos registros já podem ser visualizados em nossa Grid, mas sem formatação alguma.
GridSemFormatacao
Agora vamos tratar em nossa Grid como formatar nossa coluna PRECO e nossa coluna DATA_CADASTRO.

Iremos trabalhar com o evento RowDataBound da Grid.
									protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
										if (e.Row.RowType == DataControlRowType.DataRow) {
											string vPreco = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "PRECO"));
											vPreco = String.Format("{0:C2}", Convert.ToDouble(vPreco));
											e.Row.Cells[2].Text = vPreco;

											string vData = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "DATA_CADASTRO"));
											vData = String.Format("{0:d}", Convert.ToDateTime(vData));
											e.Row.Cells[3].Text = vData;
										}
									}
								

Acima temos o nosso evento RowDataBound, primeiro fiz uma verificação para ter certeza que a linha é do tipo DataRow, pois temos ainda outros tipos como o Footer e o Header.

Depois de feita essa verificação foram declaradas as variáveis vPreco e vData que recebem respectivamente os campos do banco de dados PRECO e DATA_CADASTRO.

Após ter preenchido nossas variáveis iremos formatá-las conforme a nossa necessidade, formatando a variável vPreco com o Tipo Currency e já convertendo pro tipo Double. Formatamos a variável vData para mostrar apenas a data menosprezando a hora e convertendo para o tipo DateTime.

Depois que as variáveis já possuem os valores formatados, basta igualar nossas colunas da Grid a suas respectivas variáveis. Foi utilizado o índice da coluna pois coincide com o indice dos campos em nossa query.

Por fim nosso código completo fica da seguinte forma:
									using System;
									using System.Collections;
									using System.Configuration;
									using System.Data;
									using SSystem.Data.SqlClient;
									using System.Web;
									using System.Web.Security;
									using System.Web.UI;
									using System.Web.UI.HtmlControls;
									using System.Web.UI.WebControls;
									using System.Web.UI.WebControls.WebParts;

									public partial class _Default : System.Web.UI.Page {
										protected void Page_Load(object sender, EventArgs e) {
											SqlConnection con = new SqlConnection(@"Data Source=QUINTELAB\SQLEXPRESS;Initial         Catalog=Teste;User ID=sa; Pwd=senha;");
											con.Open();

											SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MERCADORIAS", con);
											DataSet ds = new DataSet();

											da.Fill(ds, "MERCADORIAS");
											da.Dispose();
											con.Close();

											GridView1.DataSource = ds.Tables["MERCADORIAS"].DefaultView;
											GridView1.DataBind();
										}
										protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
											if (e.Row.RowType == DataControlRowType.DataRow) {
												string vPreco = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "PRECO"));
												vPreco = String.Format("{0:C2}", Convert.ToDouble(vPreco));
												e.Row.Cells[2].Text = vPreco;

												string vData = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "DATA_CADASTRO"));
												vData = String.Format("{0:d}", Convert.ToDateTime(vData));
												e.Row.Cells[3].Text = vData;
											}
										}
									}
								


E com o código acima, temos o seguinte resultado:
GridComFormatacao

Espero que seja útil. Abraços...