0
Dear colleagues, I am trying to learn how to develop an MVC project. But I am having some difficulties. When running the program, it runs normally, but when I want to record a product input note throws this exception according to the image below:
Below is the source code of 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();
}
}
}
Code of Supplier Controller
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 in the above code an object of the Repository class is instantiated. Below is the code of the class.
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;
}
}
}
Code of Class Notainput:
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 releasing 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 populating values in Combobox:
private void InicializaComboBoxs()
{
cbxFornecedor.Items.Clear();
foreach (Fornecedor fornecedor in this.fornecedorController.GetAll())
{
cbxFornecedor.Items.Add(fornecedor.Nome);
}
}
SelectedItem
is a string with what is written in the combobox at the time... The conversion makes no sense.– Jéf Bueno
is because the ownership of your class is a kind of another class, ie Suppliersnote is of the Supplier type and you are wanting to make a
cast
Combox that is not of the same type.– novic
Could you show me an example code so I can compare my error?
– Danillo Victtor
@Danillovicttor has nothing to show, little grasshopper. It would be good if you show the code you use to fill out the combo, then we can try to help you.
– Jéf Bueno
@Danillovicttor Ask the question, son
– Jéf Bueno
@LINQ already put the code... is at the end of the question
– Danillo Victtor
now you have to use:
cbxFornecedor.DataSource = this.fornecedorController.GetAll(); cbxFornecedor.DisplayMember = "Nome";
– Rovann Linhalis