1
resposta

Relacionamento de Tabelas: Como pego o ID de um Fabricante selecionado num ComboBox?

Olá pessoal, talvez o título do tópico não pareça muito com o tema do Entity, porém estou no seguinte cenário:

Estou desenvolvendo uma aplicação usando Windows Forms com Entity Framework 7. Tenho duas tabelas que estão relacionadas: Modelos e Fabricantes. Um fabricante pode ter vários modelos mas aquele modelo só pode ter um fabricante. Até aí está tudo ok no Entity. No meu formulário de Cadastro de Modelos, tenho alguns campos pertinente ao modelo tais como nome, etc. para preencher. Dentre estes campos, tenho o nome do fabricante que deve ser selecionado num ComboBox. Este ComboBox recebe uma lista com os nomes de todos os fabricantes que tenho da Tabela Fabricantes. Até aí ok.

Minha dúvida: O Entity Framework precisa da ID do Fabricante que eu selecionei no Combobox para salvar na Tabela Modelos, pois assim ele vai "amarrar" este modelo que está sendo cadastrado ao fabricante selecionado. Como faço isso?

Minhas Entidades Fabricante e ModeloDeBomba:

public class Fabricante
    {
        public int ID { get; set; }
        public string Status_Fabricante { get; set; }
        public string Nome_Fabricante { get; set; }
        public virtual IList<ModeloDeBomba> MOdelosDeBombas { get; set; }
    }
public class ModeloDeBomba
    {
        public int ID { get; set; }
        public string Status_ModeloDeBomba { get; set; }
        public string Nome_ModeloDeBomba { get; set; }
        public virtual Fabricante Fabricante { get; set; }
        public int FabricanteID { get; set; }
    }

No meu formulário de Cadastro de Modelos está assim: - criei um método para trazer para o ComboBox uma busca ordenada de todos os nomes dos fabricantes:

private void carregaFabricantes()
        {
            var busca = from f in contexto.Fabricantes
                        orderby f.Nome_Fabricante
                        select f;
            foreach (var fabricantes in busca)
            {
                cbNomeFabricante.Items.Add(fabricantes.Nome_Fabricante);                
            }
        }

Este método eu chamo no construtor do formulário para logo que abrir o formulário na aplicação eu terei o ComboBox com uma lista de todos os nomes de Fabricantes. Por fim, como faço agora para pegar o ID do Fabricante que eu selecionei no ComboBox para salvar na tabela? Pois o Entity vai me exigir além no nome do fabricante, o ID do fabricante (chave estrangeira) também. Desde já agradeço por qualquer ajuda! Abraços!

1 resposta

Oi Samuel, tudo bom?

Acredito que a melhor forma para resolver seu problema, nesse caso, seja passar seu fabricante inteiro para o combo box:

cbNomeFabricante.Items.Add(fabricantes);

E reescrever a forma com que você quer que o Fabricante seja mostrado como string, reescrevendo o toString da classe:

public class Fabricante
    {
        public int ID { get; set; }
        public string Status_Fabricante { get; set; }
        public string Nome_Fabricante { get; set; }
        public virtual IList<ModeloDeBomba> MOdelosDeBombas { get; set; }
    }
 public override string ToString()
    {
        return Nome_Fabricante;
    }

Assim quando o windows form for imprimir cada Fabricante na tela, ele era mostrar o respectivo Nome_Fabricante.

E assim, quando você for resgatar, você tera todas as informações dele na mão, inclusive o Id:

var fabricante = (Fabricante)cbNomeFabricante.SelectedItem;

Espero ter ajudado!

Abraço =)