MANIPULAR DATAGRIDVIEW
Olá pessoal
Tenho em uma aplicação winforms um Datagridview onde está definido que as células não podem ser editadas.
Porém precisava que ao clicar somente em duas colunas, torna-las editáveis.
Vou dar um exemplo:
Coluna8 Coluna9 Coluna10
Valora Valorb Valorc
As colunas 8 e 9 é pra editar. Então quando clicar na 8 tem que tornar as duas editáveis.
Só que preciso clicar na 8 e o usuário digita um valor aàquando teclar enter passa para a coluna 10 e o usuário digita o valor dela. Aàestando na coluna 10 se o usuário teclar enter vá para a coluna 8 da próxima linha.
É possÃÂvel manipular o grid dessa forma?
Não sei se fui muito claro na dúvida
Tenho em uma aplicação winforms um Datagridview onde está definido que as células não podem ser editadas.
Porém precisava que ao clicar somente em duas colunas, torna-las editáveis.
Vou dar um exemplo:
Coluna8 Coluna9 Coluna10
Valora Valorb Valorc
As colunas 8 e 9 é pra editar. Então quando clicar na 8 tem que tornar as duas editáveis.
Só que preciso clicar na 8 e o usuário digita um valor aàquando teclar enter passa para a coluna 10 e o usuário digita o valor dela. Aàestando na coluna 10 se o usuário teclar enter vá para a coluna 8 da próxima linha.
É possÃÂvel manipular o grid dessa forma?
Não sei se fui muito claro na dúvida
Voce deixa o controle editável ReadOnly=True, e configura por célula nas propriedades de cada uma ReadOnly=True ou ReadOnly=False
Quanto ao focu já é meio chatinho, mas utilizo essa solução.
Procure sempre trabalhar com nomes de celulas e não com seus index, porque futuramente vc insere mais celulas no seu grid e vai te complicar
"D1=DatagridView
"C1,C2,C3,C4=NOME DAS CELULAS
Private Sub D1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles D1.CellEndEdit
Try
If D1.Columns(e.ColumnIndex).Name = C1.Name Then" se estiver na coluna 1, pula para a coluna 3
Me.D1.CurrentCell = Me.D1(C3.Name, e.RowIndex)"Manda para a celula C3, NA MESMA LINHA. esse rowindex é obrigatorio, embora ele não respeite nesse evento
SendKeys.Send("{up}")" como utilizamos o evento CellEndEdit, por padrão ele joga para celula de baixo, então sobe para celula de cima. Obs:não encontrei outra solução para isso, se alguem "souber
End If
If D1.Columns(e.ColumnIndex).Name = C2.Name Then" se estiver na coluna 2, pula para a coluna 4
Me.D1.CurrentCell = Me.D1(C4.Name, e.RowIndex)
SendKeys.Send("{up}")
End If
Catch
End Try
End Sub
Quanto ao focu já é meio chatinho, mas utilizo essa solução.
Procure sempre trabalhar com nomes de celulas e não com seus index, porque futuramente vc insere mais celulas no seu grid e vai te complicar
"D1=DatagridView
"C1,C2,C3,C4=NOME DAS CELULAS
Private Sub D1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles D1.CellEndEdit
Try
If D1.Columns(e.ColumnIndex).Name = C1.Name Then" se estiver na coluna 1, pula para a coluna 3
Me.D1.CurrentCell = Me.D1(C3.Name, e.RowIndex)"Manda para a celula C3, NA MESMA LINHA. esse rowindex é obrigatorio, embora ele não respeite nesse evento
SendKeys.Send("{up}")" como utilizamos o evento CellEndEdit, por padrão ele joga para celula de baixo, então sobe para celula de cima. Obs:não encontrei outra solução para isso, se alguem "souber
End If
If D1.Columns(e.ColumnIndex).Name = C2.Name Then" se estiver na coluna 2, pula para a coluna 4
Me.D1.CurrentCell = Me.D1(C4.Name, e.RowIndex)
SendKeys.Send("{up}")
End If
Catch
End Try
End Sub
Nilson não consegui fazer funcionar esse código que voce postou.
O que eu estava querendo é assim: tenho um Datagridview que é preenchido com os dados pelo DataSource, e o grid fica setado com Edit Mode Programatically, para as células não serem editadas. Mais ou menos assim
Time1 Gol1 X Gol2 Time2
Portugal. X. Holanda
Brasil. X. Chile
Aào usuário vai digitar os gols. Então ele clica no Gol1, as duas células ficam editáveis (isso eu consegui com o evento CellMouseClick), digita e quando ele clicar Enter tem que ir para o Gol2 da mesma linha, aàele digita e quando teclar Enter tem que ir para o Gol1 da próxima linha, entendeu?
Não sei quais eventos teria que usar para fazer isso, nem sei se é possÃÂvel usando o Datagridview.
Se alguém puder ajudar ou dar alguma opinião de outra maneira pra fazer isso, agradeço.
O que eu estava querendo é assim: tenho um Datagridview que é preenchido com os dados pelo DataSource, e o grid fica setado com Edit Mode Programatically, para as células não serem editadas. Mais ou menos assim
Time1 Gol1 X Gol2 Time2
Portugal. X. Holanda
Brasil. X. Chile
Aào usuário vai digitar os gols. Então ele clica no Gol1, as duas células ficam editáveis (isso eu consegui com o evento CellMouseClick), digita e quando ele clicar Enter tem que ir para o Gol2 da mesma linha, aàele digita e quando teclar Enter tem que ir para o Gol1 da próxima linha, entendeu?
Não sei quais eventos teria que usar para fazer isso, nem sei se é possÃÂvel usando o Datagridview.
Se alguém puder ajudar ou dar alguma opinião de outra maneira pra fazer isso, agradeço.
DataSource,
Muita gente defende essa forma de carregar Grid, até concordo em partes, mas eu não faço isso em grids que serão manipulados pelo usuário, realmente não vai funcionar.
Só se vc carregar ele sem DataSource.
Muita gente defende essa forma de carregar Grid, até concordo em partes, mas eu não faço isso em grids que serão manipulados pelo usuário, realmente não vai funcionar.
Só se vc carregar ele sem DataSource.
Beleza, então vou tentar ver se consigo, valeu meu amigo.
Faça seu login para responder