none
ObjectDataSource - passar objeto como parâmetro RRS feed

  • Pergunta

  • Pessoal, tem como eu passar um objeto em um método utilizando ObjectDataSource?

    Exemplo, vamos dizer que eu tenha um método para selecionar dados e outro método de apagar registro.

    De selecionar:

        public List<ve_criterios_usuarios_tipooperacao> GetAllCriterios()
        {
            using (kerpVeiculosModel.kerpVeiculosEntities dm = new kerpVeiculosModel.kerpVeiculosEntities())
            {
                IEnumerable<ve_criterios_usuarios_tipooperacao> qryCriterios = from c in dm.ve_criterios_usuarios_tipooperacaoSet
                                                         select c;
                return qryCriterios.ToList();
            }
        }

    Até ai tudo bem, eu consigo pegar todos os registros e colocar em um gridview, por meio do ObjectDataSource.

    E fiz outro metodo para deletar:

        public void DeletarCriterio(ve_criterios_usuarios_tipooperacao criterio)
        {
            using (kerpVeiculosModel.kerpVeiculosEntities dm = new kerpVeiculosModel.kerpVeiculosEntities())
            {
                dm.DeleteObject(criterio);
                dm.SaveChanges();
            }
        }

     

    Só que quando eu mando deletar no GridView, o criterio vem como null. Como faço para passar o objeto? Ou não tem como eu fazer isso?

     

     

    quinta-feira, 5 de agosto de 2010 17:51

Respostas

  • Ola,

    A melhor maneira de fazer é ao invés de usar objeto, usar um Id por exemplo:

    public void DeletarCriterio(int IdCriterio) // use o nome do id do banco
        {
            using (kerpVeiculosModel.kerpVeiculosEntities dm = new kerpVeiculosModel.kerpVeiculosEntities())
            {

                var criterio = dm.ve_criterios_usuarios_tipooperacaoSet.Where(c => c.IdCriterio == IdCriterio).FirstOrDefault();
                dm.DeleteObject(criterio);
                dm.SaveChanges();
            }
        }

    No seu ObjectDataSource configure o parâmetro, ele ficaria assim:

    <DeleteParameters>
      <asp:Parameter Name="IdCriterio" Type="Int32" />
    </DeleteParameters>

    No GridView não esqueça de colocar o DataKeyNames:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       DataSourceID="ObjectDataSource1" DataKeyNames="IdCriterio">

    Espero ter ajudado.

    Te aconselho a usar o EntityDataSource para manipular dados do EntityFramework.

    quinta-feira, 5 de agosto de 2010 18:43

Todas as Respostas

  • Ola,

    A melhor maneira de fazer é ao invés de usar objeto, usar um Id por exemplo:

    public void DeletarCriterio(int IdCriterio) // use o nome do id do banco
        {
            using (kerpVeiculosModel.kerpVeiculosEntities dm = new kerpVeiculosModel.kerpVeiculosEntities())
            {

                var criterio = dm.ve_criterios_usuarios_tipooperacaoSet.Where(c => c.IdCriterio == IdCriterio).FirstOrDefault();
                dm.DeleteObject(criterio);
                dm.SaveChanges();
            }
        }

    No seu ObjectDataSource configure o parâmetro, ele ficaria assim:

    <DeleteParameters>
      <asp:Parameter Name="IdCriterio" Type="Int32" />
    </DeleteParameters>

    No GridView não esqueça de colocar o DataKeyNames:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       DataSourceID="ObjectDataSource1" DataKeyNames="IdCriterio">

    Espero ter ajudado.

    Te aconselho a usar o EntityDataSource para manipular dados do EntityFramework.

    quinta-feira, 5 de agosto de 2010 18:43
  • Então Murilo, eu cheguei a fazer desse jeito, mas eu penso que a forma correta de fazer isso, levado em consideração a programação orientada a objetos, é passar o objeto como parametro. ou estou errado?
    quinta-feira, 5 de agosto de 2010 18:45
  • Acho que não, sem contar que talvez de excessão pelo entity não achar o objeto para deletar, acredito que de qualquer maneira você terá que buscar esse objeto no banco. E passar o Id para uma deleção, ao invés do objeto no meu ponto de vista não é deixar de usar poo.

     

    quinta-feira, 5 de agosto de 2010 18:47