Usuário com melhor resposta
Trazer informação da datatable para data grid view com mask

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!
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 Eventhttp://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! ;/- Marcado como Resposta José Milton Sampaio sexta-feira, 19 de junho de 2009 23:30
-
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!- Marcado como Resposta José Milton Sampaio 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. -
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? -
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. -
-
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 Eventhttp://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! ;/- Marcado como Resposta José Milton Sampaio sexta-feira, 19 de junho de 2009 23:30
-
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!- Marcado como Resposta José Milton Sampaio sexta-feira, 19 de junho de 2009 23:35