none
Manejo de variables RRS feed

  • Pregunta

  • Buenas tardes, tengo el siguiente problema:

    En un DataTable, almaceno una consulta de la BD, pero el resultado lo guardo en una variable de sesion, para poder utilizarla en todo el webform (no la utilizo en otro webform), entonces al abrir otra pestaña del navegador y el mismo webform, esa variable de sesion se actualiza a los datos que carga la nueva pestaña, ¿Hay alguna manera de manejar como una variable publica en todo el webform sin necesidad que sea de sesion, o como podria manejar ese problema?

    Utilizo: VS2012, C#

    Saludos y gracias por la ayuda.

     



    Hugo Gil

    miércoles, 11 de mayo de 2016 21:46

Respuestas

  • Lo que yo le recomiendo es guardar el DataTable en el ViewState de la página.

    public class MiWebform : Page
    {
        public DataTable MiResultado
        {
            get
            {
                object val = ViewState["MiResultado"];
                if (vall == null) return null;
                return (DataTable)val;
            }
            set
            {
                ViewState["MiResultado"] = value;
            }
        }
        ...
    }

    De esta forma cada página tiene su propio resultado, totalmente independiente uno del otro.  ¿El problema?  El tamaño del DataTable.  Si tiene muchos datos, la transmisión de la página será lenta.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Hugo Gil jueves, 12 de mayo de 2016 14:39
    jueves, 12 de mayo de 2016 3:41
    Moderador
  • Si, si tengo la manera, pero por ejemplo, en el evento  PageIndexChanging del GridView, que cuando hace el cambio de pagina hay que asignarle datasource. ¿Es recomendable consultar la BD cada que cambie de pagina?

    Saludos y gracias por la ayuda.


    Hugo Gil

    Depende del caso. Ten en cuenta que si añades el DataTable al ViewState de la página toda esa información se transmitirá entre el cliente y servidor en cada PostBack.

    Por lo general esto suele implicar una mayor penalización en el rendimiento que la que representa recuperar la información a mostrar en cada página cuando el usuario cambia de página.

    Ten en cuenta que no tendrías que recuperar esta información de base de datos en cada postback, únicamente cuando el usuario cambia de página. El GridView ya mantiene la información que está mostrando (la de la página actual) en el ViewState.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta Sergio ParraModerator jueves, 12 de mayo de 2016 9:08
    • Marcado como respuesta Hugo Gil jueves, 12 de mayo de 2016 14:39
    jueves, 12 de mayo de 2016 4:43

Todas las respuestas

  • Hola,

    Puedes usar Cookies para almacenar el valor de la variable y cuando cierras sesión la eliminas.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 11 de mayo de 2016 21:54
  • Que tal gracias, una duda,

    en las cookies, también se le asigna un nombre? y si se leasigna un nombre al abrir otra pestaña con el mismo webform, no ha el mismo efecto que las variables de sesion?


    Hugo Gil

    miércoles, 11 de mayo de 2016 22:02
  • Sí, tendrías el mismo problemas.

    Normalmente cuando necesitas mantener un valor durante todo el ciclo de vida de una página lo que se suele hacer es incluir un campo oculto con e valor o añadirlo directamente al ViewState. De esta forma puedes recuperar el valor en cada postback.

    Tratándose de un DataTable no te lo recomiendo. ¿Realmente necesitas mantener todo el DataTable? ¿No puedes almacenar algún valor a partir del que puedas recuperar el resto de información de la base de datos?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 11 de mayo de 2016 22:26
  • Si, si tengo la manera, pero por ejemplo, en el evento  PageIndexChanging del GridView, que cuando hace el cambio de pagina hay que asignarle datasource. ¿Es recomendable consultar la BD cada que cambie de pagina?

    Saludos y gracias por la ayuda.


    Hugo Gil

    miércoles, 11 de mayo de 2016 22:42
  • Lo que yo le recomiendo es guardar el DataTable en el ViewState de la página.

    public class MiWebform : Page
    {
        public DataTable MiResultado
        {
            get
            {
                object val = ViewState["MiResultado"];
                if (vall == null) return null;
                return (DataTable)val;
            }
            set
            {
                ViewState["MiResultado"] = value;
            }
        }
        ...
    }

    De esta forma cada página tiene su propio resultado, totalmente independiente uno del otro.  ¿El problema?  El tamaño del DataTable.  Si tiene muchos datos, la transmisión de la página será lenta.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Hugo Gil jueves, 12 de mayo de 2016 14:39
    jueves, 12 de mayo de 2016 3:41
    Moderador
  • Si, si tengo la manera, pero por ejemplo, en el evento  PageIndexChanging del GridView, que cuando hace el cambio de pagina hay que asignarle datasource. ¿Es recomendable consultar la BD cada que cambie de pagina?

    Saludos y gracias por la ayuda.


    Hugo Gil

    Depende del caso. Ten en cuenta que si añades el DataTable al ViewState de la página toda esa información se transmitirá entre el cliente y servidor en cada PostBack.

    Por lo general esto suele implicar una mayor penalización en el rendimiento que la que representa recuperar la información a mostrar en cada página cuando el usuario cambia de página.

    Ten en cuenta que no tendrías que recuperar esta información de base de datos en cada postback, únicamente cuando el usuario cambia de página. El GridView ya mantiene la información que está mostrando (la de la página actual) en el ViewState.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta Sergio ParraModerator jueves, 12 de mayo de 2016 9:08
    • Marcado como respuesta Hugo Gil jueves, 12 de mayo de 2016 14:39
    jueves, 12 de mayo de 2016 4:43