none
Foco em celula do datagrid

    Pergunta

  • Ola

    Preciso dar o foco em uma celula de um datagrid da linha atual que o usuario ira utilizar. Exisite algum codigo ou opcao que faça isso?

    Obrigado
    sexta-feira, 25 de janeiro de 2008 10:45

Respostas

  •  

    bmab,

     

    O evento CellValidating se refere a célula que você esta! Se você esta na primeira célula, da primeira linha do Grid, digita algo e sai, será disparado o CellValidating.

     

    Code Snippet

    Private Sub grdX_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles grdX.CellValidating

     

      If Not IsNumeric(e.FormattedValue) then e.Cancel = False

     

    End Sub

     

     

    O código acima irá validar o valor que se encontra no FormattedValue, que é o que você esta digitando na célula, se você quiser criar uma hierarquia pode fazer assim:

    Code Snippet

     

    (...)

     

      Select Case e.ColumnIndex

         Case 0

            If IsNumeric(e.FormattedValue) then (...)

         Case 1

    (...)

     

     

     

    O evento CellValidated (repare que o verbo Validated esta no passado) é o evento que disparado quando a validação terminou, então nesse evento depois de você ter entrado com valores e estarem validados, pode disparar um cálculo de total, por exemplo.

     

    Perceba que (usando o Debugger) dentro do CellValidating a sua célula ainda não foi validada, portando o conteúdo que você irá pegar com (...).Cell.Item(0).Value ainda não existe!! Só depois de validado ele passa a existir como valor da célula.

    quarta-feira, 20 de fevereiro de 2008 18:39

