none
View State, la informacion se pierde RRS feed

  • Pregunta

  • C# visual studio 2010, Firefox, ASP.Net

    Estoy almacenando una lista (List<>) en un View State y ese esta funcionando correctamente para un usuario, pero cuando entras 2 o mas usuario a capturar datos en la lista, cuando conincidimos (mas de un usuario cada quien en equipo distinto) en dar click en "Aceptar" para agregar el nuevo dato a la lista este no se escribe, es como si el otro usuario desde otra PC bloquiara el almacenamiento del View State para los otros usuario mas la informacion no se mezcla.

    ¿Que no se supone el View State trabaja  a nivel Pagina, por tanto debiera de ser dediaco exclusiviamente para cada usuario en su propia PC?.

    ¿Que prodia hacer falta configurar?

    No queremos utilizar variables tipo sesion (aun), dado que la aplicación es algo grande y seran muchos usuarios capturando al mismo tiempo en muchos procesos y no queremos cargarle la mano al servidor, queremos ciertos datos manejarlos del lado del cliente para distribuir la carga.Saludos

    sábado, 21 de septiembre de 2013 19:08

Respuestas

  • private static MetodosComunes _metodosComunes= null;
            private static int _renglonAnterior = 0;
            private static short _evento = -1;
            private static short TablaActual { get; set; }
            private List<AlmacenEntidad> _almacenes = null;
            private static List<UsuarioEntidad> _usuarios { get; set; }
            private static bool _isNuevo = false;

    Estas variables estáticas debes eliminarlas seguramente el problema se origina aqui. Por ejemplo _isNuevo Varios usuario pueden estar machando su contenido y si la usas para gestionar si se debe agregar un registro nuevo o no puede fallarte. Espero haberme explicado algo :)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta ArmandoInnova lunes, 23 de septiembre de 2013 20:32
    lunes, 23 de septiembre de 2013 18:25
    Moderador

