none
Trazer informação da datatable para data grid view com mask RRS feed

  • Pergunta

  • Boa noite!
    Tenho um campo em determinada tabela que guardo como número inteiro, gostaria que ao trazê-lo (estou utilizando datatable) ele apareça no datagridview com uma máscara.
    Exemplo:

    Matrícula: 123456789
    Nome: José

    Essa matrícula deverá aparecer no datagridview como 1.234.56.78.9

    Até agora achei isso aqui: http://www.windows-tech.info/3/2d504802076d61fa.php

    Mas não estou conseguindo entender (C# não é minha praia)!

    Obrigado!
    sexta-feira, 19 de junho de 2009 00:45

Respostas

  • Ah foi mal cara.. infelizmente faz um tempão que não mecho com DataSets,
    se não me engano você pode modificar os dados no próprio DataSet.. tipo:

    For i As Integer = 0 To DataTable.Tables(0).Rows.Count -1
          DataTable.Tables(0).Rows(i)(0) = ValorFormatado
    Next

    Outra, não sei se poderá vir em boa hora:
    DataGridView:CellFormatting Event
    http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

    Databinding and Binding Events (Currency Events)
    http://www.vb-tips.com/dbpages.aspx?ID=c4832a2a-2b95-4ded-93d9-4deb7fa4a0b8

    DataGridView - Cell Format
    http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/de6116fc-e546-45a5-bf63-61f0621b2efc/


    Espero ter ajudado! ;/
    sexta-feira, 19 de junho de 2009 19:59
  • Valeu irmão!!!!
    Ajudou muito, na verdade tive que misturar esses últimos links, com o que já estávamos debatendo. O resultado ficou perfeito.
    Pra facilitar pros futuros incautos, estou postando aqui:

     Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            If e.ColumnIndex = 3 Then
                Formata(e)
            End If
    
        End Sub
    
        Private Shared Sub Formata(ByVal formatting As DataGridViewCellFormattingEventArgs)
            If formatting.Value IsNot Nothing Then
                Try
                    Dim stbCAE As System.Text.StringBuilder = New System.Text.StringBuilder()
                    Dim lngCAE As Long = Long.Parse(formatting.Value.ToString)
    
    
                    stbCAE.Append(Format(lngCAE, "0-000-00-00-0"))
                    stbCAE.Replace("-", ".")
    
                    formatting.Value = stbCAE.ToString()
                    formatting.FormattingApplied = True
                Catch notInDateFormat As FormatException
                    ' Set to false in case there are other handlers interested trying to
                    ' format this DataGridViewCellFormattingEventArgs instance.
                    formatting.FormattingApplied = False
                End Try
            End If
        End Sub


    Ufa!
    É isso! E mais uma vez obrigado pela ajuda!
    sexta-feira, 19 de junho de 2009 23:35

Todas as Respostas

  • José, formatação de células no DataGridView é muito popular, existem vários métodos de se fazer isto...

    Muitos criam um MaskedTextBox sobreposto à célula, como no link que você citou.

    A célula onde será armazenado o campo "Matrícula" poderá ser editada?
    - Caso não, ao jogar o valor no DataGridView você pode formatá-lo antes, usando o Format.
    No seu caso: Format(Matricula, "#.###.##.##.#").
    - Caso sim, você pode remover a formatação do campo ao iniciar a edição da célula e reaplicar o Format ao finalizar a edição.

    Também dê uma olhada na documentação da MSDN e no FAQ do DataGridView.
    sexta-feira, 19 de junho de 2009 04:15
  • Eu dei uma olhada nesse FAQ mas não achei exemplo disso, somente nos Samples (que estão em C#).

    Acredito que eu não possa usar o Format porque o datagridview está sendo alimentado atraves do DataTable.

    EDIT:

    Pesquisando, consegui usar o Format e também utilizei o exemplo abaixo:
    http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/0bbef2bc-e840-4acc-aa55-015d32779a50

    A questão é que não funciona.
    Acredito que nos dois métodos, o número seja interpretado como valor monetário e os resultados foram:

    123.456.789 ou 123456789

    Na máscara que eu quero não ficou!

    Alguma idéia?
    sexta-feira, 19 de junho de 2009 14:06
  • Ah sim entendo, é porque estas funções são específicas para conversão de números com casas decimais,hexadecimais,datas, etc.
    my bad.

    Faça uma bugiganga :P
    tipo..
    Format(Convert.Int32(Matricula), "#-###-##-##-#").Replace("-", ".")

    Usei o traço pois ele é considerado como caracter e não influencia em casas numéricas ou coisas do tipo.
    sexta-feira, 19 de junho de 2009 17:59
  • Bem pensado mas o problema é que não tem como eu jogar dessa forma. Estou utilizando do grid com o .datasource = datatable.

    Dessa forma não tenho acesso direto ao valor para poder fazer isso.
    sexta-feira, 19 de junho de 2009 18:51
  • Ah foi mal cara.. infelizmente faz um tempão que não mecho com DataSets,
    se não me engano você pode modificar os dados no próprio DataSet.. tipo:

    For i As Integer = 0 To DataTable.Tables(0).Rows.Count -1
          DataTable.Tables(0).Rows(i)(0) = ValorFormatado
    Next

    Outra, não sei se poderá vir em boa hora:
    DataGridView:CellFormatting Event
    http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

    Databinding and Binding Events (Currency Events)
    http://www.vb-tips.com/dbpages.aspx?ID=c4832a2a-2b95-4ded-93d9-4deb7fa4a0b8

    DataGridView - Cell Format
    http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/de6116fc-e546-45a5-bf63-61f0621b2efc/


    Espero ter ajudado! ;/
    sexta-feira, 19 de junho de 2009 19:59
  • Valeu irmão!!!!
    Ajudou muito, na verdade tive que misturar esses últimos links, com o que já estávamos debatendo. O resultado ficou perfeito.
    Pra facilitar pros futuros incautos, estou postando aqui:

     Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            If e.ColumnIndex = 3 Then
                Formata(e)
            End If
    
        End Sub
    
        Private Shared Sub Formata(ByVal formatting As DataGridViewCellFormattingEventArgs)
            If formatting.Value IsNot Nothing Then
                Try
                    Dim stbCAE As System.Text.StringBuilder = New System.Text.StringBuilder()
                    Dim lngCAE As Long = Long.Parse(formatting.Value.ToString)
    
    
                    stbCAE.Append(Format(lngCAE, "0-000-00-00-0"))
                    stbCAE.Replace("-", ".")
    
                    formatting.Value = stbCAE.ToString()
                    formatting.FormattingApplied = True
                Catch notInDateFormat As FormatException
                    ' Set to false in case there are other handlers interested trying to
                    ' format this DataGridViewCellFormattingEventArgs instance.
                    formatting.FormattingApplied = False
                End Try
            End If
        End Sub


    Ufa!
    É isso! E mais uma vez obrigado pela ajuda!
    sexta-feira, 19 de junho de 2009 23:35