ورود

View Full Version : عدم ذخیره اطلاعات وارد شده از کاربر در دیتاست قبل از عمل Enter



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

razavi_university
شنبه 29 تیر 1387, 03:33 صبح
بهتره از رویداد FormClosing فرم استفاده کنین.
و برای ذخیره اطلاعات در دیتاست دو دکمه تایید و انصراف در فرمتون بگذارید(بستن فرم با ضربدر بالا رو هم به منزله انصراف فرض کنین) و با دکمه تایید تغییرات رو در صورتی که تغییری در DataGrid داده شده باشد به بانکتون اعمال کنین

gdevnb
شنبه 29 تیر 1387, 04:28 صبح
سلام
زمانی که متد FormClosing فراخوانی شد فوکوس رو از دیتاگرید بردارید و به یه کنترل دیگه بدین.

piroozman
سه شنبه 01 مرداد 1387, 23:38 عصر
من از کلیه دوستانی که زحمت کشیده پاسخ سئوالات را به این خوبی می دهند خیلی تشکر می کنم
خدمت شما عرض کنم که این مشکل را خیلی بهتر می شه حل کرد. طی مطالعه و جستجویی که داشتم متوجه شدم که می شود در رویداد FormClosing از کد زیر جهت اعمال تغییرات در دیتاست استفاده نمود

this.BindingContex[this.dataGridView1.DataSource].EndCurrentEdit
سپس میتوان با استفاده از کد زیر از تغییر در دیتاست مطمئن شد

if(this.dataSet1.HasChanges())
//Do Something code
در اینجا از دوست همکارم که در این یافتن این کد مرا یاری نمود تشکر می کنم