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:
HTML
<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.
CODE
Imports System.Data
Imports System.Data.SqlClient
No Page_Load do formulário vamos montar nossa Grid com os dados do banco.
CODE
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.
CODE
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:
CODE
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:
Versão C# -->
http://www.quintelab.com.br/ShowArtigos.asp?codigo=4
Espero que seja útil. Abraços...
Comentários:
David Cruvinel disse:
bacana o artigo....
Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).