با سلام
با استفاده از چه کدی می شه اطلاعات موجود در رکورد انتخاب شده در DataGridView رو به دستور Delete ارسال کرد
یا به عبارت دیگر می خوام کاربر یک رکورد رو در dataGridView انتخاب کنه و بعد با استفاده از یک Button اونو حذف کنه
متشکرم
با سلام
با استفاده از چه کدی می شه اطلاعات موجود در رکورد انتخاب شده در DataGridView رو به دستور Delete ارسال کرد
یا به عبارت دیگر می خوام کاربر یک رکورد رو در dataGridView انتخاب کنه و بعد با استفاده از یک Button اونو حذف کنه
متشکرم
برای اینکار، مثلا:
dt.Rows[cm.Position].Delete();
که cm شیئی از نوع CurrencyManager هست که مربوط به منبع داده DataTable خواهد بود. برای گرفتن این شیئ:
CurrencyManager cm = this.BindingContext[dt];
dt همان منبع داده از نوع DataTable است (که توسط متد Fill انرا پر کردید).
می شه بیشتر توضیح بدید زمانی که
CurrencyManager cm = this.BindingContext[dt];
می نویسم از BIndingContext ایراد می گیره
شدیدا عذر میخوام :-(
تبدیل نوع رو یادم رفت، اینطور تبدیلش کنید:
CurrencyManager cm = (CurrencyManager) this.BindingContext[dt];
این تغییرات روی منبع داده dt اعمال میشه، در واقع رکورد انتخاب شده در دیتاگرید (اندیس cm.Position) از منبع داده dt حذف میشه.
یک نکته دیگه که بنده در مورد اون هیچ اطلاعاتی ندارم رکوردی که در datagridView وجود داره به چند table دیگه اتصال داره و زمانی که می خوام تغییرات مثل همین حذف انجام بدم اجازه این کار نمی ده
دیتابیس من Access و من رلیشن هاش رو هم رسم کردم
مشکل از کجاست
جدول A دارای فیلدهای a0 و a1 هست و جدول B دارای فیلدهای b0 و b1 است.
که فیلد a0 رابطه یک به چند با فیلد b0 داره.
محتویات جدول A:
a0 a1
----------------
1 A
2 B
3 C
محتویات جدول B:
b0 b1
----------------
1 A12
1 A15
1 A20
3 C12
3 C30
همانطور که از محتویات جدول B میبینید، رکوردهای این جدول در فیلد b0 دارای عدد 2 نیستند، به عبارتی پس از گرفتن کوئری (کوئری گرفتن بر اساس رابطه ای که دارند) و دیدن نتایج، خواهیم دید که رکورد دوم از جدول A هیچ تاثیر در نتایج کوئری ندارد. پس رکورد دوم از جدول A رو میشه به راحتی حذف کرد چون هیچکدام از رکوردهای جدول B از اون استفاده نمیکنند، اما رکورد اول از جدول A رو نمیشه حذف کرد چون بسیاری از رکوردهای جدول B (رکوردهای اول تا سوم) به اون احتیاج دارند پس نمیشه رکورد اول از جدول A رو حذف کرد.
برای حذف اولین رکورد از جدول A، دو راه پیش رو دارید:
+ در زمانی که بین جداول رابطه ایجاد میکنید، میتونید یک option رو مورد استفاده قرار بدید و کاری کنید که با پاک کردن رکوردی مثل رکورد اول از جدول A (که نمیشه حذفش کرد) کاری کنید که بتونید حذفش کنید البته بطوریکه تمام رکوردهای جدول B که به طریقی به اون احتیاج دارند هم حذف شوند (دقیقا یادم نیست که این گزینه چه بود Cascade Delete شاید اسمش این بود).
+ یک راه دیگر برای حذف رکورد اول جدول A، اینکه که تمام رکوردهای مرتبط به اون رو از جدول B حذف کنید، بعدش مجاز هستید که رکورد مورد نظر رو از جدول A حذف کنید.