none
Object reference not set to an instance no Datacontrol RRS feed

  • Pergunta

  • Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error: Line 65: Line 66: Line 67: if (e.Row.RowType == DataControlRowType.DataRow)

    Estou utilizando o código abaixo para apresentar no gridview o Nome do cliente da venda e a descrição da venda, com um template field no gridview, pois os campos são foreign key.

    Quando entro a primeira vez na tela de administração de vendas o código le normal, porém quando tento atualizar o campo Status, ele aparece esse erro.

     

    protected void grvVendas_RowDataBound1(object sender, GridViewRowEventArgs e)
            {
            
               
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    VENDA venda = (VENDA)e.Row.DataItem;

                    ((Label)e.Row.FindControl("lblCliente")).Text = venda.CLIENTE.NOME;
                    ((Label)e.Row.FindControl("lblTipo_Venda")).Text = venda.TIPO_VENDA.DESCRICAO;
                }

          }

    Agradeço a atenção

    terça-feira, 23 de novembro de 2010 22:29

Todas as Respostas

  • Renam...

     

    De cara eu digo o seguinte,  parece que quando ele tenta pucr os dados,  este vem como NULO..

    Como voce esta populando este gridView ?   DataSet. ObjectDataSource.??

    Tenta um   "Quebra galho"  na linha

    ((Label)e.Row.FindControl("lblCliente")).Text = venda.CLIENTE.NOME + "" ;
    ((Label)e.Row.FindControl("lblTipo_Venda")).Text = venda.TIPO_VENDA.DESCRICAO + "" ;

    Ou tenta verificar se o valor é nulo antes ok.

    Me avisa ai pra te ajudar ok?

    http://fparmezani.wordpress.com
    quarta-feira, 24 de novembro de 2010 11:53
  • Olá Fernando,

     

    Estou buscando os dados com datasource e mostrando com databind.

     

    Já verifiquei os dados do venda.cliente.nome rodando o debug e possui dados, o erro acontece na instância do Label. Muito engraçado, pois quando entro a primeira vez na tela de administração das vendas le normal, o problema acontece quando clico no botão atualizar, assim atualiza mas retorna esse erro na hora de buscar novamente o gridview com o databound. E ainda o erro é na instância do obejto Label.

     

    Ate mais

     

    Renan

     

     

    quarta-feira, 24 de novembro de 2010 14:04
  • Tem como dar uma olhadinha no código completo....quem sabe eu posso criar um exemplo aqui na minha máquina
    http://fparmezani.wordpress.com
    quarta-feira, 24 de novembro de 2010 15:52
  • Olá Fernando,

    Esse é o código completo da página ListarVendas:

    Obrigado

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using LojaVirtual.BLL;
    using LojaVirtual.DAO;

    namespace LojaVirtual.ADMIN
    {
        public partial class ListarVendas : System.Web.UI.Page
        {
            VendaBLL vendabll = new VendaBLL();
            VENDA venda = new VENDA();
            VendaDao vendas = new VendaDao();
            int idtVenda = 0;
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    btnSalvar.Visible = false;
                    BuscarVendas();
                   
                   
                    if (Session["login"] == null)
                    {
                        Response.Redirect("Login.aspx");
                    }
                   
                }
            }

            public void BuscarVendas()
            {
                grvVendas.DataSource = vendabll.GetAll();
                grvVendas.DataBind();
            }

            protected void grvVendas_SelectedIndexChanged(object sender, EventArgs e)
            {
               

                    idtVenda = (int)grvVendas.SelectedValue;



                    //Listar Itens das Vendas
                    Session.Add("idtVenda", idtVenda);
                    Response.Redirect("ListarItensVenda.aspx");

                    vendabll = null;
                    venda = null;

               
            }

           

            protected void grvVendas_RowDataBound1(object sender, GridViewRowEventArgs e)
            {

           
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    VENDA venda = (VENDA)e.Row.DataItem;

                   
                    ((Label)e.Row.FindControl("lblCliente")).Text = venda.CLIENTE.NOME;
                    ((Label)e.Row.FindControl("lblTipo_Venda")).Text = venda.TIPO_VENDA.DESCRICAO;
                }
               
             
            }

            public void LimparCampos()
            {
                txtIdVenda.Text = "";
                txtDataVenda.Text = "";
                txtCliente.Text = "";
                txtValor.Text = "";
                btnSalvar.Visible = false;
                txtStatus.Text = "";
            }

            public void AtualizarVenda()
            {
               

                idtVenda = int.Parse(txtIdVenda.Text);

                venda = vendas.Find(ven => ven.IDT_VENDA == idtVenda).First<VENDA>();

               
                venda.TIPO_VENDA.DESCRICAO = txtTipoVenda.Text;
                venda.CLIENTE.NOME = txtCliente.Text;
                venda.DATA_VENDA = Convert.ToDateTime(txtDataVenda.Text);
                venda.STATUS = txtStatus.Text;
                venda.VALOR_TOTAL = decimal.Parse(txtValor.Text);

                vendas.Update(venda);
                vendas.SaveChanges();
                //Response.Redirect("ListarVendas.aspx");
                BuscarVendas();

                vendas = null;
                venda = null;
                LimparCampos();

            }

            protected void btnSalvar_Click(object sender, EventArgs e)
            {
                if (txtIdVenda.Text != string.Empty)
                {
                    AtualizarVenda();
                }
                else
                {

                    venda.IDT_VENDA = int.Parse(txtIdVenda.Text);
                    venda.TIPO_VENDA.DESCRICAO = txtTipoVenda.Text;
                    venda.CLIENTE.NOME = txtCliente.Text;
                    venda.DATA_VENDA = DateTime.Parse(txtCliente.Text);
                    venda.STATUS = txtStatus.Text;
                    venda.VALOR_TOTAL = int.Parse(txtValor.Text);

                    vendabll.Add(venda);
                    vendabll.SaveChanges();

                    BuscarVendas();

                    vendabll = null;
                    venda = null;
                    LimparCampos();

                }
            }

            protected void grvVendas_RowEditing(object sender, GridViewEditEventArgs e)
            {
                btnSalvar.Text = "Atualizar";
                btnSalvar.Visible = true;

              

                idtVenda = int.Parse(grvVendas.DataKeys[e.NewEditIndex].Value.ToString());

                venda = vendas.Find(ven => ven.IDT_VENDA == idtVenda).First<VENDA>();

                txtIdVenda.Text = venda.IDT_VENDA.ToString();
                txtTipoVenda.Text = venda.TIPO_VENDA.DESCRICAO;
                txtCliente.Text = venda.CLIENTE.NOME;
                txtDataVenda.Text = venda.DATA_VENDA.ToString();
                txtValor.Text = venda.VALOR_TOTAL.ToString();
                txtStatus.Text = venda.STATUS;



                vendas = null;
                venda = null;
            }

            protected void grvVendas_RowUpdated(object sender, GridViewUpdatedEventArgs e)
            {

            }

     

        }
    }

    sexta-feira, 26 de novembro de 2010 01:01
  • Renan

     

    O código parece estar bem  , oque eu faria na sua situação é,

     

    No debug, clicar na linha:

     

    if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    VENDA venda = (VENDA)e.Row.DataItem;

    Aqui esta acontecendo o problema.. ( me parece).

     

    Se quiser fazer junto no msn...  me dá uma chama e tento te ajudar. ok...

     

    fparmezani@hotmail.com

     

     

     


    http://fparmezani.wordpress.com
    sexta-feira, 26 de novembro de 2010 11:26
  • Fala Fernando,

     

    Fiz o debug e na realidade a linha que está dando problema é essa:

     

    ((Label)e.Row.FindControl("lblCliente")).Text = venda.CLIENTE.NOME;

     

    Por algum motivo depois que atualiza, o Label nao consegue ser instanciado no grid view para atualizar o campo para o nome do cliente.

     

    O que é muito estranho.

    Até mais

     

    Renan

    sexta-feira, 26 de novembro de 2010 21:13