SOMENTE NUMEROS EM DATAGRIDVIEW

ATSILVA 09/07/2014 17:39:30
#439432
Utilizo VB.NET 2012 e tenho uma tela com um DataGridView.
Gostaria de formatar a coluna PREÇO para que aceite somente numero e virgula.
Como fazer?
TUNUSAT 10/07/2014 15:20:35
#439446
ATSILVA,

Experimente isto:

1 - Com o botão do lado direito do mouse clique em cima da grid;
2 - No menu que aparecerá, escolha [Ô]Edit columns...[Ô];
3 - Dentro da [Ô]Edit Columns[Ô] procure por: [Ô]Appearence[Ô] / [Ô]DefaultCellStyle[Ô] -> clique no botão (...);
4 - Dentro da [Ô]CellStyle Builder[Ô] procure por: [Ô]Behavior[Ô] / [Ô]Format[Ô] -> clique no botão (...);
5 - Em [Ô]Format Type[Ô], escolha [Ô]Currency[Ô];

[][ô]s,
Tunusat.

GUIMORAES 10/07/2014 16:40:55
#439448
Resposta escolhida
ATSILVA, a solução que o TUNUSAT passou irá resolver seu problema, mais fica claro que o usuário poderá escrever letras no textbox, para resolver este problema você pode adicionar no evento DataError do seu datagrid uma mensagem de aviso.
ATSILVA 11/07/2014 10:45:26
#439460
Obrigado. A formatação da coluna de valor eu consegui fazer.
O que desejo mesmo é bloquear a digitação de letras nesta coluna de PREÇO e permitir somente NUMERO e VIRGULA.
No Visual Basic 6 fazia isso no FlexGrid através do evento KeyPress fazendo o tratamento das teclas pressionadas.
Estou começando no VB.NET e não sei como fazer.
GUIMORAES 11/07/2014 11:31:30
#439463
Você deve adicionar uma Handler para isto funcionar.

Vou dar um exemplo FUNCIONAL, basta você aplicar a sua necessidade

no evento EditingControlShowing do datagrid você adiciona isto:

Citação:


Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
Dim tb As TextBox = CType(e.Control, TextBox)
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
End Sub



Agora basta criar o evento keypress

Citação:


Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = [Ô].[Ô] And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If
End Sub



Abraços
ATSILVA 11/07/2014 12:48:23
#439466
GUIMORAES123 sua dica foi funcionou. Porém tentei aplicar o mesmo código para outra coluna QTDE. onde tem que ser digitado somente numero sem a virgula e ai a coluna PREÇO parou de funcionar corretamente não deixando incluir a virgula no preço.

Private Sub gridProduto_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles gridProduto.EditingControlShowing
Dim tbQtde As TextBox = CType(e.Control, TextBox)
AddHandler tbQtde.KeyPress, AddressOf clQtde_KeyPress

Dim tbPreco As TextBox = CType(e.Control, TextBox)
AddHandler tbPreco.KeyPress, AddressOf clPreco_KeyPress
End Sub

Private Sub clQtde_KeyPress(sender As Object, e As KeyPressEventArgs) Handles gridProduto.KeyPress
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack Then
e.Handled = True
End If
End Sub

Private Sub clPreco_KeyPress(sender As Object, e As KeyPressEventArgs) Handles gridProduto.KeyPress
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If
End Sub
GUIMORAES 11/07/2014 13:23:52
#439467
Não precisa criar um método para cada campo, basta fazer um if e definir qual campo pode receber somente números
ex:

Citação:



Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
Dim tb As TextBox = CType(e.Control, TextBox)
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
End Sub

Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If DataGridView1.CurrentRow.Cells([Ô]qtd[Ô]).Selected = True Then
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = [Ô].[Ô] And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If
End If
End Sub

ATSILVA 11/07/2014 15:07:30
#439475
Deu certo. Muito obrigado a todos e em especial ao GUIMORAES123.
Tópico encerrado , respostas não são mais permitidas