piroozman
جمعه 28 تیر 1387, 22:20 عصر
در یک فرم از یک دیتاگرید استفاده نموده ام. این فرم دارای یک کلید بستن است که رویداد کلیک مربوط به آن تابع زیر صدا زده می شود:
this.close();
همانگونه که می دانید این تابع رویداد FormClosing() را صدا می زند. در این رویداد با بررسی تابع زیر
If(this.dataset.HasCheng() )
اگر مقدار تابع موجود در دستور if مقدار true باشد بدین معنا خواهد بود دیتاست تغییرات داشته است بنابراین در رویداد FormClosing بعد از شرط فوق یک پیغام با سه کلید بلی خیر انصراف به کاربر نشان داده می شود و اگر پاسخ مثبت باشد مقادیر دیتا ست در بانک اطلاعاتی ذخیره می شود.
حال مشکل:
مشکل اصلی این است که اگر سلولی در دیتاگرید در حال ویرایش باشد(یعنی هنوز عمل Enter از سوی کاربر اتفاق نیافتاده است) و کاربر علامت × (close form) کلیک نماید تغییرات موجود در سلول در حال ویرایش در دیتاست ذخیره نمی شود! و بنابراین هیچ پیغامی برای کاربر به نمایش در نخواهد آمد. قابل ذکر است که رویداد تابع this.close() موجود در کلید بستن برعکس عمل می کند یعنی بدون اینکه کاربر کلید Enter را بفشارد مقادیر سلول در حال ویرایش را وارد دیتاست می کند بنا براین پیغام مناسب جهت ذخیره یا عدم ذخیره تغییرات به کاربر نمایش داده می شود.
this.close();
همانگونه که می دانید این تابع رویداد FormClosing() را صدا می زند. در این رویداد با بررسی تابع زیر
If(this.dataset.HasCheng() )
اگر مقدار تابع موجود در دستور if مقدار true باشد بدین معنا خواهد بود دیتاست تغییرات داشته است بنابراین در رویداد FormClosing بعد از شرط فوق یک پیغام با سه کلید بلی خیر انصراف به کاربر نشان داده می شود و اگر پاسخ مثبت باشد مقادیر دیتا ست در بانک اطلاعاتی ذخیره می شود.
حال مشکل:
مشکل اصلی این است که اگر سلولی در دیتاگرید در حال ویرایش باشد(یعنی هنوز عمل Enter از سوی کاربر اتفاق نیافتاده است) و کاربر علامت × (close form) کلیک نماید تغییرات موجود در سلول در حال ویرایش در دیتاست ذخیره نمی شود! و بنابراین هیچ پیغامی برای کاربر به نمایش در نخواهد آمد. قابل ذکر است که رویداد تابع this.close() موجود در کلید بستن برعکس عمل می کند یعنی بدون اینکه کاربر کلید Enter را بفشارد مقادیر سلول در حال ویرایش را وارد دیتاست می کند بنا براین پیغام مناسب جهت ذخیره یا عدم ذخیره تغییرات به کاربر نمایش داده می شود.