Todas las respuestas

  • Los datos viewstate son datos como bien dices locales a la pagina...no tienen porque solaparse con datos fe otro usuario. Pueds mostrarnos como manejas el viewstate con dicha lista?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 21 de septiembre de 2013 19:53
    Moderador
  • El viewstate  no es mas que un campo hidden con datos encriptados.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 21 de septiembre de 2013 19:57
    Moderador
  • Asi esta mi codigo:

    mi lista:

    private List<AlmacenEntidad> _almacenes = null;

    Mi Codigo:

    if (!Page.IsPostBack)
                {
                    Inicializar();
                }

    private void Inicializar()
            {
            
                if (ViewState["LISTA"+Page.ClientID] != null)
                    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                else
                    _almacenes = new List<AlmacenEntidad>();          
                 InicializarListas();//Funcion para llenar la lista al abrir la pagina         

              ViewState["LISTA" + Page.ClientID] = _almacenes;

           }

    //Boton donde agregamos un registro a nuestra lista

     protected void btnAceptar_Click(object sender, EventArgs e)
            {
                int mensaje = -1;

               if (ViewState["LISTA" + Page.ClientID] != null)
                    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                else
                    _almacenes = new List<AlmacenEntidad>();

                _almacenes.Add(new AlmacenEntidad(){
                    Almacen= InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim()),
                    DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim()),
                    DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim()),
                    Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim()),
                    CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim()),
                    IsNuevo=true,
                    ID = string.Empty
                });
                ViewState["LISTA" + Page.ClientID] = _almacenes;
            }

    El problema es que un usuario captura correctamente la informacion, pero si otro usuario se ponde a capturar, es como si se apoderara de alguna forma del View State y ya no permite agregar registros a la lista a menos que este deje de alimnetar.

    sábado, 21 de septiembre de 2013 20:10
  • No veo nada raro con el uso del viewstate excepto quizas el uso de variables como

    Almacen, Cuenta,ID...esas que son?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 21 de septiembre de 2013 20:28
    Moderador
  • Son las variables de mi entidad de almacenes, aqui te envio como tengo declarada mi entidad.

    namespace Almacen.Entidades

    {

         [Serializable()]
          public  class AlmacenEntidad
          {
             public string Clave { get; set; }
             public string Usuario { get; set; }
             public string Nombre { get; set; }
             public string Almacen { get; set; }
             public string DescripcionEspanol { get; set; }
             public string DescripcionIngles { get; set; }
             public string Cuenta { get; set; }
             public string CuentaAjuste { get; set; }
             public bool IsNuevo { get; set; }
             public string ID { get; set; }
             public string Error { get; set; }

             public bool HasRows { get; set; }
          }

    }

    sábado, 21 de septiembre de 2013 20:33
  • de todas formas sabes  que cada vez que se hace un postback todas tus variables se inicislizan

    private List<AlmacenEntidad> _almacenes = null;

    Te lo digo porque si usas esta lista en algún otro lugar que no sea el código que me has pasado, puedes tener problemas.

    Te recomiendo uses una propiedad de esta forma ok?

     private List<AlmacenEntidad> Almacenes

    {

       get { return ViewState["LISTA" + Page.ClientID] != null ? (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID] : new List<AlmacenEntidad>() ;}

      set {  ViewState["LISTA" + Page.ClientID] = value;}

    }

    Ahora con esta propiedad puedes dejar de usar _almacenes

    protected void btnAceptar_Click(object sender, EventArgs e)
             {
                 int mensaje = -1;
     
               if (Almacenes == null)
                     Almacenes = new List<AlmacenEntidad>();
     
                Almacenes.Add(new AlmacenEntidad(){
                     Almacen= InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim()),
                     DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim()),
                     DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim()),
                     Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim()),
                     CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim()),
                     IsNuevo=true,
                     ID = string.Empty
                 });
                 
             }
    private void Inicializar()
             {
              
                if (Almacenes == null)
                     Almacenes = new List<AlmacenEntidad>();           
                 InicializarListas();//Funcion para llenar la lista al abrir la pagina         
     
    
           }
    



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 21 de septiembre de 2013 20:50
    Moderador
  • Hola Sergio,

    Esto último que nos envaste tampoco nos funciono por lo cual decidimos utilizar variables de sesion esperando que el problema se erradicara, pero nos vimos en la mismo situacion, cuando estan 2 o mas usuarios capturando al mismo tiempo y lanzan el evento solo respeta al que lanzo el evento primero y no realiza modificación alguna para los demás (no agrega su dato capturado a la lista).

    private void Inicializar()

    {

                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
              
                InicializarListas();           
                Session[VarSesionAlmacen.Almacen] = _almacenes;

    }

    protected void btnAceptar_Click(object sender, EventArgs e)
     {

                 if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];

                _almacenes.Add(new AlmacenEntidad()
                {
                    Almacen= InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim()),
                    DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim()),
                    DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim()),
                    Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim()),
                    CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim()),
                    IsNuevo=true,
                    ID = string.Empty
                });
               Session[VarSesionAlmacen.Almacen] = _almacenes;

    }

    ¿Alguna otra sugerencia?, gracias de antemano.

    lunes, 23 de septiembre de 2013 15:29
  • Puedes mandar todo el código cs de esa pagina?usas algo static? Cual es la configuración de session en tu aplicativo?que viewstatemode estas aplicando?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 17:14
    Moderador
  • Aqui anexo el codigo completo de la pagina, nada mas como nota Sergio estamos trabajando como prueba exclusivamente con la variable de lista _almacees, lo comento por que tenemos varias variables STATIC y eso es precisamente loq ue estamos queriendo quitar y comenzamos como prueba con dicha lista que fue donde detectamos el problema.

    En cuanto al viewstatemode, no hemos modificado nada sobre eso asi que supongo que utilizamos el DEFAULT.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using Almacen.BLL;
    using Almacen.Entidades;
    using Cuentas.BLL;
    using Usuarios.BLL;
    using Usuarios.Entidades;
    using Shell;
    using Shell.Entidades;
    using Telerik.Web.UI;
    using Innova.Clases;
    
    namespace Innova.Paginas.Almacen
    {
        public partial class Almacen : System.Web.UI.Page
        {
            private static MetodosComunes _metodosComunes= null;
            private static int _renglonAnterior = 0;
            private static short _evento = -1;
            private static short TablaActual { get; set; }
            private List<AlmacenEntidad> _almacenes = null;
            private static List<UsuarioEntidad> _usuarios { get; set; }
            private static bool _isNuevo = false;
            
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    Inicializar();
                }
                var userControl = Page.LoadControl(Parametro.RutaPopUpMenu);
                userControl.FindControl(Parametro.ContextMenu).SkinID = Parametro.Skin;
                Form.Controls.Add(userControl);
                CambiarTabla();
            }
    
            private void Inicializar()
            {
                _metodosComunes = new MetodosComunes();
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
                //if (ViewState["LISTA"+Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                InicializarListas();
    
                for (int i = 0; i < _almacenes.Count; i++)
                {
                    //SesionAlmacen.Almacen[i].Cuenta = new CuentasBLL().CuentaExterna(SesionAlmacen.Almacen[i].Cuenta, Sesion.Separador);
                    //SesionAlmacen.Almacen[i].CuentaAjuste = new CuentasBLL().CuentaExterna(SesionAlmacen.Almacen[i].CuentaAjuste, Sesion.Separador);
                    _almacenes[i].Cuenta = new CuentasBLL().CuentaExterna(_almacenes[i].Cuenta, Sesion.Separador);
                    _almacenes[i].CuentaAjuste = new CuentasBLL().CuentaExterna(_almacenes[i].CuentaAjuste, Sesion.Separador);
                }
                Session[VarSesionAlmacen.Almacen] = _almacenes;
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
    
                Traducir();
                
                EstilizarTablaClave();
                EstilizarTablaAlmacen();
                EstilizarTablaUsuarios();
            }
    
            private void InicializarListas()
            {
                _usuarios = new UsuarioBLL().ObtenerUsuarios();
                _almacenes = new AlmacenBLL().BuscarDatosAlmacen();
            }
    
            private void EstilizarTablaUsuarios()
            {
                rgvUsuarios.Rebind();
    
                #region Estiliza tabla Usuarios
    
                rgvUsuarios.MasterTableView.GetColumn("isActivo1").HeaderStyle.Width = Unit.Pixel(50);
                rgvUsuarios.MasterTableView.GetColumn("isActivo1").FilterControlWidth = Unit.Pixel(10);
                rgvUsuarios.MasterTableView.GetColumn("isActivo1").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvUsuarios.MasterTableView.GetColumn("isActivo1").HeaderText = _metodosComunes.ObtenerTituloPorClave(181);
               
    
                rgvUsuarios.MasterTableView.GetColumn("usuario").HeaderStyle.Width = Unit.Pixel(70);
                rgvUsuarios.MasterTableView.GetColumn("usuario").FilterControlWidth = Unit.Pixel(190);
                rgvUsuarios.MasterTableView.GetColumn("usuario").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvUsuarios.MasterTableView.GetColumn("usuario").HeaderText = _metodosComunes.ObtenerTituloPorClave(490);
    
                rgvUsuarios.MasterTableView.GetColumn("nombre").HeaderStyle.Width = Unit.Pixel(70);
                rgvUsuarios.MasterTableView.GetColumn("nombre").FilterControlWidth = Unit.Pixel(190);
                rgvUsuarios.MasterTableView.GetColumn("nombre").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvUsuarios.MasterTableView.GetColumn("nombre").HeaderText = _metodosComunes.ObtenerTituloPorClave(47);
                
    
    
                rgvUsuarios.MasterTableView.GetColumn("Clave").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("IndPolrec").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Dias").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Fecha").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Blockuser").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Pregunta").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Respuesta").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Periodo").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Frecuencia").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("FechaInicial").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("FechaFinal ").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Dia").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Blockdatetime").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("IndicadorFrecuencia").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Email").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Comprador").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Blockdate").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("isActivo").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Fechabloqueo").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Apellido").Visible = false;
                rgvUsuarios.MasterTableView.GetColumn("Grupo").Visible = false;
                #endregion
    
                rgvUsuarios.Rebind();
    
            }
    
            private void EstilizarTablaAlmacen()
            {
                rgvAlmacen.Rebind();
    
                #region estilo tabla almacen
                rgvAlmacen.MasterTableView.GetColumn("almacen").HeaderStyle.Width = Unit.Pixel(70);
                rgvAlmacen.MasterTableView.GetColumn("almacen").FilterControlWidth = Unit.Pixel(350);
                rgvAlmacen.MasterTableView.GetColumn("almacen").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvAlmacen.MasterTableView.GetColumn("almacen").HeaderText = _metodosComunes.ObtenerTituloPorClave(244);
    
                rgvAlmacen.MasterTableView.GetColumn("Usuario").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("clave").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("nombre").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("DescripcionEspanol").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("cuenta").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("cuentaajuste").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("DescripcionIngles").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("isNuevo").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("id").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("error").Visible = false;
                rgvAlmacen.MasterTableView.GetColumn("hasrows").Visible = false;
                #endregion
    
                rgvAlmacen.Rebind();
               
            }
    
            private void EstilizarTablaClave()
            {
                rgvClave.Rebind();
                
                #region estilo tabla Clave
    
                rgvClave.MasterTableView.GetColumn("CuentaAjuste").HeaderStyle.Width = Unit.Pixel(70);
                rgvClave.MasterTableView.GetColumn("cuentaAjuste").FilterControlWidth = Unit.Pixel(130);
                rgvClave.MasterTableView.GetColumn("CuentaAjuste").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvClave.MasterTableView.GetColumn("CuentaAjuste").HeaderText = _metodosComunes.ObtenerTituloPorClave(245);
    
    
                rgvClave.MasterTableView.GetColumn("cuenta").HeaderStyle.Width = Unit.Pixel(70);
                rgvClave.MasterTableView.GetColumn("cuenta").FilterControlWidth = Unit.Pixel(130);
                rgvClave.MasterTableView.GetColumn("cuenta").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvClave.MasterTableView.GetColumn("cuenta").HeaderText = _metodosComunes.ObtenerTituloPorClave(74);
    
                rgvClave.MasterTableView.GetColumn("DescripcionIngles").HeaderStyle.Width = Unit.Pixel(70);
                rgvClave.MasterTableView.GetColumn("DescripcionIngles").FilterControlWidth = Unit.Pixel(130);
                rgvClave.MasterTableView.GetColumn("DescripcionIngles").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvClave.MasterTableView.GetColumn("DescripcionIngles").HeaderText = _metodosComunes.ObtenerTituloPorClave(14);
    
    
                rgvClave.MasterTableView.GetColumn("DescripcionEspanol").HeaderStyle.Width = Unit.Pixel(70);
                rgvClave.MasterTableView.GetColumn("DescripcionEspanol").FilterControlWidth = Unit.Pixel(130);
                rgvClave.MasterTableView.GetColumn("DescripcionEspanol").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvClave.MasterTableView.GetColumn("DescripcionEspanol").HeaderText = _metodosComunes.ObtenerTituloPorClave(13);
    
                rgvClave.MasterTableView.GetColumn("almacen").HeaderStyle.Width = Unit.Pixel(70);
                rgvClave.MasterTableView.GetColumn("almacen").FilterControlWidth = Unit.Pixel(130);
                rgvClave.MasterTableView.GetColumn("almacen").HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                rgvClave.MasterTableView.GetColumn("almacen").HeaderText = _metodosComunes.ObtenerTituloPorClave(12);
    
                rgvClave.MasterTableView.GetColumn("Usuario").Visible = false;
                rgvClave.MasterTableView.GetColumn("Nombre").Visible = false;
                rgvClave.MasterTableView.GetColumn("Clave").Visible = false;
                rgvClave.MasterTableView.GetColumn("isNuevo").Visible = false;
                rgvClave.MasterTableView.GetColumn("id").Visible = false;
                rgvClave.MasterTableView.GetColumn("error").Visible = false;
                rgvClave.MasterTableView.GetColumn("hasrows").Visible = false;
                #endregion
    
                rgvClave.Rebind();
            }
    
            private void CambiarTabla()
            {
                switch (TablaActual)
                {
                    case (short)TablasAlmacen.TablaAlmacen:
                        Parametro.Tabla = rgvAlmacen;
                        break;
    
                    case (short)TablasAlmacen.TableUsuario:
                        Parametro.Tabla = rgvUsuarios;
                        break;
    
                    case (short)TablasAlmacen.TablaClave:
                        Parametro.Tabla = rgvClave;
                        break;
                }
            }
    
            private void Traducir()
            {
                btnGrabar.ToolTip = _metodosComunes.ObtenerTituloPorClave(563);
                btnBorrar.ToolTip = _metodosComunes.ObtenerTituloPorClave(566);
                btnExit.ToolTip = _metodosComunes.ObtenerTituloPorClave(567);
    
                rwmAlert.Localization.OK = _metodosComunes.ObtenerTituloPorClave(2480);
                rwmConfirm.Localization.OK = _metodosComunes.ObtenerTituloPorClave(2478);
                rwmConfirm.Localization.Cancel = _metodosComunes.ObtenerTituloPorClave(2479);
    
                ObtenerTituloCaptura();
                ObtenerTitulosRelacionUsuarios();
    
                stc_captura.Text = _metodosComunes.ObtenerTituloPorClave(244);
    
            }
    
            private void ObtenerTitulosRelacionUsuarios()
            {
                tab1.Tabs[1].Text = _metodosComunes.ObtenerTituloPorClave(2395);
                lbClave.Text = _metodosComunes.ObtenerTituloPorClave(12);
                lbDescEsp.Text = _metodosComunes.ObtenerTituloPorClave(13);
                lbDescripcionIngles.Text = _metodosComunes.ObtenerTituloPorClave(14);
                lbCuenta.Text = _metodosComunes.ObtenerTituloPorClave(74);
                lbCuentaAjuste.Text = _metodosComunes.ObtenerTituloPorClave(245);
    
                btnAceptar.Text = _metodosComunes.ObtenerTituloPorClave(2471);
                chckboxTodos.Text = _metodosComunes.ObtenerTituloPorClave(526);
            }
    
            private void ObtenerTituloCaptura()
            {
                stc_proceso.Text = _metodosComunes.ObtenerTituloPorClave(244);
                tab1.Tabs[0].Text = _metodosComunes.ObtenerTituloPorClave(21);
            }
    
    
            protected void tab_principal_TabClick(object sender, Telerik.Web.UI.RadTabStripEventArgs e)
            {
    
            }
    
            protected void rgvClave_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
            {
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                rgvClave.DataSource = _almacenes;
            }
    
            protected void rgvAlmacen_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
            {
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
                rgvAlmacen.DataSource = _almacenes;
            }
    
            protected void rgvClave_SelectedIndexChanged(object sender, EventArgs e)
            {
                TablaActual = (short)TablasAlmacen.TablaClave;
    
                GridDataItem item = rgvClave.SelectedItems[0] as GridDataItem;
                edtClave.Text = InnovaTools.RemoverNOBR(item["almacen"].Text);
                edtDescripcionEspanol.Text = InnovaTools.RemoverNOBR(item["DescripcionEspanol"].Text);
                edtDescripcionIngles.Text = InnovaTools.RemoverNOBR(item["DescripcionIngles"].Text);
                edtCuentaContable.Text = InnovaTools.RemoverNOBR(item["cuenta"].Text);
                edtCuentaAjuste.Text = InnovaTools.RemoverNOBR(item["CuentaAjuste"].Text); 
            }
    
            protected void rgvAlmacen_SelectedIndexChanged(object sender, EventArgs e)
            {
                TablaActual = (short)TablasAlmacen.TablaAlmacen;
    
                if (EsCambioActivo())
                {
                    LanzarWarning(_metodosComunes.ObtenerTituloPorClave(217));
                    _evento = (short)EventosAlmacen.Grabar;
                    //_control = (short)EventoMantoPrefijo.SeleccionRenglon;
                }
                else {
                    GridDataItem item = rgvAlmacen.SelectedItems[0] as GridDataItem;
                    _renglonAnterior = item.DataSetIndex;
                    CargaDerechosUsuarios(InnovaTools.RemoverNOBR(item["almacen"].Text));
                }
            }
    
            protected void CargaDerechosUsuarios(string almacen)
            {
                rgvUsuarios.Rebind();
    
                List<AlmacenEntidad> almacenLista = new AlmacenBLL().FiltrarUsuarioAlmacen(almacen);
    
                foreach (GridDataItem dataItem in rgvUsuarios.Items)
                {
                    CheckBox checkbox = dataItem.FindControl("chckboxActivo") as CheckBox;
                    if (almacenLista.FindIndex(p => p.Usuario == dataItem["usuario"].Text) > -1)
                        checkbox.Checked = true;
                }
    
                chckboxTodos.Checked = almacenLista.Count == _usuarios.Count ? true : false;
            }
    
            protected void chckboxActivo_CheckedChanged(object sender, EventArgs e)
            {
                CambioActivo();
    
                int index = -1;
                foreach (GridDataItem dataItem in rgvUsuarios.Items)
                {
                    CheckBox checkbox = dataItem.FindControl("chckboxActivo") as CheckBox;
                    index = _usuarios.FindIndex(p => p.Usuario == InnovaTools.RemoverNOBR(dataItem["usuario"].Text));
                    if (index >= 0)
                    {
                        _usuarios[index].isActivo = checkbox.Checked;
                    }
                }
    
                var checkedItems = _usuarios.FindAll(p => p.isActivo);
                chckboxTodos.Checked = checkedItems.Count == _usuarios.Count ? true : false;
    
            }
    
            protected void rgvUsuarios_SelectedIndexChanged(object sender, EventArgs e)
            {
                TablaActual = (short)TablasAlmacen.TableUsuario;
            }
    
            
            protected void btnAceptar_Click(object sender, EventArgs e)
            {
                int mensaje = -1;
    
                if ((mensaje = ValidarCamposCaptura()) == -1)
                {
                    if (RegistrarAlmacen())
                    {
                        CambioActivo();
                        Session[VarSesionAlmacen.Almacen] = _almacenes;
                        //ViewState["LISTA" + Page.ClientID] = _almacenes;
                    }
                }else
                    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(40));
            }
    
            /// <summary>
            /// Devuelve true si ya existe un cambio en el proceso
            /// </summary>
            /// <returns></returns>
            private bool EsCambioActivo()
            {
                return string.IsNullOrEmpty(edtCambio.Text) ? false : true;
            }
    
            /// <summary>
            /// 
            /// </summary>
            private void CambioActivo()
            {
                edtCambio.Text = "1";
            }
    
            /// <summary>
            /// 
            /// </summary>
            private void CambioInactivo()
            {
                edtCambio.Text = string.Empty;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            private bool RegistrarAlmacen()
            {
                bool exito = true;
    
                if (_isNuevo)
                   exito= AgregarAlmacen();
                else
                   exito= ModificarAlmacen();
    
                ActualizarTablas();
                LimpiarCamposCapturaAlmacen();
    
                return exito;
            }
    
            /// <summary>
            /// Devuelve -1 si no existe el amacen tomado directametne de edtClave
            /// </summary>
            /// <returns></returns>
            private int ObtenerAlmacen()
            {
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                return _almacenes.FindIndex(p => p.Almacen.ToUpper().Trim() == edtClave.Text.ToUpper().Trim());
                //return _almacenes.FindIndex(p => p.Almacen.ToUpper().Trim() == edtClave.Text.ToUpper().Trim());
            }
    
            private bool AgregarAlmacen()
            {
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                _almacenes.Add(new AlmacenEntidad()
                {
                    Almacen= InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim()),
                    DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim()),
                    DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim()),
                    Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim()),
                    CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim()),
                    IsNuevo=true,
                    ID = string.Empty
                });
                Session[VarSesionAlmacen.Almacen] = _almacenes;
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
                return true;
            }
    
            private bool ModificarAlmacen()
            {
                int index = ObtenerAlmacen();
    
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                if (index >-1)
                {
                    _almacenes[index].Clave = InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim());
                    _almacenes[index].DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim());
                    _almacenes[index].DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim());
                    _almacenes[index].Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim());
                    _almacenes[index].CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim());
                    if (!_almacenes[index].IsNuevo)
                    {
                        _almacenes[index].IsNuevo = false;
                        _almacenes[index].ID = "MODIFICACION";
                    }
                    //_almacenes[index].Clave = InnovaTools.RemoverSimbolos(edtClave.Text.ToUpper().Trim());
                    //_almacenes[index].DescripcionEspanol = InnovaTools.RemoverSimbolos(edtDescripcionEspanol.Text.Trim());
                    //_almacenes[index].DescripcionIngles = InnovaTools.RemoverSimbolos(edtDescripcionIngles.Text.Trim());
                    //_almacenes[index].Cuenta = InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim());
                    //_almacenes[index].CuentaAjuste = InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim());
                    //if (!_almacenes[index].IsNuevo)
                    //{
                    //    _almacenes[index].IsNuevo = false;
                    //    _almacenes[index].ID = "MODIFICACION";
                    //}
                }
                Session[VarSesionAlmacen.Almacen] = _almacenes;
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
                return true;
            }
    
            private int ValidarCamposCaptura()
            {
                if (string.IsNullOrEmpty(edtClave.Text.Trim()))
                    return 40;
                if (string.IsNullOrEmpty(edtDescripcionEspanol.Text))
                    return 40;
    
                return -1;
            }
    
            public void LimpiarCamposCapturaAlmacen()
            {
                edtClave.Text = string.Empty;
                edtDescripcionEspanol.Text = string.Empty;
                edtDescripcionIngles.Text = string.Empty;
                edtCuentaContable.Text = string.Empty;
                edtCuentaAjuste.Text = string.Empty;
                _isNuevo = false;
            }
    
            public bool ValidarSimbolosCapturaAlmacen()
            {
                string cadenaSinSimbolos = InnovaTools.RemoverSimbolos(edtClave.Text.Trim());
                if (cadenaSinSimbolos != edtClave.Text.Trim())
                {
                    edtClave.Text = cadenaSinSimbolos.ToUpper();
                    return true;
                }
    
                return false;
            }
    
           
            protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
            {
                if (ExisteInformacionIngresada())
                   RegistrarAlmacen();
    
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                if (GuardarCambios())
                {
                    CambioInactivo();
                    InicializarListas();
                    LanzarAlerta(_metodosComunes.ObtenerTituloPorClave(1));
                }
                Session[VarSesionAlmacen.Almacen] = _almacenes;
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
            }
    
            private bool GuardarCambios()
            {
                bool exito = true;
    
                switch(tab1.SelectedIndex){
                    case (short)TabActual.Captura:
                        if ((exito = new DerechosUsuarioBLL().ValidaDerechos(Sesion.Usuario, "LL0201")))
                        {
                            if (string.IsNullOrEmpty(new AlmacenBLL().GrabaAlmacen(_almacenes, Sesion.Usuario)))
                            {
                                LimpiarCamposCapturaAlmacen();
                                ActualizarTablas();
                            }
                            else
                                exito = false;
                        }
                        else {
                            LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(93));
                            exito = false;
                        }
                        break;
                    case (short)TabActual.RelacionUsuario:
    
                        if ((exito = new DerechosUsuarioBLL().ValidaDerechos(Sesion.Usuario, "LL0201")))
                        {
                            GrabarRelacionUsuarioAlmacen();
                        }
                        else
                        {
                            LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(93));
                            exito = false;
                        }
                        break;
                }
    
                return exito;
            }
    
            private void GrabarRelacionUsuarioAlmacen()
            {
                string almacen = string.Empty;
                List<UsuarioEntidad> listaUsuarios = _usuarios.FindAll(p=>p.isActivo);
                
                foreach (GridDataItem dataItem in rgvAlmacen.Items)
                {
                    if (dataItem.Selected)
                    {
                        almacen = dataItem["almacen"].Text == "&nbsp;" ? "" : dataItem["almacen"].Text;
                        break;
                    }
                }
                
                
                new AlmacenBLL().GrabaDerechosUsuariosAlmacen(listaUsuarios, almacen, Sesion.Usuario);
            }
    
            
            public bool BuscarCoincidenciaAlmacenUsuario(string almacen, string usuario)
            {
                //tap 2
                //almacenBll = new AlmacenBLL();
                AlmacenEntidad resultadoBusqueda = new AlmacenEntidad();
    
                List<AlmacenEntidad> almacenLista = new List<AlmacenEntidad>();
    
                almacenLista = new AlmacenBLL().FiltrarUsuarioAlmacen(almacen);
    
                resultadoBusqueda = almacenLista.Find(
                   delegate(AlmacenEntidad item)
                   {
    
                       return item.Usuario == usuario;
                   }
                   );
                if (resultadoBusqueda != null)
                {
                    return true;  //se encuentra en el grid
                }
                else
                {
                    return false; //no se encuentra en el grid
                }
    
            }
    
      
            protected void chckboxTodos_CheckedChanged(object sender, EventArgs e)
            {
                if (chckboxTodos.Checked)
                    foreach (GridDataItem dataItem in rgvUsuarios.Items)
                    {
                        CheckBox checkbox = dataItem.FindControl("chckboxActivo") as CheckBox;
                        checkbox.Checked = true;
                        _usuarios[dataItem.ItemIndex].isActivo = checkbox.Checked;
                    }
                else
                    foreach (GridDataItem dataItem in rgvUsuarios.Items)
                    {
                        CheckBox checkbox = dataItem.FindControl("chckboxActivo") as CheckBox;
                        checkbox.Checked = false;
                        _usuarios[dataItem.ItemIndex].isActivo = checkbox.Checked;
                    }
    
                CambioActivo();
            }
    
            public int ExisteEnDocumento(string almacen)
            {
               if (_metodosComunes.ExisteLlaveForanea("recibo_mov", "almacen", almacen))
                    return 252;
                if (_metodosComunes.ExisteLlaveForanea("entradamov", "almacen", almacen))
                    return 5;
                if (_metodosComunes.ExisteLlaveForanea("salidas_mov", "almacen", almacen))
                    return 4;
                if (_metodosComunes.ExisteLlaveForanea("tbfact_mov", "almacen", almacen))
                    return 880;
    
                return -1;
            }
    
            protected void btnBorrar_Click(object sender, ImageClickEventArgs e)
            {
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                BorrarRegistro();
                ActualizarTablas();
                Session[VarSesionAlmacen.Almacen] = _almacenes;
    
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
            }
    
            private void ActualizarTablas()
            {
                rgvClave.Rebind();
                rgvAlmacen.Rebind();
            }
    
            private bool BorrarRegistro()
            {
                bool exito = true;
                int index = -1;
    
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                //if (ViewState["LISTA" + Page.ClientID] != null)
                //    _almacenes = (List<AlmacenEntidad>)ViewState["LISTA" + Page.ClientID];
                //else
                //    _almacenes = new List<AlmacenEntidad>();
    
                switch (tab1.SelectedIndex)
                {
                    case (short)TabActual.Captura:
                        if ((exito = new DerechosUsuarioBLL().ValidaDerechos(Sesion.Usuario, "LL0202")))
                        {
                            int mensaje = ExisteEnDocumento(edtClave.Text);
    
                            if (mensaje == -1)
                            {
                                if ((index=ObtenerAlmacen()) > -1) //validar en la lista guardar cambios
                                {
                                    if (!_almacenes[index].IsNuevo)
                                        exito = new AlmacenBLL().EliminarAlmacen(edtClave.Text, Sesion.Usuario);
    
                                    if (exito)
                                    {
                                        _almacenes.RemoveAll(p => p.Almacen.ToUpper().Trim() == edtClave.Text.ToUpper().Trim());
                                        LimpiarCamposCapturaAlmacen();
                                    }
                                }
                                else
                                {
                                    exito = false;
                                    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(1));
                                }
    
                            }
                            else
                            {
                                string mensajeAlerta = _metodosComunes.ObtenerMensajeErrorPorClave(82) + " " + _metodosComunes.ObtenerTituloPorClave(mensaje);
                                exito = false;
                                LanzarAlerta(mensajeAlerta);
                            }
                        }
                        else
                        {
                            LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(93));
                            exito = false;
                        }
    
                        if(exito)
                            LanzarAlerta(_metodosComunes.ObtenerTituloPorClave(1));
                        break;
                }
                Session[VarSesionAlmacen.Almacen] = _almacenes;
                //ViewState["LISTA" + Page.ClientID] = _almacenes;
                return exito;
            }
    
    
            void LanzarAlerta(string mensaje)
            {
                rwmAlert.RadAlert(mensaje, 330, 100, "", "alertCallBackFn");
            }
    
            private void LanzarWarning(string mensaje)
            {
                rwmConfirm.RadConfirm(mensaje, "confirmCallBackFn", 330, 100, null, "");
            }
    
            protected void rgvUsuarios_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
            {
                rgvUsuarios.DataSource = _usuarios;
            }
    
            protected void btnCuentaContableCat_Click(object sender, EventArgs e)
            {
                edtParametro.Text = "0";
                LanzarCatalogo();
                
            }
    
            private void LanzarCatalogo()
            {
                CatalogoEntidad catalogoE = new CatalogoEntidad();
                catalogoE.Columnas = "cuenta_ex as CuentaExterna,*";
                catalogoE.Tabla = "cuenta";
                catalogoE.ColumnaPrincipal = "CuentaExterna";
                catalogoE.ColumnasInvisibles = "cuenta_ex, cuenta";
                catalogoE.Condicion = "inactivo not in ('1') and (anio_inactivo>='2013' or anio_inactivo='0')";
                Parametro.catalogoE = catalogoE;
                rwCatalogo.NavigateUrl = "../Catalogos/Catalogo.aspx";
                string script = "function f(){$find(\"" + rwCatalogo.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);
            }
    
            protected void edtCuentaContable_TextChanged(object sender, EventArgs e)
            {
                bool exito = true;
    
                if (ExisteCuenta())
                {
                    if (!new CuentasBLL().EsCuentaInactivaPorCuentaExterna(InnovaTools.RemoverSimbolos(edtCuentaContable.Text.Trim()), Sesion.Separador, DateTime.Now.Year))
                    {
                        //cuenta valida
                    }
                    else
                    {
                        exito = false;
                        edtCuentaContable.Text = edtValAnt.Text;
                        LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(293));
                        
                    }
                }
                else
                {
                    exito = false;
                    edtCuentaContable.Text = edtValAnt.Text;
                    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(2));
                    
                }
            }
    
            private bool ExisteCuenta()
            {
                if (!new CuentasBLL().ValidaCuenta(edtCuentaContable.Text.Trim(), Sesion.Separador))
                {
                   // edtCuentaContable.Focus();
                    return false;
                }
                return true;
            }
            private bool ExisteCuentaAjuste()
            {
                if (!new CuentasBLL().ValidaCuenta(edtCuentaAjuste.Text.Trim(), Sesion.Separador))
                {
                    //edtCuentaAjuste.Focus();
                    return false;
                }
                return true;
            }
    
            protected void btnCuentaAjuste_Click(object sender, EventArgs e)
            {
                edtParametro.Text = "1";
                LanzarCatalogo();
            }
    
            protected void edtCuentaAjuste_TextChanged(object sender, EventArgs e)
            {
                bool exito = true;
    
                if (ExisteCuentaAjuste())
                {
                    if (!new CuentasBLL().EsCuentaInactivaPorCuentaExterna(InnovaTools.RemoverSimbolos(edtCuentaAjuste.Text.Trim()), Sesion.Separador, DateTime.Now.Year))
                    {
                        //cuenta valida
                    }
                    else
                    {
                        exito = false;
                        LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(293));
                        edtCuentaAjuste.Text = edtValAnt.Text;
                    }
                }
                else
                {
                    exito = false;
                    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(2));
                    edtCuentaAjuste.Text = edtValAnt.Text;
                }
    
            }
    
            protected void btnExit_Click(object sender, ImageClickEventArgs e)
            {
                if (!EsCambioActivo())
                    Salir();
                else {
                    LanzarWarning(_metodosComunes.ObtenerTituloPorClave(217));
                    _evento = (short)EventosAlmacen.Salir;
                }
            }
    
            private void Salir()
            {
                Response.Write(Parametro.ScriptPaginaBlanco);
            }
    
            protected void edtClave_TextChanged(object sender, EventArgs e)
            {
                int index = -1;
    
                if (ValidarSimbolosCapturaAlmacen())
                    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(698));
    
                if (Session[VarSesionAlmacen.Almacen] == null)
                    Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
                else
                    _almacenes = (List<AlmacenEntidad>)Session[VarSesionAlmacen.Almacen];
    
                if ((index = ObtenerAlmacen()) > -1)
                {
                    //edtDescripcionEspanol.Text = SesionAlmacen.Almacen[index].DescripcionEspanol;
                    //edtDescripcionIngles.Text  = SesionAlmacen.Almacen[index].DescripcionIngles;
                    //edtCuentaContable.Text     = SesionAlmacen.Almacen[index].Cuenta;
                    //edtCuentaAjuste.Text       = SesionAlmacen.Almacen[index].CuentaAjuste;
                    edtDescripcionEspanol.Text = _almacenes[index].DescripcionEspanol;
                    edtDescripcionIngles.Text = _almacenes[index].DescripcionIngles;
                    edtCuentaContable.Text = _almacenes[index].Cuenta;
                    edtCuentaAjuste.Text = _almacenes[index].CuentaAjuste;
                    _isNuevo = false;
                }
                else
                {
                    _isNuevo = true;
                    edtDescripcionEspanol.Text = string.Empty;
                    edtDescripcionIngles.Text = string.Empty;
                    edtCuentaContable.Text = string.Empty;
                    edtCuentaAjuste.Text = string.Empty;
                }            
            }
    
            protected void btnYes_Click(object sender, ImageClickEventArgs e)
            {
                bool exito = true;
    
                switch (_evento)
                {
                    case (short)EventosAlmacen.Eliminar:
                        //PrefijosEntidad prefijo = _prefijoTabla.Find(p => p.Prefijo == _clave);
                        ////int index = _prefijoTabla.FindIndex(p => p.Prefijo == _clave);
                        //if (prefijo != null)
                        ////if (index > -1)
                        //{
                        //    if (!ExisteEnDocumento())
                        //    {
                        //        if (!prefijo.IsNuevo)
                        //            exito = new PrefijosBLL().EliminarPrefijo(edtPrefijo.Text, Sesion.Usuario);
    
                        //        if (exito)
                        //            _prefijoTabla.RemoveAll(p => p.Prefijo == _clave);
                        //        //_prefijoTabla.RemoveAt(index);
                        //    }
                        //    else
                        //    {
                        //        LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(373));
                        //        exito = false;
                        //    }
    
                        //}
                        //else
                        //    LanzarAlerta(_metodosComunes.ObtenerMensajeErrorPorClave(374));
                        break;
                    case (short)EventosAlmacen.Grabar:
                        exito = GuardarCambios();
    
                        break;
                    case (short)EventosAlmacen.Salir:
    
                        if ((exito=GrabarCambios()))
                            Salir();
                        
                        break;
                }
    
                if (exito)
                {
                    LimpiarCamposCapturaAlmacen();
                    ActualizarTablas();
                    LanzarAlerta(_metodosComunes.ObtenerTituloPorClave(1));
                    CambioInactivo();
                }
            }
    
            private bool GrabarCambios()
            {
                bool exito = true;
    
                if (ExisteInformacionIngresada())
                    exito = RegistrarAlmacen();
    
                if (exito)
                    if ((exito=GuardarCambios()))
                    {
                        LanzarAlerta(_metodosComunes.ObtenerTituloPorClave(1));
                        edtCambio.Text = string.Empty;
                        edtValAnt.Text = string.Empty;
                    }
                
                return exito;
            }
    
            private bool ExisteInformacionIngresada()
            {
                bool existe = false;
                string cadena = edtClave.Text.Trim();
                if (!string.IsNullOrEmpty(cadena))
                    existe = true;
    
                return existe;
            }
    
            protected void btnNo_Click(object sender, ImageClickEventArgs e)
            {
                switch (_evento)
                {
                    case (short)EventosAlmacen.Salir:
                        Salir();
                    break;
    
                    case (short)EventosAlmacen.Grabar:
                        
                        break;
                }
                CambioInactivo();
    
                //ActualizarListas();
            }
    
            protected void btnCancel_Click1(object sender, ImageClickEventArgs e)
            {
                switch (_evento)
                {
                    case (short)EventosAlmacen.Grabar:
                        rgvAlmacen.MasterTableView.Items[_renglonAnterior].Selected = true;
                        break;
                }
            }
    
        }
    
    
        public enum EventosAlmacen
        {
            Grabar,
            Salir,
            Eliminar
        }
        public enum TablasAlmacen
        {
            TablaClave,
            GridRelacionUsuarios,
            TablaAlmacen,
            TableUsuario
        }
    
        public enum TabActual { 
            Captura,
            RelacionUsuario
        }
    }

    Envio la asignacion a la sesion:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    
    namespace Almacen.Entidades
    {
        public class SesionAlmacen
        {
            public List<AlmacenEntidad> Almacen
            {
                get
                {
                    if (HttpContext.Current.Session[VarSesionAlmacen.Almacen] == null)
                        HttpContext.Current.Session[VarSesionAlmacen.Almacen] = new List<AlmacenEntidad>();
    
                    return (List<AlmacenEntidad>)HttpContext.Current.Session[VarSesionAlmacen.Almacen];
                }
                set { HttpContext.Current.Session[VarSesionAlmacen.Almacen] = value; }
            }//Usuario loggeado en el sistema
        }
    
        public class VarSesionAlmacen {
            public static string Almacen = "__AlmacenLista__";
        }
    }
    

    lunes, 23 de septiembre de 2013 17:35
  • esto a qué corresponde?? Donde lo tienes definido??

    Sesion.Usuario

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 18:11
    Moderador
  • En esa variable de sesion guardamos el Usuario del Loguin, es la clave de usuario de mi aplicacion, como nuestro sistema tiene bitacora de cambios, la generamos como variable de sesion para no perder el usuario que esta haciendo la modificacion a la información para registrarlo en la bitacora de cambios.


    La declaramos asi (sesion es el nombre de mi clase que contiene el: "public static string usuaio":

    
    

    namespace Innova.Clases
    {
        public class Sesion
        {
            public static string IVA{
                get
                {
                    if (System.Web.HttpContext.Current.Session["__IVA__"] == null)
                        System.Web.HttpContext.Current.Session["__IVA__"] = string.Empty;
                    return System.Web.HttpContext.Current.Session["__IVA__"].ToString();
                }
                set { System.Web.HttpContext.Current.Session["__IVA__"] = value; }
            }


            public static string Usuario
            {
                get
                {
                    if (System.Web.HttpContext.Current.Session["__Usuario__"] == null)
                        System.Web.HttpContext.Current.Session["__Usuario__"] = string.Empty;
                    return System.Web.HttpContext.Current.Session["__Usuario__"].ToString();
                }
                set { System.Web.HttpContext.Current.Session["__Usuario__"] = value; }
            }//Usuario loggeado en el sistema

    }

    lunes, 23 de septiembre de 2013 18:16
  • private static MetodosComunes _metodosComunes= null;
            private static int _renglonAnterior = 0;
            private static short _evento = -1;
            private static short TablaActual { get; set; }
            private List<AlmacenEntidad> _almacenes = null;
            private static List<UsuarioEntidad> _usuarios { get; set; }
            private static bool _isNuevo = false;

    Estas variables estáticas debes eliminarlas seguramente el problema se origina aqui. Por ejemplo _isNuevo Varios usuario pueden estar machando su contenido y si la usas para gestionar si se debe agregar un registro nuevo o no puede fallarte. Espero haberme explicado algo :)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta ArmandoInnova lunes, 23 de septiembre de 2013 20:32
    lunes, 23 de septiembre de 2013 18:25
    Moderador
  • Mas que un tema de ViewState, me parece tema de las variables STATIC, al tener estas variables STATIC significa que su valor no cambia por cada pagina instanciada, el valor es la misma para todas las paginas instanciadas. Trata de evitar variables STATIC a menos que utilizes patrones de diseño.

    Saludos.


    Oscar Angel Ramírez Figueroa
    Ingeniero en Computación

    lunes, 23 de septiembre de 2013 18:25
  •  if (_isNuevo)
                   exito= AgregarAlmacen();
    else
                   exito= ModificarAlmacen();
    

    Aquí es donde te dará problemas esa variable estatica



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 18:26
    Moderador
  • pero en las pruebas que estamos realizando estamos estricamente capturando almacenes nuevos, por tanto siempre entrara a la funcion de agrega almacen y dicha funcion. el btc_aceptar que ejecutamos solo guarda datos en la lista no en base de datos, por tanto si yo agregó N cantidad de registros a mi lista solo se estan cargados en memoria en mi lista.

    El problema esta asi, solo tenemos el problema cuando los 2 usuarios presionan el boton aceptar simultanemente, es como si ambos chocaran en el lado del server y solo pudiera atenden a uno, por tanto solo a uno de los usuarios le agregó en nuevo egistro a memoria en la lista.

    Si el usuario A presiona el aceptar y el usuario B se espera un segundo o menos y presiona aceptar, ambos registros se cargan correctamente a la lista (claro esta que la informacion no se mezcla, el usuario A ve en un Grid su nuevo registro y el usuario B ve el suyo), pero repito cuando es simultaneo es cuando curiosamente solo funciona para uno.   Es el mismo caso cuanod estamos mas de dos claro, hecheo la prueba con hasta 4 usuarios y solo como al que GANO EL RECURSO se hace caso, a los otros tres a pesar de que se ve que la pagina parpadea de que se ejecuto algun evento al segundo sigueinte sigues viendo la misma cantidad de registros, como si el aceptar no hubiera funcionado mas sin embargo sabemos que si ejecuto el codigo por que ciertos campos se limpian y si, efectivamente se limpian.

    Antes que estabamos utilizando las variables Static, lo que sucedia era que la informacion si se mesclabaentre usuario, si cada usuario insertaba un registro, despues dele evento magicamente le aparecian los 4 registros a cada uno (ni tn magico no jeje, soloeran las variables Static).

    No se si esto que comento sirva de algo para comprender que puede estar pasando.


    lunes, 23 de septiembre de 2013 18:38
  • Si el usuario A inserta un registro _IsNuevo es True verdad? Pasa el método y se inicializa a False,  El usuario B intenta insertar _IsNuevo es false con lo que no se inserta si no que modifica.... Espero comprendas el problema de la variable estatica. 

    Cuando ejecutan casi a la vez la inserción  puede que _IsNuevo no se comporte como deberia


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 18:44
    Moderador
  • Por cierto... te has explicado muy bien. Ha quedado muy claro lo que está pasando y mi recomendación es que te deshagas de esas static. Has esas variables como te comenté de propiedades usando el viewstate y estoy casi seguro que se soluciona tu problema

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 18:47
    Moderador
  • si entendi, de hecho ahorita ya estamos subiendo nuevamente la version al server para realizar la prueba con lo que nos comentaste, para no entrar en detalle simplemente deje el code de la funcion agregar.

    Te infor en unos minutos

    lunes, 23 de septiembre de 2013 18:50
  • Listo Sergio, jaja un if sencillo y nos estaba complicando la vida .ya con eso realizaremos dichos ajustes y vamos a regresar a ViewState, ovio ese era el problema, no los View State.

    Muchas gracias por tu apoyo..

    lunes, 23 de septiembre de 2013 19:03
  • Perfecto!!

    Me alegro mucho


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de septiembre de 2013 19:04
    Moderador