Dear colleagues, I am trying to learn to develop a project in MVC. But I'm having some difficulties. When executing the program, it executes normally, however when I want to record a product entry note it throws this exception according to the image below:
Here is the source code for the Vendor Class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ModelProject
{
public class Fornecedor
{
public Guid Id { get; set; }
public string Nome { get; set; }
public string CNPJ { get; set; }
protected bool Equals(Fornecedor other)
{
return Id.Equals(other.Id);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(null, obj))
return true;
if (obj.GetType() != typeof(Fornecedor))
return false;
return Equals((Fornecedor)obj);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
}
Supplier Controller Code
using ModelProject;
using PersistenceProject;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ControllerProject
{
public class FornecedorController
{
private Repository repository = new Repository();
public Fornecedor Insert(Fornecedor fornecedor)
{
return this.repository.InsertFornecedor(fornecedor);
}
public void Remove(Fornecedor fornecedor)
{
this.repository.RemoveFornecedor(fornecedor);
}
public IList<Fornecedor> GetAll()
{
return this.repository.GetAllFornecedores();
}
public Fornecedor Update(Fornecedor fornecedor)
{
return this.repository.UpdateFornecedor(fornecedor);
}
}
}
Note that an object of the Repository class is instantiated in the code above. Below is the class code.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModelProject;
namespace PersistenceProject
{
public class Repository
{
private IList<Fornecedor> fornecedores = new List<Fornecedor>();
public Fornecedor InsertFornecedor(Fornecedor fornecedor)
{
this.fornecedores.Add(fornecedor);
return fornecedor;
}
public void RemoveFornecedor(Fornecedor fornecedor)
{
this.fornecedores.Remove(fornecedor);
}
public IList<Fornecedor> GetAllFornecedores()
{
return this.fornecedores;
}
public Fornecedor UpdateFornecedor(Fornecedor fornecedor)
{
this.fornecedores[this.fornecedores.IndexOf(fornecedor)] = fornecedor;
return fornecedor;
}
}
}
Class Code Entry Enter:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ModelProject
{
public class NotaEntrada
{
public Guid Id { get; set; }
public string Numero { get; set; }
public Fornecedor FornecedorNota { get; set; }
public DateTime DataEmissao { get; set; }
public DateTime DataEntrada { get; set; }
public IList<ProdutoNotaEntrada> Produtos { get; set; }
public NotaEntrada()
{
this.Produtos = new List<ProdutoNotaEntrada>();
}
public void RegistrarProduto(ProdutoNotaEntrada produto)
{
if (!this.Produtos.Contains(produto))
this.Produtos.Add(produto);
}
public void RemoverProduto(ProdutoNotaEntrada produto)
{
this.Produtos.Remove(produto);
}
public void RemoverTodosProdutos()
{
this.Produtos.Clear();
}
}
}
Finally, the code that is throwing the exception:
private void btnGravar_Click(object sender, EventArgs e)
{
var notaEntrada = new NotaEntrada()
{
Id = (txtIDNotaEntrada.Text == string.Empty ? Guid.NewGuid() : new Guid(txtIDNotaEntrada.Text)),
DataEmissao = dtpEmissao.Value,
DataEntrada = dtpEntrada.Value,
FornecedorNota = (Fornecedor)cbxFornecedor.SelectedItem, // Acredito que aqui seja a linha do erro, pois quando eu removo essa linha, o código executa normalmente, porém não apresenta o valor do fornecedor escolhido no GRID
Numero = txtNumero.Text
};
notaEntrada = (txtIDNotaEntrada.Text == string.Empty ? this.controller.Insert(notaEntrada) : this.controller.Update(notaEntrada));
dgvNotasEntrada.DataSource = null;
dgvNotasEntrada.DataSource = this.controller.GetAllNotaEntrada();
ClearControlsNota();
}
Code that populates the values in the ComboBox:
private void InicializaComboBoxs()
{
cbxFornecedor.Items.Clear();
foreach (Fornecedor fornecedor in this.fornecedorController.GetAll())
{
cbxFornecedor.Items.Add(fornecedor.Nome);
}
}