PDA

View Full Version : سوال: یه سوال کوچیک در مورد combobox



follower
پنج شنبه 28 دی 1391, 19:44 عصر
سلام به همه ی دوستان.

دوستان من توی برنامه ای که نوشتم توی یکی از فرم ها یه combobox دارم که مقدارش رو بعد از انتخاب کاربر می ریزم توی پایگاه داده.

حالا وقتی می خوام برای عمل ویرایش اون فرم ،مقدارcombobox رو از پایگاه بخونم و مقدار جدید combobox رو نمایش بدم نمی تونم.

فقط اینم بگم کهcombobox از ابتدا پر شده اس. فقط باید یکی از این مقدارهایی که وجود داره شاید index اش برابر index مقداری بشه که از پایگاه داده خونده میشه .

فکر نکنم خوب توضیح داده باشم . مثلا مقادیر combobox این ها هستن :

دانش آموز

استاد

حل تمرین و ...

و فرض کنید مقدار توی پایگاه هم استاد هستش.

می خوام وقتی کاربر ویرایش رو انتخاب کرد combobox از بین مقادیری که داره "استاد" رو نمایش بده.

کدش رو توی asp این جوری می تونم بنویسم ولی توی C#‎‎ نمی دونم چطوریه !!!

اگه dr شی ای باشه که باهاش از پایگاه می خونم کدش توی asp این طوری میشه :

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.Fi ndByText(dr["ID"].ToString()));




ولی توی winform کامبوباکس تابعی به نام findbytext نداره . اگه دوستانی که بلدن یه کمک کوچولو بکنن ممنون میشم.

morika
پنج شنبه 28 دی 1391, 22:12 عصر
خب چرا انقد خودتو اذیت می کنی شما. text کمبوباکست رو برار مقدار موجود توی بانک قرار بده.
combobox1.text = dr["id"].tostring()

follower
پنج شنبه 28 دی 1391, 23:00 عصر
خب چرا انقد خودتو اذیت می کنی شما. text کمبوباکست رو برار مقدار موجود توی بانک قرار بده.
combobox1.text = dr["id"].tostring()

خوب همون طوری که حدس میزدم متوجه نشدید. دوست عزیز ممنونم از پاسخ شما ولی دقت نکردید. بنده گفتم که مقادیر combobox از قبل موجودند و با انجام تکه کدی که شما فرمودید item فعال فعلی مقدارش رو به مقداری که از پایگاه خونده تغییر می ده و مقدار خودش از بین می ره . متوجه شدید؟ باید یه کاری کرد که از مقادیر موجود یکیشون (که مساوی مقدار پایگاهه) index اش فعال بشه.

morika
جمعه 29 دی 1391, 00:54 صبح
من متوجه عرض شما شدم. فقط نمی فهمم چه فرقی می کنه که تکست کمبوباکس از مقادیر خودش باشه یا از جای دیگه؟ وقتی از جای دیگه هم بیاد بازم با حداقل یکی از مقادیر خودش کاملا یکسان هستش. اگه قرار باشه شما کارهاتونو بر اساس تکست کمبوباکس تنظیم کنید دیگه از پیچیدگی ها هم راحت می شین. بهرحال من فکر می کردم این روش مشکلتونو حل می کنه و راحتم هست.

plus
جمعه 29 دی 1391, 01:45 صبح
شما اگه به هر آیتمی که به لیستون اضافه میکنید Value متناسب با مقداری که در DataBase نگه دارید میکنید داده باشید میتونید با این کد، آیتمی که مقدارش برابر مقدار نگه داشته شده در دیتابیس هست رو انتخاب کنید:

dropDownList.SelectedValue = dr.Field<int>("ID");

ولی در صورتی که موقع ذخیره از Index برای ذخیره در دیتابیس استفاده میکنید، برای نمایش اون آیتم کافیه Index ی که مقدارش رو ذخیره کردین رو انتخاب کنید:

