phmd2004 0 Denunciar post Postado Fevereiro 15, 2008 Problema resolvido .... codigo abaixo pra pegar a chave que vai ser deletada protected void ObjectDataSourceFontesConhec_Deleting(object sender, ObjectDataSourceMethodEventArgs e) { lblErr.Text = "teste "+ e.InputParameters[0].ToString(); e.Cancel = true; }Bom pessoal, imaginem a seguinte situação. tabela 1 : campo1, campo2,campo3 tabela 2 : campo1, campo2, campo3(referente tabela 1) a tabela 2 possui o campo 3 que é chave externa da tabela1, e em um gridview, detailsview, etc, quando adiciono o comando delete (que vem de um object data source), sem fazer nada na mão. Até ai tudo bem, ate quando eu tento deletar uma linha da tabela 1 e uma chave esta sendo usada na tabela 2 gerando erro. Gostaria de tratar este erro, avisando o usuario de uma forma mais amigavel( ex: Este registro nao pode ser excluido porque esta sendo utilizado em outra tabela...bla bla bla) penso que a solucacao esta em fazer uma verificacao no evento "RowDeleting(object sender, GridViewDeleteEventArgs e)" do Grid ou Object data source, e caso a chave externa estiver sendo usada bastaria apenas fazer um e.Cancel=true. Gostaria de saber como pegar a chave primaria que vai ser deletada ( o parametro do comando delete) ? Obs: eu não mostro o campo da chave primaria no grid (ele fica como visible=false) Abaixo segue parte do Gridview onde esta o botao com o comando delete e o objectDataSource <ItemTemplate> <asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Delete" EnableViewState="False" OnClientClick="return confirm('Deseja Realmente Excluir?');" Text="Excluir" /> </ItemTemplate> <asp:ObjectDataSource ID="ObjectDataSourceDetailView" runat="server" DeleteMethod="Delete" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="ListaMembroById_Cpf" TypeName="DataSetCepxTableAdapters.tblXMembrosTableAdapter" UpdateMethod="Update"> <DeleteParameters> <asp:Parameter Name="Original_nId" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="sTitulacao" Type="String" /> <asp:Parameter Name="sMatricula" Type="String" /> <asp:Parameter Name="sContato" Type="String" /> <asp:Parameter Name="sArea" Type="String" /> <asp:Parameter Name="Original_nId" Type="Int32" /> </UpdateParameters> <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="idMembro" PropertyName="SelectedValue" Type="Int32" /> <asp:Parameter Name="CpfMembro" Type="String" /> </SelectParameters> <InsertParameters> <asp:Parameter Name="sTitulacao" Type="String" /> <asp:Parameter Name="sMatricula" Type="String" /> <asp:Parameter Name="sContato" Type="String" /> <asp:Parameter Name="sArea" Type="String" /> </InsertParameters> </asp:ObjectDataSource> Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Fevereiro 15, 2008 Poste a solução para nós phmd2004. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
phmd2004 0 Denunciar post Postado Fevereiro 18, 2008 protected void ObjectDataSourceFontesConhec_Deleting(object sender, ObjectDataSourceMethodEventArgs e) { int delFontesConhec= Convert.ToInt32(e.InputParameters[0].ToString()); //pega o Id(chave primaria que vai ser passada como parametro) DataSetCepxTableAdapters.tblXFontesConhec_ProjetosTableAdapter fontes = new DataSetCepxTableAdapters.tblXFontesConhec_ProjetosTableAdapter(); DataSetCepx.tblXFontesConhec_ProjetosDataTable projetos = fontes.ListaFontesConhec_ProjetosByIdFonteConhec(delFontesConhec); if (projetos.Rows.Count > 0)//se possuir algum outro elemento em que a chave esteja sendo usada, e.Cancel=true (cancela a deleção)... { e.Cancel = true; lblErr.Text = "Este item não pode ser excluido porque esta sendo utilizado no projeto "+projetos[0].Projeto; } else lblErr.Text = "Item Excluido com Sucesso"; } espero que tenha sido ultil para muitas pessoas, pois evitou que eu fizesse uma pog violenta!!!!!!!! Compartilhar este post Link para o post Compartilhar em outros sites