none
Posicionar BindingSource no DataGridView RRS feed

  • Pergunta

  • Prezados,

    No evento CellValidated do DataGridView eu pego o valor de 2 células da linha selecionada (no entanto, faço isso baseado na "CurrentRow", pois preciso selecionar a célula - não posso setar a propriedade do grid como "FullRowSelect").

    Dai meu problema é que se eu paraliso o fluxo no evento do grid, os índices Linha 1 Coluna 1 do DataGridView, por exemplo, tem um valor. Mas o BindingSource está posicionado em alguma outra linha que não tem nada a ver com isso (a propriedade Position retorna "-1").  

    Ou seja, preciso que ao selecionar uma célula, o BindingSource que alimenta o grid tenha sua posição setada para a mesma posição selecionada no grid.
    Como eu posso fazer isso?

    Aguardo retorno.
    Obrigado.

    quinta-feira, 23 de abril de 2015 14:11

Todas as Respostas

  • Olá Vinicius,

     se entendi pode usar a propriedade Position de seu Binding veja :

    seuBindingSource.Position = 10;

     Onde "10" seria a posição da GridView !

    quinta-feira, 23 de abril de 2015 16:39
  • Daniel,

    Foi a primeira coisa que eu tentei. No entanto, ele volta para -1 não sei por qual motivo.

    Exemplo:

    meuBindingSource.Position = 2; //OK, vai executar e não retorna mensagem de erro
    meuBindingSource.Position;         //Retorna -1

    Ou seja, apesar de não retornar mensagem de erro ao setar a posição do BindingSource, parece não alterar a posição.

    Faz ideia do que pode ser?

    quinta-feira, 23 de abril de 2015 17:24
  • Olá,

     deve ter outro evento poste seu codigo fica mais facil avaliar !

    quinta-feira, 23 de abril de 2015 18:02
  • Daniel,

    O que eu preciso é simplesmente o que está nesse código abaixo.
    O problema é que a célula que acabou de ser alterada é uma, e nesse trecho chega valor de outra célula. Por esse motivo, o que estou imaginando é que o BindingSource está numa posição e o DataGridView em outra.

    private void dgvTabelaPreco_CellValidated(object sender, DataGridViewCellEventArgs e)
            {
                if (dgvTabelaPreco.CurrentCell.OwningColumn.Name == "descProduto")
                {
                    atualizarProdutoDescricao(Convert.ToString(dgvTabelaPreco.CurrentRow.Cells["produtoId"].Value), Convert.ToString(dgvTabelaPreco.CurrentRow.Cells["descProduto"].Value));
                }
            }


    quinta-feira, 23 de abril de 2015 18:54
  • Olá,

     entendi, mas no evento CellValidated vai ser dificil mesmo pois ele lê a celula anterior, sugiro utilizar o evento CellMouseUp quando precisei de algo parecido fiz nele e deu certo veja um exemplo :

     private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
            {
                MessageBox.Show(bindingSource1.Position.ToString());
            }
     Caso o usuario utilize o teclado pode pegar o evento KeyUp e fazer as validações também.

    sexta-feira, 24 de abril de 2015 16:42