كيف يمكنك تعديل كائن ملزم يدويًا بمشاهدة FormView؟

StackOverflow https://stackoverflow.com/questions/1214122

  •  06-07-2019
  •  | 
  •  

سؤال

أنا أستخدم FormView مع ObjectDataSource. عند النقر فوق الزر "حفظ" ، أود تعديل الكائن المرتبط بالبيانات قبل تعيينه على طريقة تحديث ObjectDataSources.

لقد جربت حدث تحديث FormView بالإضافة إلى حدث تحديث مصدر بيانات الكائن ، لكن لا يمكنني معرفة كيفية الوصول إلى كائن Bound Counter. FormView.Dataitem خالية في تلك الأحداث.

أو بعبارة أخرى ، أود اعتراض Dataitem وتعديله قبل تمريره إلى ObjectDataSource UpdateMethod.

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

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

المحلول

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

نصائح أخرى

أعلم أن هذا سؤال قديم ، لكن كان لدي نفس المشكلة ، ووجدت الإجابة التي أعتقد أن بوب يبحث عنها.

الحل هو استخدام حدث تحديث ObjectDataSource على نموذج الويب. يتضمن حدث التحديث كائن ObjectDataSourCemeThodeventArgs كمعلمة. تتضمن فئة ObjectDataSourCemeThodeventArgs propery اسم "inpopharameters" ، ويمكنك استخدام ذلك للوصول إلى كائن البيانات وتعديل المحتويات قبل حدوث التحديث. تحتاج إلى تحويل كائن inpopharameters إلى نوع من طلبات orderdictionary أولاً (مساحة الاسم الكاملة هي system.collections.specialized.ordereddictionary)

يبدو شيئًا كهذا:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

Dataitem متاح فقط عند ربط البيانات.
بعد ذلك ، لا بد من وجود عناصر تحكم داخل FormView الخاص بك.
استخدم myFormView.findControl (معرف السلسلة) للوصول إلى القيم المرتبطة قبل التحديث.

إذا لم ينجح ربط البيانات ثنائية الاتجاه من أجلك ، فيجب عليك تثبيت كائنك ، أو ملء الخصائص يدويًا ثم تحديث التغييرات أو ارتكابها.

نظرًا لأنك في الحدث التحديث ، فإن FormView.dataitem فارغ لأن ربط البيانات لم يحدث بعد. يجب عليك الوصول إلى البيانات عبر عنصر تحكم النموذج الذي يحتوي على بياناتك المثيرة للاهتمام.

حاول تطبيق تعديل البيانات الخاص بك أثناء حدث OnDataBinding للتحكم ذي الصلة.

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