سؤال

لدي ListView. في ListView ، لديّ DropDownbox أريد ملء صفحة CodeBehind الخاصة بي. الشيء الوحيد هو ، لا أعرف كيفية الوصول إلى هذا webControl. ما يلي لا يعمل:

DropDownList ddl = (DropDownList)lvUserOverview.Controls[0];

أعلم أن الفهرس هو 0 لأن القائمة المنسدلة هي عنصر التحكم الوحيد في ListView (أيضًا عندما أحاول الفهرس 1 أحصل على فهرس خارج النطاق).

هل يمكن لأحد أن يخبرني كيف يمكنني الوصول إلى القائمة المنسدلة؟ في PageBehind ، أريد إضافة ListItems.

رمز ASPX:

<asp:DropDownList ID="ddlRole" onload="ddlRole_Load" runat="server">
</asp:DropDownList>

CodeBehind:

protected void ddlRole_Load(object sender, EventArgs e)
{
  DropDownList ddl = (DropDownList)lvUserOverview.FindControl("ddlRole");
  if (ddl != null)
  {
      foreach (Role role in roles)
          ddl.Items.Add(new ListItem(role.Description, role.Id.ToString()));
  }
}
هل كانت مفيدة؟

المحلول

للحصول على مقبض مع القائمة المنسدلة داخل معالج الأحداث الخاص بها ، كل ما عليك فعله هو المرسل المصبوب باعتباره قائمة منسدلة.

DropDownList ddlRole = sender as DropDownList;

نصائح أخرى

إذا تم تقديم هذا في عرض قائمة ، فهناك فرصة لإنشاء إنشاءات متعددة من القائمة المنسدلة ، سيحصل كل منهم على معرف فريد ولن تتمكن من استخدام نهج Matthew.

قد ترغب في استخدام حدث ItemDatAbound للوصول إلى E.Item.FindControl ("NameOfDropDownList") والذي سيسمح لك بالتكرار في كل منسدلة تم إنشاؤها.

إذا كنت تقوم بإنشاء واحدة فقط ... لماذا هو في ListView؟

جرب هذا:

DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");

إذا كانت عناصر التحكم الخاصة بك ملزمة للبيانات ، فتأكد من محاولة الوصول إلى أحفادها بعد ربط البيانات. قد أساعد أيضًا في فحص الأشياء في تصحيح الأخطاء قبل هذا الخط.

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