PDA

View Full Version : سوال: مشکل در انتقال مقدار فیلد datagrid به ComboBox چند ستونی



hahaie
یک شنبه 20 دی 1394, 17:31 عصر
دوستان سلام.
فرض کنید یه جدول کارمندان داریم که دارای یه کلید خارجی به نام "کد قسمت" هستش.
توی فرم کارمندان بنده یه گرید گذاشتم که اطلاعات کارمندان رو نشون میده منتها به جای اینکه "کد قسمت" رو نشون بده "نام قسمت" رو از جدول قسمت ها نشون میده.
فرم به این صورته که وقتی کاربر روی رکوردهای گرید کلیک میکنه فیلدهای رکورد انتخاب شده درون تکست باکسهایی منتقل میشند ولی فیلد "نام قسمت" از گرید باید به یه کامبوباکس چند ستونه ای منتقل میشه که DataSource اون لیست تمام قسمت ها از جدول قسمت ها هستش.
منتها نمیدونم مقدار فیلد "نام قسمت" از گرید رو به چه خاصیتی از کامبوباکس نسبت بدم؟خاصیت Text کامبو که نمیشه چون وقتی قراره کاربر اطلاعات یک رکورد رو از طریق همین تکست باکس ها و کامبوباکس ویرایش کنه اگر مقداری از کامبو انتخاب نکنه و فیلدهای دیگه رو ویرایش کنه چون از خاصیت SelectedValue ه کامبو برای ذخیره و ویرایش در جدول استفاده کرده ایم خطا میدهد.چون کاربر مقداری انتخاب نکرده در نتیجه SelectedValue برابر صفر هستش.
ضمن اینکه کامبو فقط دو ستون داره بنام های "کد قسمت" و نام قسمت" که خاصیت DisplayMember برابر "نام قسمت" و ValueMembet برابر "کد قسمت"هستش.
امیدوارم فهمیده باشین چی میگم.
ممنون میشم راهنمایی بفرمایید

ژیار رحیمی
یک شنبه 20 دی 1394, 20:52 عصر
سلام به نظر من "کد قسمت" هم بعنوان یک ستون به DataGrid اضافه کن و ستون مذکور رو مخفی کن وقتی کاربر سطر رو انتخاب کرد به جای ستون نام قسمت ،ستون کد قسمت رو در خاصیت SelectedValue کامبوباکس بریز.حتما ValueMember کامبوباکس رو برای "کد قسمت" ست کن.

hahaie
یک شنبه 20 دی 1394, 22:17 عصر
راه دیگه نیس؟
این به ذهن خودمم رسید ولی این طور برنامه نویسی زیاد برام جالب نیست....

ژیار رحیمی
یک شنبه 20 دی 1394, 23:02 عصر
از BindingSource هم میتونی استفاده کنی اینم یه روش دیگه.

hahaie
دوشنبه 21 دی 1394, 07:13 صبح
چطوری میشه توضیح بدین؟

hahaie
جمعه 25 دی 1394, 11:55 صبح
آقای رحیمی عزیز اگه روشش رو میدونید میشه توضیح بدید؟؟

ژیار رحیمی
جمعه 25 دی 1394, 15:05 عصر
دوست گرامی به شما روش بدون دردسر در بالا گفته شد.شما وقتی با یه ستون اضافه کار شما راه میفته چرا روش دیگر؟ من به شخصه خیلی از مواقع از این روش استفاده کردم.برای روش BindingSource هم نمونه برنامه زیاد هست تو انجمن کافیست وقت بزارید و مطالعه نمایید(لازم به توضیح است که برای روش دوم باید در کدهاتم تغییراتی اعمال کنی)

hahaie
دوشنبه 05 بهمن 1394, 08:17 صبح
سلام به نظر من "کد قسمت" هم بعنوان یک ستون به DataGrid اضافه کن و ستون مذکور رو مخفی کن وقتی کاربر سطر رو انتخاب کرد به جای ستون نام قسمت ،ستون کد قسمت رو در خاصیت SelectedValue کامبوباکس بریز.حتما ValueMember کامبوباکس رو برای "کد قسمت" ست کن.

سلام.تست شد خطا میدهد Index was out Of range!

ژیار رحیمی
دوشنبه 05 بهمن 1394, 09:04 صبح
دوست گرامی کدهای لازم رو بزارید تا بررسی شود

hahaie
دوشنبه 05 بهمن 1394, 11:42 صبح
دوست گرامی کدهای لازم رو بزارید تا بررسی شود
اجازه بدین یه چیزهایی فهمیدم که خیلی مهمه و خطا هم از اون بوده:
اینکه الان فهمیدم رویداد Form_Load بعد از SelectionChanged گرید ویو اتفاق می افته! :متعجب:
و چون من کامبوباکس رو توی Form_Load پر کرده بودم خطا میداده!
چرا Form_Load بعد از SelectionChanged گرید اتفاق می افته؟؟؟
با این تفاسیر حالا توابع مربوط به پر کردن کامبو رو کجا فراخوانی کنم?
توضیح اینکه اگر فیلدی بنام مدرک تحصیلی(که در اصل کلید خارجی است)رو توی گرید نشونش بدیم و برای ویرایش کاربر باید بتونه توی تکست باکس مربوطه مدارک دیگه رو انتخاب کنه و ...

ژیار رحیمی
دوشنبه 05 بهمن 1394, 20:32 عصر
دلیلش اینه که موقع پر کردن ComboBox وقتی تک تک مقادیر ComboBox مقدار دهی میشوند پس در نتیجه مقادیر هر آیتم تغییر کرده و رویداد متناظر آن برای تک تک آیتم های آن که اتقاق می افتد

hahaie
دوشنبه 05 بهمن 1394, 20:44 عصر
دلیلش اینه که موقع پر کردن ComboBox وقتی تک تک مقادیر ComboBox مقدار دهی میشوند پس در نتیجه مقادیر هر آیتم تغییر کرده و رویداد متناظر آن برای تک تک آیتم های آن که اتقاق می افتد

شرمنده ها ولی جملاتتون اصلا برا من قابل فهم نبود :گیج:
ضمن اینکه جواب سوال دومم رو هم ندادین!