none
Selecionar Conteúdo - DataGridView (C#) RRS feed

  • Pergunta

  • Galera, o código abaixo em VB.NET serve para selecionar o ítem clicado no DataGridView e trazer o conteúdo para um Textbox.

    Code Snippet

    Private Sub DataGridViewRamais_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridViewRamais.Click
    cbDepto.Text = DataGridViewRamais(0, DataGridViewRamais.CurrentRow.Index).Value.ToString
    txtNome.Text = DataGridViewRamais(1, DataGridViewRamais.CurrentRow.Index).Value.ToString
    txtCargo.Text = DataGridViewRamais(2, DataGridViewRamais.CurrentRow.Index).Value.ToString
    txtRamal.Text = DataGridViewRamais(3, DataGridViewRamais.CurrentRow.Index).Value.ToString
    End Sub


    Em VB funciona perfeitamente, só que agora quero converter esse código para C# e ficaria assim:

    Code Snippet

    private void DataGridViewRamais_Click(object sender, System.EventArgs e)
    {
        cbDepto.Text = DataGridViewRamais(0, DataGridViewRamais.CurrentRow.Index).Value.ToString;
        txtNome.Text = DataGridViewRamais(1, DataGridViewRamais.CurrentRow.Index).Value.ToString;
        txtCargo.Text = DataGridViewRamais(2, DataGridViewRamais.CurrentRow.Index).Value.ToString;
        txtRamal.Text = DataGridViewRamais(3, DataGridViewRamais.CurrentRow.Index).Value.ToString;
    }


    O problema é que está aparecendo esse erro:

    Only assignment, call, increment, decrement, and new object expressions can be used as a statement

    Alguém tem ideia do que fazer pra corrigir?
    terça-feira, 23 de setembro de 2008 12:44

Respostas

  • Sim, com certeza...

     

    Até porque, pelo código que vi acima, você só preencheria as caixas de texto ao clicar no grid... Se o usuário quisesse navegar nos registros via teclado, por exemplo, as caixas de texto ficariam "congeladas" no ultimo registro que tinha sido clicado...

     

    De qualquer forma, o DataGridView possui ainda o evento SelectionChanged, que é disparado toda vez que o registro selecionado muda, e que seria mais adequado, se você quisesse manter a sua estrutura.

     

    Mas, novamente, eu voto no BindingSource + DataBinding.


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    terça-feira, 23 de setembro de 2008 13:33
    Moderador

Todas as Respostas

  • Olá Thiago,

     

    No C#, o operador para acessar índices é o [ ], e não o ( ) como no VB. Além disso, ToString é um método, e você está utilizando como se fosse propriedade:

     

    Code Snippet

     

     DataGridViewRamais[3, DataGridViewRamais.CurrentRow.Index].Value.ToString();

     

     

    Entretanto, não sei exatamente o que você está tentando fazer, mas se o seu objetivo é mostrar alguns campos do registro selecionado em caixas de texto, essa não é a melhor maneira...

     

    Eu apostaria em utilizar um BindingSource para ser o seu cursor, e ligar o Grid e as caixas de texto à esse BindingSource via DataBinding...


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    terça-feira, 23 de setembro de 2008 13:05
    Moderador
  • Que estranho... eu já tinha testado dessa forma e o erro era o mesmo, mas agora funcionou...

                cbDepto.Text = DataGridViewRamais[0, DataGridViewRamais.CurrentRow.Index].Value.ToString();
                txtNome.Text = DataGridViewRamais[1, DataGridViewRamais.CurrentRow.Index].Value.ToString();
                txtCargo.Text = DataGridViewRamais[2, DataGridViewRamais.CurrentRow.Index].Value.ToString();
                txtRamal.Text = DataGridViewRamais[3, DataGridViewRamais.CurrentRow.Index].Value.ToString();

    Só não estou conseguindo capturar o click, usei o método DataGridView_CellContentClick ao invés do DataGridView_Click mas ainda está meio estranho... Mas já resolvo,
    terça-feira, 23 de setembro de 2008 13:08
  • Estou desenvolvendo uma tela de alteração de informações do banco de dados muito simples, só vão ter quatro colunas dentro desse DataGridView. A minha ideia seria de quando o usúario clicar no DataGridView, as informações da linha serem mandadas para o TextBox para ele alterar, ou excluir.

    Acha melhor eu fazer de outra forma mesmo?
    terça-feira, 23 de setembro de 2008 13:11
  • Sim, com certeza...

     

    Até porque, pelo código que vi acima, você só preencheria as caixas de texto ao clicar no grid... Se o usuário quisesse navegar nos registros via teclado, por exemplo, as caixas de texto ficariam "congeladas" no ultimo registro que tinha sido clicado...

     

    De qualquer forma, o DataGridView possui ainda o evento SelectionChanged, que é disparado toda vez que o registro selecionado muda, e que seria mais adequado, se você quisesse manter a sua estrutura.

     

    Mas, novamente, eu voto no BindingSource + DataBinding.


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    terça-feira, 23 de setembro de 2008 13:33
    Moderador
  • Obrigado, vou fazer isso então!
    terça-feira, 23 de setembro de 2008 13:39