سؤال

كيف يمكنني منع تغيير عنصر BindingSource الحالي؟(لا يوجد حدث متغير مع وسيطة الإلغاء ...)

هذا هو السيناريو:

  • لدي dataGridView، ومربعات النص في نفس النموذج.
  • أنا أستخدم مربعات النص لتغيير القيم في مصدر البيانات (مع ربط البيانات القياسي)
  • تتم كتابة الروابط يدويًا (بعد النقر على زر الحفظ)

  • عندما يحدد المستخدم صفًا آخر باستخدام DataGridView، يتم تغيير خاصية BindingSource.Current، ويتم تحديث مربعات النص بقيم من الصف المحدد.يتم فقدان التغييرات التي أدخلها المستخدم.

هل هناك أي طريقة لمنع هذه المشكلة؟

هل يمكنني منع تغيير خاصية BindingSource.Current؟

هل هناك أي خيار أفضل لمنع هذا السلوك؟

(تعطيل dataGridView ليس خيارًا للأسف)

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

المحلول

يبدو أنك لا تريد عدم التغيير bindingSource.Current, ولكنك تريد حفظ محتويات مربعات النص قبل تغيير الصف الحالي؟إذا كنت قد ربطت أ مجموعة إلى bindingSource, ، ألا تشير مربعات النص إلى خصائص العنصر الحالي في تلك المجموعة؟

لست متأكدًا حقًا مما تحاول القيام به، لكن لقطة في الظلام قد تكون بمثابة ربط الأمر نفسه DataSource إلى اثنين مختلفين BindingSource الكائنات، شيء من هذا القبيل:

gridBindingSource.DataSource = theDataSource;
textBoxBindingSource.DataSource = theDataSource;
myDataGrid.DataSource = gridBindingSource;
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));

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


الوقت المتوقع للوصول:إذا كنت تريد حفظ محتويات مربع النص في الصف الحالي، فاتصل ValidateChildren () على الحاوية قبل bindingSource.Current تغييرات الملكية.

نصائح أخرى

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

MyDataGrid.Enabled = false;

الاستمرار في التعديل..

ثم في الحفظ، إذا كان كل شيء على ما يرام،

MyDataGrid.Enabled = true;

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