Error changing with message Object reference not set to an instance of an object

1

Personal I have the following problem.

I created a class for DTO like this:

public class PessoaFuncionario
{
    public Pessoa Pessoa { get; set; }
    public string Nome { get; set; }
    public string CPF { get; set; }
    public string CRM { get; set; }

}

It uses the other than Pessoa that looks like this:

public class Pessoa
{
    public int IDPessoa { get; set; }
    public PessoaTipo PessoaTipo { get; set; }
}

I then created a business object with the rules to insert:

public string Alterar(PessoaFuncionario pessoaFuncionario)
{
    try
    {
        acessoDadosSqlServer.LimparParametros();                
        acessoDadosSqlServer.AdicionarParametros("@IDPessoaFuncionario", pessoaFuncionario.Pessoa.IDPessoa);
        acessoDadosSqlServer.AdicionarParametros("@Nome", pessoaFuncionario.Nome);
        acessoDadosSqlServer.AdicionarParametros("@CPF", pessoaFuncionario.CPF);
        acessoDadosSqlServer.AdicionarParametros("@CRM", pessoaFuncionario.CRM);

        string idPessoaFuncionario = acessoDadosSqlServer.ExecutarManipulacao(CommandType.StoredProcedure, "uspPessoaFuncionarioAlterar").ToString();
        return idPessoaFuncionario;
    }
    catch (Exception excpetion)
    {
        return excpetion.Message;
    }
}

And the method on the button to change:

else if (acaoNaTelaSelecionada == AcaoNaTela.Alterar)
{
    PessoaFuncionario pessoaFunc = new PessoaFuncionario();
    pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text); // << Onde aparece o erro
    pessoaFunc.Nome = txtNome.Text;
    pessoaFunc.CRM = txtCRM.Text;
    pessoaFunc.CPF = mskCPF.Text;

    PessoaFuncionarioNegocios pessoaNegocios = new PessoaFuncionarioNegocios();
    string retorna = pessoaNegocios.Alterar(pessoaFunc);

    try
    {
        int IDPessoa = Convert.ToInt32(retorna);
        MessageBox.Show("Registro atualizado com sucesso.", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch
    {
        MessageBox.Show("Não foi possivel alterar. Detalhes: " + retorna, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

The error occurs at the beginning of the save method.

asked by anonymous 18.05.2015 / 19:14

1 answer

2

It is also necessary to initialize the class Pessoa .

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text); // <-- erro aqui

You should do:

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.Pessoa = new Pessoa(); // <-- 
pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text);

Or initialize it in class PessoaFuncionario :

public class PessoaFuncionario
{
     public Pessoa pessoa = new Pessoa(); // <--
     public string Nome { get; set; }
     public string CPF { get; set; }
     public string CRM { get; set; }
}

And use it like this:

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text);
    
18.05.2015 / 19:51