Inquiridor
C# ASPX.NET com GridView usando Begin Rollback

Pergunta
-
Tenho uma GridView nela esta ligado um DataSource que contem as propriedades Select-Inser-Update-Delete, essa grid uso EditForm e nela tenho PageControle com uma tabSide com 4 abas, cada uma dessas abas vai gravar os dados em tabelas diferentes Exemplo.
Aba 1 vai gravar dados na tabela 1.
Aba 2 vai gravar dados na tabela 2.
Aba 3 vai gravar dados na tabela 3.
Aba 4 vai gravar dados na tabela 4.
Se alguma delas der "ERRO" será desfeito o Insert das anteriores tipo Begin Rollback.
Problema e que GridView esta ligada apenas a um DataSource e tem so um Inser-Update-Delete.
A minha duvida e como montar esses Inser-Update-Delete simultaneos com Begin Rollback.
Junto com o Visual Studio uso os componentes da DevExpress.Sou novo em desenvolvimento com C# APSX.NET,e como inserir Bagin Rollback no meu codigo descrito abaixo
Agradeço pela ajuda.
DataSource
-------------<asp:ObjectDataSource ID="dtsCidadao" runat="server"
DataObjectTypeName="WebSaude.tbCidadao" DeleteMethod="Apagar"
InsertMethod="Salvar" SelectMethod="GetDadosCadCidadao"
TypeName="tbCidadaoHelper" UpdateMethod="Alterar"></asp:ObjectDataSource>Metodo da Grid
--------------protected void grdCidadao_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
{
InsereCampos(e, sender);
}
protected void InsereCampos(ASPxDataInsertingEventArgs e, object sender)
{
e.NewValues["cdCidadao"] = GetText("txbcdCidadao");if (!GetText("txtdsCidadao").ToString().Equals(""))
{
e.NewValues["dsCidadao"] = GetText("txtdsCidadao");
}
}
protected string GetText(string AIdControl)
{
ASPxPageControl pageControl = grdCidadao.FindEditFormTemplateControl("pgcCidadao") as ASPxPageControl;
ASPxTextEdit edt = pageControl.FindControl(AIdControl) as ASPxTextBox;
if (!edt.ToString().Equals(""))
{
return edt.Text;
}
else
{
return "";
}
}
protected void grdCidadao_RowInserted(object sender, DevExpress.Web.Data.ASPxDataInsertedEventArgs e)
{
var _context = ObjectContextPerHttpRequest.Context;
String error = "";
try
{
_context.SaveChanges();
(sender as ASPxGridView).CancelEdit();
}
catch (Exception ex)
{
error = ex.Message;
error += ex.InnerException;
String resultado = MensagemError.GetTraducaoMensagemErro(error);
throw new ArgumentException(resultado);
}
}
Class
------public static void Salvar(tbCidadao Cidadao)
{
var _context = ObjectContextPerHttpRequest.Context;
Cidadao.dsRowID = Guid.NewGuid().ToString();
_context.AddTotbCidadao(Cidadao);
}
Sou iniciante no C# com ASPX.NET teria algum exemplo para me passar ?
Uso conexão ADO.NET com class de conexão.
public class ObjectContextPerHttpRequest
{
public ObjectContextPerHttpRequest()
{
}
public static PSGEntities Context
{
get
{
string ObjectContextKey = HttpContext.Current.GetHashCode().ToString("x");
if (!HttpContext.Current.Items.Contains(ObjectContextKey))
{
HttpContext.Current.Items.Add(ObjectContextKey, new PSGEntities());
}
return HttpContext.Current.Items[ObjectContextKey] as PSGEntities;
}
}
}E conecto atra-vez do.
var _contextCidadao = ObjectContextPerHttpRequest.Context;
Como implementar "transactionscope" nisso ?
Obrigado.
Att.
Todas as Respostas
-
Rodrigo tenho algo que é muito parecido com o que vc quer, sendo que eu faço tudo dentro de um método vc não pode ser separado assim como vc está fazendo tenho em vb olhe ai
Sub SF_LerArquivoTexto() Dim WL_OjConnection As SqlConnection Dim WL_OjCommand As SqlCommand Dim WL_OJCommand1 As SqlCommand Dim WL_OjTransaction As SqlTransaction Dim WL_OjDataReader As SqlDataReader Try WL_OjConnection = New SqlConnection(CF_DSConexao) WL_OjConnection.Open() WL_OjTransaction = WL_OjConnection.BeginTransaction(IsolationLevel.ReadCommitted) WL_OjCommand = New SqlCommand WL_OjCommand.CommandTimeout = 154000 WL_OjCommand.Connection = WL_OjConnection WL_OjCommand.Transaction = WL_OjTransaction WL_OJCommand1 = New SqlCommand WL_OJCommand1.CommandTimeout = 54000 WL_OJCommand1.Connection = WL_OjConnection WL_OJCommand1.Transaction = WL_OjTransaction aqui vc faz seus inserts delets o que vc quiser caso haja algum erro vc da o rollback assim if erro then WL_OjTransaction.Rollback() WL_OjConnection.Close() WL_OjStreamText.Close() end if
Junior