سؤال

أنا ملزم بالقائمة المنسدلة.يعمل على التحميل الأولي.وفي عمليات التحميل اللاحقة (عمليات إعادة النشر)، لا يتم تحديث العناصر الموجودة في القائمة المنسدلة.

using (DataView dv = dtProductGroup.DefaultView)
{
        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
}

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

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

يحرر

لقد اكتشفت المشكلة.تم تضمين القائمة المنسدلة في لوحة التحديث الشرطي.ببساطة استدعاء "updatePanel.update () ؛" حل المشكلة.

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

المحلول

عند إعادة النشر، تتم إعادة تطبيق حالة العرض + قلت أنك تحاول تحميل القيم مرة أخرى.أقترح السماح لحالة العرض بتحمل كل الثقل عند إعادة النشر.قم بتحميل القيم فقط عند الضغط على الصفحة لأول مرة عن طريق إضافة if (!IsPostBack) مثل ذلك

using (DataView dv = dtProductGroup.DefaultView)
{
   if (! IsPostBack) {

        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
   }
}

يحرر:كما يضمن بناء الجملة الخاص بك التخلص من كائن DataView المشار إليه بواسطة dv عند خروج كتلة التعليمات البرمجية.تخميني الثاني هو أن هذا يسبب تأثيرًا جانبيًا يسبب المشكلة.

using (DataView dv = dtProductGroup.DefaultView)
{

بدلاً من ذلك، اترك الاستخدام واكتب إعلانًا عاديًا مثل ما يلي (سيتم التخلص من DataView مع كل شيء آخر عند الانتهاء من عرض الصفحة، لذا ليس هناك أي حاجة للقيام بذلك بنفسك).

DataView dv = dtProductGroup.DefaultView;

انظر وثائق MSDN حول "الاستخدام" وIDisposable للحصول على معلومات مفصلة.

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