سؤال

لدي مشكلة مع التحكم في جهاز النداء الذي أقوم بإنشائه.الكود الخاص بي هو التالي

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}

يضيف AddPagerControls مجموعة من LinkButtons التي تستخدم نفس معالج الأحداث:

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

ما يحدث الآن هو أنه عندما أقوم بإضافة LinkButton "التالي"، فإنه يتم تعيين CommandArgument الخاص به بشكل صحيح باستخدام:

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);

أي.إذا كانت الصفحة الحالية هي 2، فإن CommandArgument للزر "التالي" سيكون 3 عند تصحيح التعليمات البرمجية.ومع ذلك، عندما يتم عرض الصفحة والنقر فوق الزر التالي، فإنها ستعمل مرة واحدة (الانتقال من الصفحة 1 إلى 2) ولكن بعد ذلك ستكون دائمًا 2، على الرغم من أنه تم ضبطها في الكود على 3.لذلك يجب أن يحدث شيء ما عندما يتم تقديم عنصر التحكم.

أنا في حيرة قليلاً هنا.لقد حاولت تغيير الاستدعاء إلى AddPagerControls في CreateChildControls إلى if(!Page.IsPostBack){AddPagerControls();} ولكن بعد ذلك لن يتم إطلاق معالج الحدث على الإطلاق.

يحرر: ملاحظة: أقوم بإجراء pnl.Controls.Clear() عندما يتم استدعاء الأسلوب AddPagerControls من معالج الأحداث، وإلا فسيتم إضافة LinkButtons مرتين.

يحرر:P.S. أقوم بإعادة حساب أزرار الارتباط التي يجب إضافتها في كل مرة لأنني أحتاج إلى عرض 5 روابط فقط في حالة وجود أكثر من الصفحات، على سبيل المثال.

<< < 2 3 4 5 6 7 > >>

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

المحلول

ما لا أفهمه هو سبب قيامك بتجديد عناصر التحكم في الترحيل طوال الوقت.ألا يمكنك فقط استخدام أسلوب حيث يكون لديك أزرار الارتباط "السابق" و"التالي" وتحتفظ في حالة عرض عنصر التحكم الخاص بك (كخصائص منفصلة) بالصفحة الحالية التي يتم عرضها وكمية العناصر (على سبيل المثال؟حجم الصفحة)؟

في معالج الحدث، عليك القيام بالإجراءات المناسبة لأنك تعلم أن صفحتك الحالية ستكون شيئًا مثل currentPageIndex+1 أو شيئا من هذا القبيل.إعادة إنشاء الزرين السابق/التالي طوال الوقت، خاصة في الزر li_Click المعالج ليس أسلوبًا جيدًا من وجهة نظري وهذا أيضًا ما قد يسبب مشاكلك.

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