NÃO CONSIGO MOSTRAR O RELACIONAMENTO DE 2 TABELAS

 Tópico anterior Próximo tópico Novo tópico

NÃO CONSIGO MOSTRAR O RELACIONAMENTO DE 2 TABELAS

C#

 Compartilhe  Compartilhe  Compartilhe
#482691 - 03/07/2018 09:38:56

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia pessoal, não sei onde estou errando.
Tenho duas classes:
[Table("PedidoVenda")]
public partial class PedidoVenda
{
    public int Id { get; set; }
    public DateTime? Data { get; set; }
    public int ClienteId { get; set; }
    public virtual Cliente Cliente { get; set; }
}


[Table("Cliente")]
public partial class Cliente
{
    public int Id { get; set; }
    [StringLength(50)]
    public string Nome { get; set; }
}


Então, quero listar os pedidos em um DataGridView:

private void ListaPedidos()
{
    try
    {
        using (db = new Conexao())
        {
            var lista = db.PedidoVenda.OrderBy(x => x.Cliente.Nome).ToList();
            dgvPedido.DataSource = lista;
        }
    }
    catch (Exception ex
    {
        MessageBox.Show(ex.Message);
    }
}


No DataGridView está mostrando assim:

1   01/05/2018   Sistema.Models.Cliente
2   04/05/2018   Sistema.Models.Cliente
3   12/05/2018   Sistema.Models.Cliente
4   20/05/2018   Sistema.Models.Cliente

Preciso mostrar o nome dos Clientes, como faço?



____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482692 - 03/07/2018 10:08:52

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 03/07/2018 10:11:26 por CLEVERTON

Como vc está preenchendo ? está usando autogeneratecolumns = false ?

Nesse caso o ideal é que vc crie um atributo [NotMapped] e atribua o valor dele quando o set de Cliente for chamado.





#482693 - 03/07/2018 10:12:13

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Citação:
  está usando autogeneratecolumns = false ?

Não

Citação:
crie um atributo [NotMapped] e atribua o valor dele quando o setde Cliente for chamado.

Poderia explicar melhor?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482695 - 03/07/2018 10:21:47

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Você precisa usar o Include nos membros de segundo nível:

var lista = db.PedidoVenda.Include("Cliente").OrderBy(x => x.Cliente.Nome).ToList();


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482696 - 03/07/2018 10:26:06

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Kerplunk eu estava tentando o Include, mas não estava com a sintaxe correta, porém como você passou também não funciona.
Eu devo alterar algo nas classes?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482697 - 03/07/2018 10:28:56

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
A princípio não, só o Include deveria trazer

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482698 - 03/07/2018 10:40:17

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Não quer funcionar. Vou tentando.....

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482708 - 03/07/2018 14:47:48

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 03/07/2018 14:48:10 por CLEVERTON

PERCIFILHO
Citação:
Poderia explicar melhor?


  
  public partial class PedidoVenda
    {
        public int Id { get; set; }
        public DateTime? Data { get; set; }
        public int ClienteId { get; set; }
        private Cliente _Cliente;

        public Cliente Cliente
        {
            get { return _Cliente; }
            set
            {
                this.NomeCliente = ((Cliente)value).Nome;
                _Cliente = value;
            }
        }
        [NotMapped]
        public string NomeCliente { get; set; }
    }


E também tenta passar um BindingSource invés de List<T>




Resposta escolhida #482713 - 03/07/2018 15:36:51

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


  

[Table("Cliente")]
public partial class Cliente
{
    public int Id { get; set; }
    [StringLength(50)]
    public string Nome { get; set; }
    
     public override string ToString()
     {
            return Id + " - " + Nome;
     }

}





#482719 - 03/07/2018 22:22:28

JABA
CABO FRIO
Cadast. em:Agosto/2005


O .Net já faz isso automaticamente pra você, a não ser quando o cabeçalho já esteja definido manualmente; nesse caso, você deveria colocar o mesmo  nome das propriedades de seu objeto nas colunas(não sei ao certo o nome do atributo, acredito que seja DataPropertyName) do datagridview , assim ele consegue mapear certinho.

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#482866 - 10/07/2018 07:48:13

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Valeu Guimoraes, a sua solução deu certinho, apesar de eu não saber porque não funcionou com o Include. Deveria funcionar.
Vou tentar procurar onde estou falhando, mas por enquanto obrigado.


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 10/07/2018 13:37:37