dropDownList.SelectedIndex = dr.Field<int>("ID");

follower
جمعه 29 دی 1391, 11:52 صبح
من متوجه عرض شما شدم. فقط نمی فهمم چه فرقی می کنه که تکست کمبوباکس از مقادیر خودش باشه یا از جای دیگه؟ وقتی از جای دیگه هم بیاد بازم با حداقل یکی از مقادیر خودش کاملا یکسان هستش. اگه قرار باشه شما کارهاتونو بر اساس تکست کمبوباکس تنظیم کنید دیگه از پیچیدگی ها هم راحت می شین. بهرحال من فکر می کردم این روش مشکلتونو حل می کنه و راحتم هست.

ببینید فرض کنید که مقداری که الان combobox داره نشون می ده برابر "استاد" باشه و مقداری که از پایگاه خونده میشه برابر " دانشجو" . این جوری مقدار استاد به دانشجو تغییر می کنه . یعنی توی مقادیر مربوط به کامبوباکس دیگه مقدار "استاد" وجود نخواهد داشت و دو تا دانشجو داریم.

follower
جمعه 29 دی 1391, 11:53 صبح
شما اگه به هر آیتمی که به لیستون اضافه میکنید Value متناسب با مقداری که در DataBase نگه دارید میکنید داده باشید میتونید با این کد، آیتمی که مقدارش برابر مقدار نگه داشته شده در دیتابیس هست رو انتخاب کنید:

dropDownList.SelectedValue = dr.Field<int>("ID");

ولی در صورتی که موقع ذخیره از Index برای ذخیره در دیتابیس استفاده میکنید، برای نمایش اون آیتم کافیه Index ی که مقدارش رو ذخیره کردین رو انتخاب کنید:

dropDownList.SelectedIndex = dr.Field<int>("ID");


سوالم در خصوص winform بود ...!!!

veniz2008
جمعه 29 دی 1391, 12:35 عصر
سلام.
چیزی که من از حرف های شما متوجه شدم اینه :
شما کمبو رو از دیتابیس میخونید و پر میکنید. فرضا سه مقدار دانش آموز ، استاد ، حل تمرین. حالا در حالت پیش فرض ممکنه کمبو روی دانش آموز باشه ولی چیزی که برای اون رکورد در دیتابیس ذخیره شده مثلا استاد هست. حالا شما میخواید که کمبو بصورت خودکار روی استاد قرار بگیره.
اگر درست متوجه شده باشم شما فقط کافیه selectedindex کمبو رو ست کنید. بهترین کار ممکن اینه که در دیتابیس برای هر یک از مقادیر دانش آموز، استاد ، حل تمرین و ... یک عدد نسبت بدید که در واقع همون valuemember شما خواهد بود (بهتره اعداد از 0 شروع بشن و یکی یکی اضافه بشن. مثلا 0 برای دانش آموز، 1 برای استاد و 2 برای حل تمرین و ...). حالا کافیه selectedindex مربوط به کمبو رو برابر با این عددی که در دیتابیس ذخیره کردید قرار بدید. هنگام اجرای برنامه، کمبو بصورت خودکار روی مقدار صحیح قرار میگیره.
موفق باشید.

plus
جمعه 29 دی 1391, 14:35 عصر
سوالم در خصوص winform بود ...!!!
من DropDownList رو دیدم فکر کردم ASP.NET رو میگین D-:.
همونطور که veniz پاسخ دادنند، اگه توی دیتابیس Index آیتم ها رو نگه میدارید:

comboBox1.SelectedIndex = dr.Field<int>("ID");

اگه متن آیتم ها رو نگه میدارین،

comboBox1.SelectedText = dr.Field<string>("ID");

اگه یه مقدار مجزا برای هر آیتم نگه میدارین، و به comboBox توی فرم هم DataSource میدین:

comboBox1.SelectedValue = dr.Field<int>("ID");