quintelab 91 Denunciar post Postado Março 14, 2008 Bom, já respondi uma questão dessa aqui no fórum, então resolvi escrever um artigo sobre o assunto. Artigo que já estará no meu site quando for pro ar. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif 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: MERCADORIA_ID (int), MERCADORIA(nvarchar(50)), PRECO(numeric(18,2)) e DATA_CADASTRO(datetime). Foram inseridos dois 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: <asp:GridView ID="GridView1" runat="server"> </asp:GridView> 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. Imports System.Data Imports System.Data.SqlClient No Page_Load do formulário vamos montar nossa Grid com os dados do banco. Dim con As New SqlConnection("Data Source=QUINTELAB\SQLEXPRESS;Initial Catalog=Teste;User ID=sa; Pwd=senha;") con.Open() Dim da As New SqlDataAdapter("SELECT * FROM MERCADORIAS", con) Dim ds As 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. 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 Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim vPreco As String = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "PRECO")) vPreco = String.Format("{0:C2}", Convert.ToDouble(vPreco)) e.Row.Cells(2).Text = vPreco Dim vData As String = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "DATA_CADASTRO")) vData = String.Format("{0:d}", Convert.ToDateTime(vData)) e.Row.Cells(3).Text = vData End If End Sub 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: Imports System.Data Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim con As New SqlConnection("Data Source=QUINTELAB\SQLEXPRESS;Initial Catalog=Teste;User ID=sa; Pwd=senha;") con.Open() Dim da As New SqlDataAdapter("SELECT * FROM MERCADORIAS", con) Dim ds As New DataSet da.Fill(ds, "MERCADORIAS") da.Dispose() con.Close() GridView1.DataSource = ds.Tables("MERCADORIAS").DefaultView GridView1.DataBind() End Sub Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim vPreco As String = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "PRECO")) vPreco = String.Format("{0:C2}", Convert.ToDouble(vPreco)) e.Row.Cells(2).Text = vPreco Dim vData As String = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "DATA_CADASTRO")) vData = String.Format("{0:d}", Convert.ToDateTime(vData)) e.Row.Cells(3).Text = vData End If End Sub End Class E com o código acima, temos o seguinte resultado: Espero que seja útil. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites