سؤال

لدي صفحة "متجر" ، حيث يتم سرد جميع العناصر الموجودة في المتجر. لديّ وظيفة فرز ، لتحديد عدد النتائج. الصفحة أريد أن أرى.

لدي أيضا نداء. تم تصميم Pager مع زريين (Pagebutton السابق والقادم) ، ومربع نص الذي يوضح الوصلات. النداء في كل من الجزء العلوي ، وأسفل الصفحة.

عندما أقوم بتغيير النص في مربع النص ، يطلق الكود التالي:

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

يؤدي هذا إلى تحميل pageLoad ، حيث أحصل على الرقم من مربع النص ، وأحلله إلى عدد صحيح ، والذي يمكنني استخدامه لإنشاء طلب 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();

يمثل INTSTARTPOSSION أول عدد صحيح الحد الأقصى في سلسلة SQL الخاصة بي ، ويمثل StrresultSprpage العدد الثاني الثاني ، IE LIME 100 ، 500 يعرض نتائج من 500 إلى 600. (الصفحة 5 ، مع 100 نتيجة لكل صفحة)

هل كانت مفيدة؟

المحلول

سيتم إطلاق حدث Page_load الخاص بك قبل حدث النقر فوق الزر الخاص بك. يبدو أنك تقوم بتعيين المعلمات المستخدمة في مكالمة SQL الخاصة بك (intstartposition و strresultsprpage) في حدث page_load استنادًا إلى القيمة التي تم استرجاعها من مربع النص (tbpagenumbertop.text) قبل أن يحصل حدث النقر على فرصة لتحديث هذه القيمة.

ستحتاج إلى إيجاد طريقة لتأخير استدعاء SQL حتى تتمتع أحداث النقر بعد أن أتيحت لها فرصة لتحديث قيمة الصفحة الحالية.

قد ترغب في إلقاء نظرة على دورة حياة الصفحة للتوضيح:

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

نصائح أخرى

تم حل المشكلة.

ما فعلته هو ما يلي:

في رمز page_load ، كتبت ما يلي:

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

ثم لصق Page_Load CodeBlock داخل New EventHandler ، يعمل مثل السحر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top