Usuário com melhor resposta
ObjectDataSource - passar objeto como parâmetro

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?
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.
- Sugerido como Resposta Murilo Amaru Gomes sábado, 7 de agosto de 2010 15:38
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 19 de agosto de 2010 23:09
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.
- Sugerido como Resposta Murilo Amaru Gomes sábado, 7 de agosto de 2010 15:38
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 19 de agosto de 2010 23:09
-
-
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.