Todas as Respostas

  • Bmab, para limpar a seleção atual faça assim:

     

    DataGridView1.ClearSelection()

     

    E para dar o foco (seleção) em uma célula, faça assim:

     

    DataGridView1.Rows(0).Cells("Coluna").Selected = True

     

    Espero ter ajudado.

     

    Se a resposta foi útil, marque-a como tal.

     

    sexta-feira, 25 de janeiro de 2008 10:53
  • Ola..

    Obrigado pela ajuda

    Mas nao funcionou..coloquei no evento cellendedit do grid e continua indo para a celula seguinte, sendo que o codigo nao muda nada..


    Mais uma vez obrigado
    sexta-feira, 25 de janeiro de 2008 14:55
  • bmab, o código funcionaria em algum botão ou outro evento. Mas controlar o ordem de tabulação em um grid é algo realmente complicado. nunca achei um código eficaz para isso...

     

    sexta-feira, 25 de janeiro de 2008 15:08
  • Ha alguma ferramenta, ou codigo, que valide o conteudo de uma celula da linha atual do grid, e caso o valor nao seja valido, nao permita que o usuario mude para a proxima celula??

    Obrigado
    sexta-feira, 25 de janeiro de 2008 15:30
  • em meu projeto... eu tenhu um datagridview... eu faço assim...

    obtenho a coluna e a celula atual...
         value = DataGridView1.CurrentRow.Index.ToString
            value2 = DataGridView1.CurrentCell.ColumnIndex.ToString


    do foco na celula que quero...
       DataGridView1.CurrentCell = DataGridView1.Rows(value).Cells(value2)


    sexta-feira, 25 de janeiro de 2008 21:13
  • Ola..

    Obrigado pela ajuda..

    executei o codigo e obtive o seguinte erro: Não foi possível encontrar a coluna denominada 2. Nome do parâmetro: columnName.

    Tentei renomear a coluna do grid para 2 e nao é possivel..

    Alguma sugestao??

    Mais uma vez obrigado
    quarta-feira, 30 de janeiro de 2008 14:53
  •  

    Tente fazer assim:

     

    DataGridView1.CurrentCell = DataGridView1.Rows(Convert.ToInt32(value)).Cells(Convert.ToInt32(value2))

     

    Atenciosamente,

    quarta-feira, 30 de janeiro de 2008 15:03
  •  

    você usou o codigo abaixo e somente mudou os campos "value" e "value2".

     

    Code Snippet

     DataGridView1.CurrentCell = DataGridView1.Rows(value).Cells(value2)

     

     

    nesses campos, tem q ter uma variavel do tipo row e do tipo cell..

     

    por exemplo, pra ele fica o foco sempre na mesma coluna, e e somente pular para a linha de baixo eu faço o seguinte:

     

    Code Snippet

     value = DataGridView1.CurrentRow.Index.ToString + 1
     value2 = DataGridView1.CurrentCell.ColumnIndex.ToString

     

     

    entendeu?

     

    espero que tenha sido util, se foi, marque como tal.

    quarta-feira, 30 de janeiro de 2008 17:11
  • Ola..

    obrigado pela ajuda..

    Uma ultima duvida..qual evento do datagrid voce recomenda que eu utilize, pois eu tenho que usar o CellEndEdite depois CellBeginEdit para chegar no efeito desejado...

    O meu problema é: no datagrid cada coluna representa codigo(banco, cliente..) e assim que alguem digita o codigo, pesquiso ele e verifico se ele existe, caso exista passa para a proxima celula, mas se ele nao existir permanece na celula atual ate que o codigo seja valido...

    voce tem algum sugestao para isso???

    Obrigado
    quarta-feira, 30 de janeiro de 2008 18:50
  • eu sugiro, que inves de você fazer isso, você traga por exemplo um combobox, com os codigos, para o usuario somente escolher, pois assim evita erros, e perda de tempo...

     

    abraços...

    quarta-feira, 30 de janeiro de 2008 20:00
  •  

    bmab,

     

      Na aplicação que estou desenvolvendo estou fazendo assim:

     

    - Usuário edita a célula

    - Ao sair da célula é disparado o evento CellValidating, nesse evento você pode consultar se o código existe, se é numérico, etc...

    - Se a validação não foi bem sucedida eu faço: e.Cancel = True; ele cancela a mudança de célula e o cursor irá permanecer onde está até ser validado.

     

    No caso de a coluna ser opcional valido se o código está correto ou se a coluna é String.Empty, daí coloco e.Cancel = False.

    quarta-feira, 13 de fevereiro de 2008 18:28
  • Ola..

    Obrigado pela ajuda..

    usando o cellValidating, so consigo verificar a celula anterior, e nao a atual, como preciso. se usar o cellvalidated verifico a celula atual, so que nao consigo utilizar o e.cancel para continuar na celula, pois ele nao faz parte do cellvalited..

    alguma sugestao??

    Obrigado
    Marcio


    quarta-feira, 20 de fevereiro de 2008 18:04
  •  

    bmab,

     

    O evento CellValidating se refere a célula que você esta! Se você esta na primeira célula, da primeira linha do Grid, digita algo e sai, será disparado o CellValidating.

     

    Code Snippet

    Private Sub grdX_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles grdX.CellValidating

     

      If Not IsNumeric(e.FormattedValue) then e.Cancel = False

     

    End Sub

     

     

    O código acima irá validar o valor que se encontra no FormattedValue, que é o que você esta digitando na célula, se você quiser criar uma hierarquia pode fazer assim:

    Code Snippet

     

    (...)

     

      Select Case e.ColumnIndex

         Case 0

            If IsNumeric(e.FormattedValue) then (...)

         Case 1

    (...)

     

     

     

    O evento CellValidated (repare que o verbo Validated esta no passado) é o evento que disparado quando a validação terminou, então nesse evento depois de você ter entrado com valores e estarem validados, pode disparar um cálculo de total, por exemplo.

     

    Perceba que (usando o Debugger) dentro do CellValidating a sua célula ainda não foi validada, portando o conteúdo que você irá pegar com (...).Cell.Item(0).Value ainda não existe!! Só depois de validado ele passa a existir como valor da célula.

    quarta-feira, 20 de fevereiro de 2008 18:39