none
Referência de objeto não definida para uma instância de um objeto com DataBoundItem RRS feed

  • Pergunta

  • Meu codigo nao está lendo o objeto de uma linha no data grid view. Segue o codigo utilizado no botao:

    Agenda agendaSelecionada = (dgwPrincipal.SelectedRows[0].DataBoundItem as Agenda);
                AgendaNegocio agendaNegocio = new AgendaNegocio();
                string retorno = agendaNegocio.ExcluirAgendamento(agendaSelecionada);

    No BreakPoint o "agendaSelecionada" aparece com valor "null". Segue o codigo das colunas(Que foram criadas no codigo, devido ao reuso):

    DataGridViewColumn IdAgendamento = new DataGridViewTextBoxColumn();
                    IdAgendamento.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                    IdAgendamento.DataPropertyName = "Agenda.IdAgendamento";
                    IdAgendamento.Name = "IdAgendamento";
                    dgwPrincipal.Columns.Add(IdAgendamento);
    
                    DataGridViewColumn IdCliente = new DataGridViewTextBoxColumn();
                    IdCliente.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                    IdCliente.DataPropertyName = "Agenda.IdCliente.IdCliente";
                    IdCliente.Width = 60;
                    IdCliente.Name = "IdCliente";
                    dgwPrincipal.Columns.Add(IdCliente);
    
                    DataGridViewColumn Nome = new DataGridViewTextBoxColumn();
                    Nome.DataPropertyName = "agenda.IdCliente.Nome";
                    Nome.Name = "Nome";
                    dgwPrincipal.Columns.Add(Nome);
    
                    DataGridViewColumn Descricao = new DataGridViewTextBoxColumn();
                    Descricao.DataPropertyName = "Agenda.agendaServicos.IdServico.Descricao";
                    Descricao.Name = "Descricao";
                    dgwPrincipal.Columns.Add(Descricao);
    
                    DataGridViewColumn Valor = new DataGridViewTextBoxColumn();
                    Valor.DataPropertyName = "Agenda.agendaServicos.IdServico.Valor";
                    Valor.Width = 60;
                    Valor.Name = "Valor";
                    dgwPrincipal.Columns.Add(Valor);
    
                    DataGridViewColumn Data = new DataGridViewTextBoxColumn();
                    Data.DataPropertyName = "Agenda.Data";
                    Data.Name = "Data";
                    Data.DefaultCellStyle.Format = "dd/MM/yyyy";
                    dgwPrincipal.Columns.Add(Data);
    
                    DataGridViewColumn AgendadoEm = new DataGridViewTextBoxColumn();
                    AgendadoEm.DataPropertyName = "Agenda.AgendadoEm";
                    AgendadoEm.DefaultCellStyle.Format = "dd/MM/yyyy";
                    AgendadoEm.Name = "AgendadoEm";
                    dgwPrincipal.Columns.Add(AgendadoEm);
    
                    DataGridViewCheckBoxColumn Atendido = new DataGridViewCheckBoxColumn();
                    Atendido.DataPropertyName = "Agenda.Atendido";
                    Atendido.Name = "Atendido";
                    Atendido.Width = 60;
                    dgwPrincipal.Columns.Add(Atendido);

    Desde já, agradeço

    sábado, 10 de fevereiro de 2018 17:35

Respostas

  • Olá,
    este erro ocorre porque nesse trecho do seu código

    Agenda agendaSelecionada = (dgwPrincipal.SelectedRows[0].DataBoundItem as Agenda);
    mais precisamente nesta parte dgwPrincipal.SelectedRows[0] você está informando que o índice da linha 0 (zero) está selecionado e consequentemente ele deve ter algum valor.
    Exemplo, se você tem 3 linhas (0,1,2), mas escolhe a agenda da linha 2, o código está buscando sempre o valor na linha 0 (zero) que não foi selecionada.
    Para corrigir isso, faça um looping no seu grid e procure pela linha selecionada e ai sim você vai ter um valor.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    domingo, 11 de fevereiro de 2018 22:50