0

ショップ内のすべてのアイテムがリストされている「ショップ」ページがあります。私は、いくつの結果をprに決定するためのソート機能を持っています。見たいページ。

私もページャーを持っています。ページャーは、2 つのボタン (前ページ ボタンと次ページ ボタン) と、ページ番号を表示するテキスト ボックスで構成されています。ページャーは、ページの上部と下部の両方にあります。

テキスト ボックス内のテキストを変更すると、次のコードが実行されます。

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

これによりページロードが発生し、テキストボックスから数値を取得して整数に解析し、S​​QL リクエストを動的に作成するために使用できます。これは完璧に機能します。

これが私の問題です。「次へ」ボタンまたは「前へ」ボタンをクリックすると、テキストボックス内のテキストが変更されますが、テキストボックスから番号を取得すると、ボタンがクリックされる前のテキストボックスの値が取得されます。正しいページ番号を取得するにはどうすればよいですか?

ここに私のクリックコードがあります:

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 は 2 番目の整数を表します。つまり、LIMIT 100, 500 は 500 から 600 までの結果を示しています。 (ページ 5、ページあたり 100 の結果)

4

2 に答える 2

1

Page_Load イベントは、ボタンの Click イベントの前に発生します。Click イベントがその値を更新する前に、テキスト ボックス (tbPageNumberTop.Text) から取得した値に基づいて、Page_Load イベントで SQL 呼び出し (intStartPosition および strResultsPrPage) で使用されるパラメーターを設定しているようです。

Click イベントが現在のページの値を更新する機会を得るまで、その SQL 呼び出しを遅らせる方法を見つける必要があります。

明確にするために、ページのライフサイクルを確認することをお勧めします。

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 に答える