PDA

View Full Version : ارسال رکورد انتخاب شده در DataGridView به دستور Delete در Sql



first_squit
جمعه 11 آبان 1386, 12:08 عصر
با سلام

با استفاده از چه کدی می شه اطلاعات موجود در رکورد انتخاب شده در DataGridView رو به دستور Delete ارسال کرد

یا به عبارت دیگر می خوام کاربر یک رکورد رو در dataGridView انتخاب کنه و بعد با استفاده از یک Button اونو حذف کنه

متشکرم

PC2st
جمعه 11 آبان 1386, 15:54 عصر
برای اینکار، مثلا:


dt.Rows[cm.Position].Delete();

که cm شیئی از نوع CurrencyManager هست که مربوط به منبع داده DataTable خواهد بود. برای گرفتن این شیئ:


CurrencyManager cm = this.BindingContext[dt];

dt همان منبع داده از نوع DataTable است (که توسط متد Fill انرا پر کردید).

first_squit
جمعه 11 آبان 1386, 16:04 عصر
می شه بیشتر توضیح بدید زمانی که
CurrencyManager cm = this.BindingContext[dt];

می نویسم از BIndingContext ایراد می گیره

PC2st
جمعه 11 آبان 1386, 16:07 عصر
چه ایرادی میگیره؟

first_squit
جمعه 11 آبان 1386, 16:14 عصر
چه ایرادی میگیره؟
می گه که نمی تونه BIndingContext رو در CurrencyManager ... اعمال یا convert کنه

ایراد کار من از کجاست آیا باید چیزی رو به Using هام اضافه کنم

PC2st
جمعه 11 آبان 1386, 16:17 عصر
شدیدا عذر میخوام :-(
تبدیل نوع رو یادم رفت، اینطور تبدیلش کنید:


CurrencyManager cm = (CurrencyManager) this.BindingContext[dt];

first_squit
جمعه 11 آبان 1386, 16:26 عصر
شدیدا عذر میخوام :-(
تبدیل نوع رو یادم رفت، اینطور تبدیلش کنید:


CurrencyManager cm = (CurrencyManager) this.BindingContext[dt];

ببخشید این تغیرات تنها بر روی dataGridView انجام می شه ؟
و من باید این تغییر رو چطوری به منبع داده انتقال بدم ؟

باید datatable رو Update کنم

PC2st
جمعه 11 آبان 1386, 16:31 عصر
این تغییرات روی منبع داده dt اعمال میشه، در واقع رکورد انتخاب شده در دیتاگرید (اندیس cm.Position) از منبع داده dt حذف میشه.

first_squit
جمعه 11 آبان 1386, 16:36 عصر
یک نکته دیگه که بنده در مورد اون هیچ اطلاعاتی ندارم رکوردی که در datagridView وجود داره به چند table دیگه اتصال داره و زمانی که می خوام تغییرات مثل همین حذف انجام بدم اجازه این کار نمی ده

دیتابیس من Access و من رلیشن هاش رو هم رسم کردم

مشکل از کجاست

PC2st
جمعه 11 آبان 1386, 17:00 عصر
جدول 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 حذف کنید.