MANIPULAR DATAGRIDVIEW

 Tópico anterior Próximo tópico Novo tópico

MANIPULAR DATAGRIDVIEW

C#

 Compartilhe  Compartilhe  Compartilhe
#500262 - 28/07/2022 16:00:47

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


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

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#500263 - 29/07/2022 07:25:25

NILSONTRES
SAO PAULO
Cadast. em:Março/2012


Última edição em 29/07/2022 08:54:16 por NILSONTRES

Você 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




#500268 - 30/07/2022 12:43:32

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Nilson não consegui fazer funcionar esse código que você 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.

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#500275 - 01/08/2022 18:13:27

NILSONTRES
SAO PAULO
Cadast. em:Março/2012


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.



#500279 - 02/08/2022 13:29:23

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Beleza, então vou tentar ver se consigo, valeu meu amigo.

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário