none
Ao selecionar um registro no DataGrid atualizar outro DataGrid, como fazer isso? RRS feed

  • Pergunta

  • É o seguinte pessoal, tenho um grid com os registros

    gridUsuario

    COD | NOME | EMAIL
    1 | Tiago | tiago@hotmail.com
    2 | Roberto | roberto@hotmail.com

    e outro grid assim:

    gridTelefones

    CODUSUARIO | TELEFONE
    1 | 2584-5486
    1 | 4587-8965
    2 | 4578-8755

    Gostaria que acontecesse o seguinte: quando eu clicasse no primeiro grid no registro de codigo 1, aparecesse apenas os telefones do mesmo.
    Detalhe que isso está sendo feito com DataSet Tipado, com registros genéricos, sem utilização de banco de dados ainda.


    Titicolas GamerTag: Thiticolax 360 Portifólio: http://titicolas.deviantart.com MSN: titicolas@hotmail.com
    terça-feira, 7 de abril de 2009 18:26

Respostas

  • Bom dia!

    Ja fiz alguma coisa parecida... eu faria da seguinte forma:

    Para pegar o valor do registro selecionado no grid1 :
            
    string codigoUser = seuDataGrid1[1, seuDataGrid1.CurrentRow.Index].Value.ToString();

    Para mostrar dinâmicamente o grid2 filtrando por código de usuário :
    Você deve criar um evento no grid1, o nome do evento é SelecionChanged, como no código abaixo:

    private void filtraCodUsuario(object sender, EventArgs e)
    {
    ds.Tables["suaTabela"].DefaultView.RowFilter = "codusuario Like'%" + codigoUser + "%'";
    }
    Claro que você deve adaptar para seu projeto afinal não sei o contexto final, mais assim você vai conseguir...

    Espero ter ajudado,

    Abraço
    • Marcado como Resposta Titicolas segunda-feira, 13 de abril de 2009 12:21
    quarta-feira, 8 de abril de 2009 15:17
  • Olá

    Voce disse DataSet Tipado , com registros "genericos". Nao entendi muito bem o que quis dizer mas vamos la:

    Voce pode fazer da seguinte forma (caso haja um relacionamento entre as duas tabelas):

    // obtenha o codigo do registro pai
    int chave = (int)grid.SelectedRows[0].Cells["MeuCampoNoDataTable"].Value;
    
    // obtenha essa linha como um objeto DataRow
    DataRow[] linha = meuDataSet.Tables["MinhaTabela"].Select("MeuCampo=" + chave);
    
    // AGORA O QUE REALMENTE IMPORTA:
    // acesse os registros filhos usando o metodo GetChildRows passando o nome do relacionamento ou o objeto DataRelation
    DataRow[] registrosFilhos = linha[0].GetChildRows("NomedoRelacionamento");
    Assim voce tera um array DataRow com todas as registros-filho.

    Dê um feedback.

    []s
    • Marcado como Resposta Titicolas segunda-feira, 13 de abril de 2009 12:21
    quarta-feira, 8 de abril de 2009 23:33

Todas as Respostas

  • Bom dia!

    Ja fiz alguma coisa parecida... eu faria da seguinte forma:

    Para pegar o valor do registro selecionado no grid1 :
            
    string codigoUser = seuDataGrid1[1, seuDataGrid1.CurrentRow.Index].Value.ToString();

    Para mostrar dinâmicamente o grid2 filtrando por código de usuário :
    Você deve criar um evento no grid1, o nome do evento é SelecionChanged, como no código abaixo:

    private void filtraCodUsuario(object sender, EventArgs e)
    {
    ds.Tables["suaTabela"].DefaultView.RowFilter = "codusuario Like'%" + codigoUser + "%'";
    }
    Claro que você deve adaptar para seu projeto afinal não sei o contexto final, mais assim você vai conseguir...

    Espero ter ajudado,

    Abraço
    • Marcado como Resposta Titicolas segunda-feira, 13 de abril de 2009 12:21
    quarta-feira, 8 de abril de 2009 15:17
  • Olá

    Voce disse DataSet Tipado , com registros "genericos". Nao entendi muito bem o que quis dizer mas vamos la:

    Voce pode fazer da seguinte forma (caso haja um relacionamento entre as duas tabelas):

    // obtenha o codigo do registro pai
    int chave = (int)grid.SelectedRows[0].Cells["MeuCampoNoDataTable"].Value;
    
    // obtenha essa linha como um objeto DataRow
    DataRow[] linha = meuDataSet.Tables["MinhaTabela"].Select("MeuCampo=" + chave);
    
    // AGORA O QUE REALMENTE IMPORTA:
    // acesse os registros filhos usando o metodo GetChildRows passando o nome do relacionamento ou o objeto DataRelation
    DataRow[] registrosFilhos = linha[0].GetChildRows("NomedoRelacionamento");
    Assim voce tera um array DataRow com todas as registros-filho.

    Dê um feedback.

    []s
    • Marcado como Resposta Titicolas segunda-feira, 13 de abril de 2009 12:21
    quarta-feira, 8 de abril de 2009 23:33
  • No evento cellclick do DataGridView você pega o ID do cliente da forma que ta escrito ai, em seguida você efetua a consulta de telefones com aquele id de cliente e joga isso como datasource do DatagridView.
    segunda-feira, 13 de abril de 2009 02:41