none
C# ASPX.NET com GridView usando Begin Rollback RRS feed

  • 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.

    quarta-feira, 6 de março de 2013 20:11

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

    quinta-feira, 7 de março de 2013 12:11