درود
باید در پاسخ خدمتتون عرض کنم که پاسخ سوال شما فقط چند خط کد هست که در پایان ذکر شده اما مدل داده ای شما یه چنتا اشکال کوچیک داره برای معرفی شیء CST.
من اول مدل داده ای رو اصلاح میکنم.
public partial class CST
{
private string tafcode;
private string esm;
public CST(string tafcode, string esm)
{
this.tafcode = tafcode;
this.esm = esm;
}
public string Tafcode
{
get { return tafcode; }
set { tafcode = value; }
}
public string Esm
{
get { return esm; }
set { esm = value; }
}
public string Shoy
{
get { return tafcode + " " + esm; }
}
}
خب شما برای پر کردن Combobox یا Dropdown از لیست جنریک استفاده کردید که من هم با توجه به مدل داده ای که تعریف کردم با استفاده از جنریک لیستها در رویداد Form1_Load داده های Combobox رو پر میکنم: (هیچ فرقی نمیکنه که از Query برای پرکردن استفاده کنید یا از Generic List ، مهم خصوصیت DisplayMember هست)
List<CST> CSTList = new List<CST>();
CSTList.Add(new CST("1400-05-21", "صبح"));
CSTList.Add(new CST("1400-05-17", "ظهر"));
CSTList.Add(new CST("1400-05-15", "شب"));
cmb.DataSource = CSTList;
cmb.DisplayMember = "Tafcode";
cmb.ValueMember = "Tafcode";
خب حالا فقط کافیه برای نمایش Esm و Tafcode هنگام باز شدن Dropdown داخل رویداد cmb_DropDown مقدار DisplayMember رو برابر Shoy (ترکیب Tafcode و Esm) قرار بدیم:
private void cmb_DropDown(object sender, EventArgs e)
{
cmb.DisplayMember = "Shoy";
}
حالا برای برگردوندن هنگام بسته شدن Dropdown به همون حالت قبل، مقدار DisplayMember در رویداد cmb_DropDownClosed رو فقط Tafcode مینویسیم فقط چون با تغییر DisplayMember گزینه انتخاب شده دوباره به صورت پیش فرض روی اولین آیتم قرار میگیره (اندیس صفر) قبل از مشخص کردن DisplayMember اندیس انتخاب شده رو داخل یک متغیر نگهداری میکنیم و بعد از مشخص کردن DisplayMember دوباره اون مقدار رو داخل اندیس انتخاب شده قرار میدیم:
private void cmb_DropDownClosed(object sender, EventArgs e)
{
int index = cmb.SelectedIndex;
cmb.DisplayMember = "Tafcode";
cmb.SelectedIndex = index;
}
پس شما برای پر کردن Combobox چه از SQL استفاده کنید چه از Object استفاده کنید چه از لیست جنریک استفاده کنید، فقط کافیه داخل رویداد cmb_DropDown (هنگامی که لیست کشویی باز می شود) و داخل رویداد cmb_DropDownClosed (هنگامی که لیست کشویی بسته می شود) مقدار DisplayMember رو تغییر بدین.
این هم خروجی برنامه:
https://s4.uupload.ir/files/test_qiec.gif
آخرین ویرایش: 13-08-2021 ???? 14:55، توسط
عباس اختیاری