Ir para conteúdo
Fórum Script Brasil
  • 0

Formatando colunas da GridView em tempo de execução


quintelab

Pergunta

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. :grin:

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)), preço(numeric(18,2)) e DATA_CADASTRO(datetime).

Foram inseridos dois registros.

2_1.gif

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. 2_2.gif Agora vamos tratar em nossa Grid como formatar nossa coluna preço 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, "preço"))
        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 preço 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, "preço"))
            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:

2_3.gif

Versão em c#: http://www.quintelab.com.br/ShowArtigos.asp?codigo=4

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

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...