none
Preencher gridview com valores de duas tabelas RRS feed

  • Pergunta

  • Como faço para preencher um gridView com valores de 2 tabelas?

    Tenho uma tabela "Usuario" que tem o 'Nome' e o 'Id_Professor' e outra tabela "Professor".

    Preciso mostrar no grid os valores da tabela "Professor" e mais o 'Nome' que se encontra na tabela "Usuario". 

    Desde já agradeço a todos!!

    segunda-feira, 18 de abril de 2011 19:47

Respostas

  • Eiras, o GridView como outros controles so aceitam trabalhar com datasource de uma unica fonte, então é necessario que você reuna isto em um único local, seja ele em um DataTable ou um List unica,

    você pode fazer assim,se você não desejar passar este resultado entre métodos:

    List<Professor> professores = new List<Professor>()
        {
          new Professor{Id = 1, Nome="Professor 1"},
          new Professor{Id = 2, Nome= "Professor 2"},
          new Professor{Id = 3, Nome= "Professor 3"},
          new Professor{Id = 4, Nome= "Professor 4"},
          new Professor{Id = 5, Nome= "Professor 5"}
        };
        List<Usuario> usuarios = new List<Usuario>()
        {
          new Usuario{Id = 1, Id_Professor = 1,Nome="Olavo Oliveira Neto"},
          new Usuario{Id = 2, Id_Professor = 2,Nome="John Doe"},
          new Usuario{Id = 3, Id_Professor = 3,Nome="Chico Bento"}
        };
    
        var query = (from usu in usuarios
               join prof in professores on usu.Id_Professor equals prof.Id
               select new
               {
                 UsuarioId = usu.Id,
                 Usuario = usu.Nome,
                 ProfessorId = prof.Id,
                 Professor = prof.Nome
               }).ToList();
    

    ou então, caso deseje crira um método so para isto você deve criar uma classe quer represente a união dessas duas classes, por exemplo a classe:

    public class UsuarioProfessor
    {
      public int Id { get; set; }
      public string Nome { get; set; }
      public int Id_Professor { get; set; }
      public string Professor { get; set; }
    }
    

    para preencher com a seguinte consulta:

       var query = (from usu in usuarios
               join prof in professores on usu.Id_Professor equals prof.Id
               select new UsuarioProfessor
               {
                 Id = usu.Id,
                 Nome = usu.Nome,
                 Id_Professor = prof.Id,
                 Professor = prof.Nome
               }).ToList();
    
    e então passar para o gridview através da propriedade DataSource


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 18 de abril de 2011 22:24
    • Marcado como Resposta Eiras terça-feira, 19 de abril de 2011 18:51
    segunda-feira, 18 de abril de 2011 20:06
    Moderador

Todas as Respostas

  • Eiras, o GridView como outros controles so aceitam trabalhar com datasource de uma unica fonte, então é necessario que você reuna isto em um único local, seja ele em um DataTable ou um List unica,

    você pode fazer assim,se você não desejar passar este resultado entre métodos:

    List<Professor> professores = new List<Professor>()
        {
          new Professor{Id = 1, Nome="Professor 1"},
          new Professor{Id = 2, Nome= "Professor 2"},
          new Professor{Id = 3, Nome= "Professor 3"},
          new Professor{Id = 4, Nome= "Professor 4"},
          new Professor{Id = 5, Nome= "Professor 5"}
        };
        List<Usuario> usuarios = new List<Usuario>()
        {
          new Usuario{Id = 1, Id_Professor = 1,Nome="Olavo Oliveira Neto"},
          new Usuario{Id = 2, Id_Professor = 2,Nome="John Doe"},
          new Usuario{Id = 3, Id_Professor = 3,Nome="Chico Bento"}
        };
    
        var query = (from usu in usuarios
               join prof in professores on usu.Id_Professor equals prof.Id
               select new
               {
                 UsuarioId = usu.Id,
                 Usuario = usu.Nome,
                 ProfessorId = prof.Id,
                 Professor = prof.Nome
               }).ToList();
    

    ou então, caso deseje crira um método so para isto você deve criar uma classe quer represente a união dessas duas classes, por exemplo a classe:

    public class UsuarioProfessor
    {
      public int Id { get; set; }
      public string Nome { get; set; }
      public int Id_Professor { get; set; }
      public string Professor { get; set; }
    }
    

    para preencher com a seguinte consulta:

       var query = (from usu in usuarios
               join prof in professores on usu.Id_Professor equals prof.Id
               select new UsuarioProfessor
               {
                 Id = usu.Id,
                 Nome = usu.Nome,
                 Id_Professor = prof.Id,
                 Professor = prof.Nome
               }).ToList();
    
    e então passar para o gridview através da propriedade DataSource


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 18 de abril de 2011 22:24
    • Marcado como Resposta Eiras terça-feira, 19 de abril de 2011 18:51
    segunda-feira, 18 de abril de 2011 20:06
    Moderador
  • Fiz assim: 

     

    var resultado = from usu in contexto.Usuario
    
                               join prof in contexto.Professor on usu.IdProfessor equals prof.Id
    
                               select new
    
                               {
    
                                   usu.Nome,
    
                                   prof.Descricao
    
                               };
    
    
    
               return resultado;
    mas não sei qual valor de retorno do método utilizar. Seria uma lista de professor,mas da erro.

     

    terça-feira, 19 de abril de 2011 11:27
  • Olá,

    Não é possível retornar um tipo anônimo diretamente... Você precisaria criar uma classe que representa o tipo de retorno desejado (uma classe com Nome e Descricao somente)... Para maiores detalhes, dê uma olhada neste link:

    http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 19 de abril de 2011 11:48
    Moderador
  • Eiras, é como eu disse lá em cima, se você vai criar um método so pra sua consulta, você precisa criar uma classe que represente está consulta, conforme o segundo exemplo que eu coloquei de código.

    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    terça-feira, 19 de abril de 2011 12:07
    Moderador
  • É isso mesmo, obrigado!!
    terça-feira, 19 de abril de 2011 18:51