0

我有一个“商店”页面,其中列出了商店中的所有商品。我有一个排序功能,可以决定公关有多少结果。我想看的页面。

我也有寻呼机。寻呼机由两个按钮(上一页和下一页按钮)和一个显示页码的文本框构成。寻呼机位于页面的顶部和底部。

当我更改文本框中的文本时,会触发以下代码:

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

这会导致页面加载,我从文本框中获取数字,并将其解析为整数,我可以使用它来动态创建 SQL 请求。这非常有效。

这是我的问题。当我单击“下一步”按钮或“上一个”按钮时,文本框中的文本会发生变化,但是当我从文本框中获取数字时,我会得到文本框的值,因为它是单击按钮之前的值。如何获得正确的页码?

这是我的点击代码:

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();
    }

这就是 page_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 代表我的 SQL 字符串中的第一个 LIMIT 整数,strResultsPrPage 代表第二个整数,即 LIMIT 100,500 表示从 500 到 600 的结果。(第 5 页,每页 100 个结果)

4

2 回答 2

1

您的 Page_Load 事件将在您的按钮的 Click 事件之前触发。看起来您正在根据在 Click 事件有机会更新该值之前从文本框 (tbPageNumberTop.Text) 检索到的值在 Page_Load 事件中设置 SQL 调用中使用的参数(intStartPosition 和 strResultsPrPage)。

您需要找到一种方法来延迟该 SQL 调用,直到您的 Click 事件有机会更新当前页面值。

您可能需要查看页面生命周期以进行澄清:

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

于 2010-09-13T20:03:56.477 回答
0

问题解决了。

我所做的是以下内容:

在 page_load 代码中,我写了以下内容:

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

然后我将旧的 page_load 代码块粘贴到新的事件处理程序中,它就像一个魅力。

于 2010-09-13T21:08:58.510 回答