Pregunta

Tengo una página 'tienda', donde todos los artículos de la tienda está en la lista. Tengo un sortingfunction, para decidir cuántos resultados pr. Página Quiero ver.

También tengo un buscapersonas. El localizador está construido con dos botones (A previa- y Next-pagebutton), y un cuadro de texto que muestra la PageNumber. El localizador es tanto en la parte superior e inferior de la página.

Cuando cambio el texto en el cuadro de texto, los incendios siguiente código:

protected void tbPageNumberTop_TextChanged(object sender, EventArgs e)
    {
        tbPageNumberBottom.Text = tbPageNumberTop.Text;
        updpanMain.Update();
    }

Esto provoca una pageload, donde consigo el número del cuadro de texto y analizar en un número entero, que puedo utilizar para crear dinámicamente una petición SQL. Esto funciona a la perfección.

Esta es mi problema. Cuando hago clic en el botón "Siguiente" o el botón "Anterior", el texto de los cambios de cuadro de texto, pero cuando llegue el número del cuadro de texto, aparece el valor del cuadro de texto como lo era antes se ha hecho clic en el botón. ¿Cómo se obtiene el número de página correcto?

Aquí está mi Click-código:

protected void btnNextPage_Click(object sender, EventArgs e)
    {
        int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        PageNumber += 1;
        tbPageNumberTop.Text = PageNumber.ToString();
        tbPageNumberBottom.Text = PageNumber.ToString();
        updpanMain.Update();
    }
    protected void btnPrevPage_Click(object sender, EventArgs e)
    {
        int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        PageNumber -= 1;
        tbPageNumberTop.Text = PageNumber.ToString();
        tbPageNumberBottom.Text = PageNumber.ToString();
        updpanMain.Update();
    }

Y esto es lo que sucede en Load

if (!this.IsPostBack)
        {
            intStartPosition = 0;
            intPageNumber = 1;
            tbPageNumberBottom.Text = intPageNumber.ToString();
            tbPageNumberTop.Text = intPageNumber.ToString();
        }

        if (tbPageNumberTop.Text != "1" || tbPageNumberBottom.Text != "1")
        {
            intPageNumber = Convert.ToInt32(tbPageNumberTop.Text);
        }
        else
        {
            intPageNumber = 1;
        }


        intStartPosition = (intPageNumber * intItemsPrPage) - intItemsPrPage;
        strResultsPrPage = intItemsPrPage.ToString();

intStartPosition representa el primer número entero LIMIT en mi cadena SQL, y strResultsPrPage representa el segundo número entero, es decir, límite de 100, 500 está mostrando resultados de 500 a 600. (Página 5, con 100 resultados por página)

¿Fue útil?

Solución

Su evento Page_Load va a fuego antes de que el evento Click del botón. Parece que se está configurando los parámetros utilizados en la llamada SQL (intStartPosition y strResultsPrPage) en el evento Page_Load en base al valor recuperado del cuadro de texto (tbPageNumberTop.Text) antes de que el evento Click ha tenido la oportunidad de actualizar ese valor.

Usted tendrá que encontrar una manera de retrasar esa llamada SQL hasta después de los eventos Click haber tenido la oportunidad de actualizar el valor de la página actual.

Es posible que desee echar un vistazo a la página Ciclo de Vida de aclaración:

http://msdn.microsoft.com/en-us/library /ms178472.aspx

Otros consejos

Problema resuelto.

Lo que hice fue lo siguiente:

En el código de Page_Load, me escribió lo siguiente:

protected void Page_Load(object sender, EventArgs e)
    {
        Page.LoadComplete += new EventHandler(Page_LoadComplete);
    }

Y luego pegar el antiguo bloque de código Page_Load el interior del nuevo manejador de sucesos, en el que funciona como un encanto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top