Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

phmd2004

Tratar erro, avisando o usuario de uma forma mais amigavel

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.