none
Dois dataTable de um DataSet em uma DataGrid RRS feed

  • Pergunta

  • Boa Tarde a todos,

    Gostaria de sabe qual a melhor maneira  de passar os dados  de dois dataTable de um dataSet para uma DataGridViews.

    Eu fiz da seguinte maneira:

     MySqlConnection cx = new MySqlConnection("server=localhost;User Id=root;database=csharpestudo;pwd=senha");
            MySqlCommand sql;
            MySqlDataAdapter da = new MySqlDataAdapter();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                sql  = new MySqlCommand("select p.pessoaID ,p.nomePessoa, p.telefone,c.nomeCidade from pessoas p inner join cidades c on p.cidadefk = c.cidadeID",cx);
                cx.Open();
                da.SelectCommand = sql;
                da.Fill(csharpestudoDataSet1,"pesquisa");
                // TODO: This line of code loads data into the 'csharpestudoDataSet1.pessoas' table. You can move, or remove it, as needed.
                this.pessoasTableAdapter.Fill(this.csharpestudoDataSet1.pessoas);
    
    
            }

    Existe alguma forma sem eu precisar fazer um join, tipo algum método do DataSet ..
    Pois ai tive que criar outro Data table e fazer um join..

    Agradeço desde já.

    Rafael.


    • Editado Rafael.kbeca domingo, 10 de fevereiro de 2013 20:34
    domingo, 10 de fevereiro de 2013 20:32

Respostas

  • Tenho um data set com 3 datatables...

    quero pegar alguns dados do datatable cidade e do pessoa e passar para uma grid..

    eu fiz como postei anteriormente.. criei um datatable pesquisa.. teria como pegar dados de duas data table sem cria outra datatable e fazer um join..

    segue a imagem para maior esclarecimento:

    Você esta trabalhando com dataset tipado isso? 

    Realmente não sei realmente o que fazer nesse caso, acredito que seria melhor para o banco de dados você retornar os dados com um join em 1 select apenas... e você pode fazer isso do jeito que você fez ou simplesmente criar um dataset no código (mas não ficaria tipado como voce esta fazendo)... 

    Realmente acho que é melhor fazer dessa maneira amigo, pensa assim.

    Como você esta trabalhando com dataset tipado você DEVE saber as colunas dele, nesse caso, uma consulta teria um dataset apenas para ela porque teria dados que precisam vir e se saber quais são (a vantagem do dataset tipado nesse caso). 

    Imagina se fosse objetos... você teria um objeto consultaPessoa com as propriedades que você precisa para o relatório ou finalidade que for... 
    A mesma coisa que você fez com o dataset tipado, tem uma consulta que necessita de valores adicionais e não gerar 2 comandos no banco de dados.

    você pode trabalhar com o dataset sem a tipagem dele... ou seja... 

    você faria um select num dataset dinâmico, a desvantagem é não ter a propriedade com o nome da coluna e ter que utilizar 

    string retorno = (string)ds.Tables[0].Rows[0]["NomeDaColunaDoSelect"];

    para isso, não precisa gerar o DataSet no designer mas só a variável dele no processo.

         MySqlConnection cx = new MySqlConnection("server=localhost;User Id=root;database=csharpestudo;pwd=senha");
            MySqlCommand sql;
            MySqlDataAdapter da = new MySqlDataAdapter();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Cria a variavel e não gera pelo designer
                System.Data.DataSet ds = new DataSet();
    
                sql  = new MySqlCommand("select p.pessoaID ,p.nomePessoa, p.telefone,c.nomeCidade from pessoas p inner join cidades c on p.cidadefk = c.cidadeID",cx);
                cx.Open();
                da.SelectCommand = sql;
                da.Fill(ds,"pesquisa");
                // TODO: This line of code loads data into the 'csharpestudoDataSet1.pessoas' table. You can move, or remove it, as needed.
                this.pessoasTableAdapter.Fill(ds);
    
    
            }


    Desenvolvedor de sistemas VB6, ASP, ASP.NET, C#, VB.NET, SQL Server, Oracle e MySql.

    segunda-feira, 11 de fevereiro de 2013 00:50

