منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : جزئية بسيطة في الداتاسيت اريد ان اعرف كيف تتعاملون معها
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم وتقبل الله صيامكم وقبامكم

لفت انتباهي جزئية حيرتني في التعامل معها
عندما يقوم المستخدم بالتغيير في البيانات بالوضع المنفصل تتغير ولكن لا يتم حفظها حتى ينقر زر حفظ
اليكم الصورة
المستخدم يتصفح بيانات السجلات للموظفين تم ينقر زر تعديل فتفتح نافذة للتعديل
قام بتغيير بعض البيانات ولكن لم يحفظها لسبب تراجعه مثلا
الان اقفل نموذج التعديل والبيانات متغيرة
اذا دخل على تعديل بيانات سجل اخر وقام بالحفظ  سيتم حفظ حتى البيانات السابقة التي لا يريد تغييرها
هل يجب عمل
RejectChange
كلما خرج من النموذج حتى ولو قام بالنقر على زر الحفظ احتياطيا ام هناك طريقة افضل
وعليكم السلام...
-حسب فهمي أعتقد أنك تريد تغير البيانات لكل سجل مستقل كمثلا هيتم تعديل ولم يتم الضغط علي "تعديل" فالبيانات لمم تتغير, أما لو "عدلت" علي سجل أخر بيعدل السجل دا والسابق.

الحل: أن تضع عمود"id" من نوع ترقيم تلقائي وتعدل كل سجل حسب رقمه.
(16-05-20, 01:06 AM)ابو محمد محمد محمد كتب : [ -> ]هل يجب عمل
RejectChange
كلما خرج من النموذج حتى ولو قام بالنقر على زر الحفظ احتياطيا ام هناك طريقة افضل

نعم ربما من الأفضل تجديد الداتاست او الداتا تيبل

أو كما ذكر أخي أسامة -- قم بحفظ التعديل على صف معين وليس كل الصفوف
أخي العزيز تفضل هذا المثال به عمليه (الحفظ, التعديل, الحذف, البحث).
لو في أي غموض أو لبس راسلني علي الرسائل.
أو واتس: +201115740074 وانا بالأمر لأي توضيح.

تفضل:
من الواضح أنك تتعامل مع النسخة الأصل للـ DataSet
وإذا أردت أن تعدل على سجل فإنك تتعامل مع نفس الـ DataSet

إذا قمت بعمل DataSet.RejectChanges فهذا يعني إلغاء كل التغييرات على كامل الـ DataSet حتى السجلات السابقة سيتم إلغاء التغييرات التي تمت عليها. وليس هذا الجدول فقط , بل سيتم إغاء كل التغييرات على جميع الجداول الموجودة في هذة الـ DataSet
حتى لو قمت بإستخدام DataTable.RejectChanges على الجدول سيتم إغاء كل التغييرات على جميع السجلات الموجودة في هذة الجدول.
أنت تحتاج إلى DataRow.RejectChanges هذا الآخير سيقوم بإلغاء التغييرات فقط على مستوى السجل فقط.


الأفضل أنه عند فتح نافذة التعديل تأخذ نسخة من السجل والأفضل من ذلك جلبة مرة أخرى من قاعدة البيانات في ( جدول جديد أو في داتا ست جديدة ) فقط مخصوص لهذا السجل 
إذا تم التعديل وتم الحفظ بنجاح تقوم بإعادة جلب السجل للنافذة الأم التي كانت تعرض السجل سابقاً لتحديث بياناته ( أو مباشرتاً من نافذة التعديل قم بإرجاع السجل للنافذة الأم لتحديث بياناتة على الشاشة ) ولا تنسى عمل ( DataRow.AcceptChanges ) فقط للسجل الأصل في النافذة الأم أو الداتا ست الأصل
وإذا لم يتم التعديل لأي سبب كان ( بكل بساطة أغلق النافذة ) لأن التعديلات تمت على سجل منسوخ من الأصل أو تم جلبة من قاعدة البيانات وليس السجل الموجود في النافذة الأم أو الداتاست الأصل التي تعمل عليها )