MANIPULAR DATAGRIDVIEW

PERCIFILHO 28/07/2022 16:00:47
#500262
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
NILSONTRES 29/07/2022 07:25:25
#500263
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
PERCIFILHO 30/07/2022 12:43:32
#500268
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.
NILSONTRES 01/08/2022 18:13:27
#500275
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.
PERCIFILHO 02/08/2022 13:29:23
#500279
Beleza, então vou tentar ver se consigo, valeu meu amigo.
Faça seu login para responder