Todas as Respostas

  • Não entendi... 

    Você não quer fazer um join no select? Isso é totalmente normal. 

    Ou você tem 2 DataTables (Não postou os 2) e quer junta-los para exibir no datagridview?


    Desenvolvedor de sistemas VB6, ASP, ASP.NET, C#, VB.NET, SQL Server, Oracle e MySql.

    domingo, 10 de fevereiro de 2013 23:57
  • Tenho um data set com 3 datatables...

    quero pegar alguns dados do datatable cidade e do pessoa e passar para uma grid..

    eu fiz como postei anteriormente.. criei um datatable pesquisa.. teria como pegar dados de duas data table sem cria outra datatable e fazer um join..

    segue a imagem para maior esclarecimento:

    

    segunda-feira, 11 de fevereiro de 2013 00:03
  • Tenho um data set com 3 datatables...

    quero pegar alguns dados do datatable cidade e do pessoa e passar para uma grid..

    eu fiz como postei anteriormente.. criei um datatable pesquisa.. teria como pegar dados de duas data table sem cria outra datatable e fazer um join..

    segue a imagem para maior esclarecimento:

    Você esta trabalhando com dataset tipado isso? 

    Realmente não sei realmente o que fazer nesse caso, acredito que seria melhor para o banco de dados você retornar os dados com um join em 1 select apenas... e você pode fazer isso do jeito que você fez ou simplesmente criar um dataset no código (mas não ficaria tipado como voce esta fazendo)... 

    Realmente acho que é melhor fazer dessa maneira amigo, pensa assim.

    Como você esta trabalhando com dataset tipado você DEVE saber as colunas dele, nesse caso, uma consulta teria um dataset apenas para ela porque teria dados que precisam vir e se saber quais são (a vantagem do dataset tipado nesse caso). 

    Imagina se fosse objetos... você teria um objeto consultaPessoa com as propriedades que você precisa para o relatório ou finalidade que for... 
    A mesma coisa que você fez com o dataset tipado, tem uma consulta que necessita de valores adicionais e não gerar 2 comandos no banco de dados.

    você pode trabalhar com o dataset sem a tipagem dele... ou seja... 

    você faria um select num dataset dinâmico, a desvantagem é não ter a propriedade com o nome da coluna e ter que utilizar 

    string retorno = (string)ds.Tables[0].Rows[0]["NomeDaColunaDoSelect"];

    para isso, não precisa gerar o DataSet no designer mas só a variável dele no processo.

         MySqlConnection cx = new MySqlConnection("server=localhost;User Id=root;database=csharpestudo;pwd=senha");
            MySqlCommand sql;
            MySqlDataAdapter da = new MySqlDataAdapter();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Cria a variavel e não gera pelo designer
                System.Data.DataSet ds = new DataSet();
    
                sql  = new MySqlCommand("select p.pessoaID ,p.nomePessoa, p.telefone,c.nomeCidade from pessoas p inner join cidades c on p.cidadefk = c.cidadeID",cx);
                cx.Open();
                da.SelectCommand = sql;
                da.Fill(ds,"pesquisa");
                // TODO: This line of code loads data into the 'csharpestudoDataSet1.pessoas' table. You can move, or remove it, as needed.
                this.pessoasTableAdapter.Fill(ds);
    
    
            }


    Desenvolvedor de sistemas VB6, ASP, ASP.NET, C#, VB.NET, SQL Server, Oracle e MySql.

    segunda-feira, 11 de fevereiro de 2013 00:50
  • Olá, Rafael.

    Concordo com o Eric, acho que neste caso o melhor seria trazer os dados do banco com um Join, bem simples e prático =D

    Se quiser unir dois DataTables há o método Merge().

    http://social.msdn.microsoft.com/forums/pt-BR/vscsharppt/thread/c19dd750-7074-493b-aabb-429a283b9424


    Se a resposta foi útil, não deixe de clicar na setinha verde. Alguma ajuda neste tópico te levou a solução do problema? Então proponha como resposta para o tópico ser melhor identificado.

    segunda-feira, 11 de fevereiro de 2013 01:56
  • Obrigado a todos por responderem..

    Eu estou fazendo isso só como estudo mesmo..

    Vou estudar o metodo Marge() sugerido e tbm um que achei em uma pesquisa chamado DataRelation..

    Obrigado a todos.

    segunda-feira, 11 de fevereiro de 2013 12:30