none
criar uma lista com dados de 2 tabelas RRS feed

  • Pergunta

  • Eu tenho uma tabela de cliente pessoa fisica e outra de cliente pessoa juridica.

    Gostaria de criar uma lista que contenham todos os clientes pessoa fisica e logo abaixo todos os clientes pessoa juridica.
    Após isso, exibir em um gridview.

    Como poderia fazer isso, ou teria algum método melhor para se obter esse resultado?

    O mais importante é exibir os dados das duas tabelas no mesmo grid.
    • Movido AndreAlvesLimaModerator quarta-feira, 24 de fevereiro de 2010 15:57 Migrado de C# (De:C#)
    • Movido AndreAlvesLimaModerator quinta-feira, 25 de fevereiro de 2010 12:07 Migrado de ADO (De:.NET Framework - ADO (Acesso a dados, data access & storage))
    quarta-feira, 24 de fevereiro de 2010 11:18

Respostas

  • Por exemplo vamos supor que tens duas tabelas estudante e professor queres fazer um select com mesmo atributo e colocar numa lista enttao seria assim:

    select nome , idade, nrbi
    from estudante
    union
    select nome,idade, nrbr
    from professor



    So assim e que podes utilizar, os atributos a selecionar tem que ser os mesmos

    Espero que ajude
    Um abraco!!!
    • Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 24 de fevereiro de 2010 15:48
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:54
    quarta-feira, 24 de fevereiro de 2010 12:22
  • Juliane.sw, este artigo talvez possa te ajudar http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:54
    quarta-feira, 24 de fevereiro de 2010 18:23
  • Juliane, tente explicitar os campos retornados, como faço no exemplo abaixo:

    var teste = (from a in dtc.CADLVMREGIONs
                 select new { a.ABBREV, a.DESCRIPTION })
                .Union(
                 from b in dtc.CADLVREGIONs
                 select new { b.ABBREV, b.DESCRIPTION });
    
    dataGridView1.DataSource = teste;
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:53
    quinta-feira, 25 de fevereiro de 2010 12:02
    Moderador

Todas as Respostas

  • Juliane,

    Por que você, na sua query de retorno, já não retorna os dados das duas tabelas em uma só DataTable (utilizando UNION)?
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quarta-feira, 24 de fevereiro de 2010 12:05
    Moderador
  • como que eu utilizo a UNION?
    quarta-feira, 24 de fevereiro de 2010 12:08
  • Por exemplo vamos supor que tens duas tabelas estudante e professor queres fazer um select com mesmo atributo e colocar numa lista enttao seria assim:

    select nome , idade, nrbi
    from estudante
    union
    select nome,idade, nrbr
    from professor



    So assim e que podes utilizar, os atributos a selecionar tem que ser os mesmos

    Espero que ajude
    Um abraco!!!
    • Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 24 de fevereiro de 2010 15:48
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:54
    quarta-feira, 24 de fevereiro de 2010 12:22
  • Olá,

    Faça o Select como o Cipriano Fernandes disse, e crie um DataSet ou uma entidade(se já não houver) que espere todos os campos que serão retornados do comando.

    Talvez seja melhor você colocar os dados em dois grids diferentes, cada um deles com as colunas configuradas para receber os campos corretos, de acordo com as regras que você tem para pessoa física e jurídica.

    Às ordens,
    Gabriel.
    quarta-feira, 24 de fevereiro de 2010 12:35
  • Hello

    Todos os comentarios sao validos. Tens de cria relacao entre as tabelas na tua database, assim consegues usar o exemplo do AdreAlvesLima. Se nao tiveres essa relacao, entao teres de criar por codigo, depois de acessares or carregares a tua tabela.

    Vou deixar um exemplo completo para ti. Podes remover as culunas que nao te enterressas mostrar na tua gridview, como por exemplo, o endereco das pessoas, o numero de telefone....

    private void button5_Click(object sender, EventArgs e)

    {

    //string connetionString = null;

    SqlConnection sqlCnn ;

    SqlCommand sqlCmd ;

    SqlDataAdapter adapter = new SqlDataAdapter();

    DataSet ds = new DataSet();

    bindingsource = new BindingSource();

    string sql = null;

     

    sql = "Select * From Table_fisisca LEFT OUTER JOIN Table_Juridica ON Table_fisica.ID = Table_juridica.IDMe";

    sqlCnn = new SqlConnection(CSharp_Teste.Properties.Settings.Default.CNNSetting);

    try

    {

    sqlCnn.Open();

    sqlCmd = new SqlCommand(sql, sqlCnn);

    adapter.SelectCommand = sqlCmd;

    adapter.Fill(ds);

    bindingsource.DataSource = ds.Tables[0].DefaultView;

    }

    adapter.Dispose();

    sqlCmd.Dispose();

    sqlCnn.Close();

    }

    catch

    {

    MessageBox.Show("Nao existe informacao na base de dados");

    }


    Just Be Humble Malange!
    quarta-feira, 24 de fevereiro de 2010 13:51
  • Prezado,

    Nao necessariamente precisa existir o relacionamento... Por exemplo, se ela somente tiver duas tabelas "Cliente P. Física" e "Cliente P. Jurídica", cada um com sua chave e sem nenhuma tabela que faça a generalização das duas ("Cliente", por exemplo), não precisaria de relacionamento nenhum (nem JOIN), pois, as tabelas não possuem relação entre elas...

    Só um UNION já bastaria, como no exemplo que o Cipriano passou...

    Mas, enfim, todo e qualquer comentário acho que vai ajudar nossa amiga...

    :)
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quarta-feira, 24 de fevereiro de 2010 15:47
    Moderador
  • estou utilizando linq, como monto o select com union?
    quarta-feira, 24 de fevereiro de 2010 16:31
  • Juliane.sw, este artigo talvez possa te ajudar http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:54
    quarta-feira, 24 de fevereiro de 2010 18:23
  • fiz o select usando union na classe.
    mas não estou conseguindo exibir no grid.

    para carregar o grid uso : grid.datasource = classe.metodo();
    como já faço em outras situações do projeto (sem usar union), mas neste caso não exibe nada.

    ai vai o meu select:

    var

     

    regTeste = (from a in db.PessoaFisica
                          select a.codigo).Union(from b in db.PessoaJuridica
                                                         select b.codigo);

    quando eu dou break point e passo com o mouse em cima da regTeste para ver o resultado gerado, está tudo OK, ou seja, estão todos os codigos de pessoa Fisica e Juridica.
    Porém o meu grid aparece vazio.

    quarta-feira, 24 de fevereiro de 2010 19:44
  • Juliane, tente explicitar os campos retornados, como faço no exemplo abaixo:

    var teste = (from a in dtc.CADLVMREGIONs
                 select new { a.ABBREV, a.DESCRIPTION })
                .Union(
                 from b in dtc.CADLVREGIONs
                 select new { b.ABBREV, b.DESCRIPTION });
    
    dataGridView1.DataSource = teste;
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Juliane.sw quinta-feira, 25 de fevereiro de 2010 14:53
    quinta-feira, 25 de fevereiro de 2010 12:02
    Moderador
  • A propósito, estou migrando o post para o fórum de LINQ...

    Por favor, nas próximas vezes que tiver alguma dúvida que envolva LINQ, poste no fórum específico...

    Obrigado!
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 25 de fevereiro de 2010 12:06
    Moderador
  • agora deu certo.

    valeu a todos.
    quinta-feira, 25 de fevereiro de 2010 14:55