فرض کنیم دیتاتیبل comboBoxKala_Select یک ستون به اسم col_details داشته باشه که از join شدن فیلدهای kalaid و pis و price_sales با یک کارآکتر مشخص (مثلا @) ساخته شده.
فعلا به این که این ستون چجوری ساخته میشه کاری نداریم و اول کد بخش استخراج اطلاعات از اون رو تکمیل میکنیم.
در رخداد form load :
comboBoxKala.DataSource = _db.comboBoxKala_Select();
comboBoxKala.DisplayMember = "plus";
comboBoxKala.ValueMember = "col_details";
در رخداد selectedindexchanged کمبو comboBoxKala :
if (comboBoxKala.selectedvalue == null) return;
string[] a;
a=comboBoxKala.selectedvalue.tostring().split('@') ;
حالا در a[0] مقدار kalaid ، در a[1] مقدار pis و در a[2] مقدار price_sales رو داریم.
البته وقتی با کد کمبوباکس رو bind میکنیم بهتر هست از رخداد selectionchangecommitted استفاده کنیم.
حالا روش ساخت فیلد col_details رو بررسی میکنیم.
یک راه این هست که در دستور select کوئری اون رو بیاریم:
SELECT kalaid , plus , pis , price_sales , kalaid + '@' + pis + '@' + price_sales AS col_details FROM ...
برای سادگی و رساندن مطلب فرض کردیم هر سه فیلد از نوع nvarchar هست، در عمل هر فیلد غیر این رو باید با تابع CAST تبدیل کنیم:
SELECT kalaid , plus , pis , price_sales , CAST(kalaid AS nvarchar(10)) + '@' + pis + '@' + price_sales AS col_details FROM ...
راه دیگه این هست که فیلد col_details رو به صورت یک فیلد calculated با کد بسازیم و به جدول اضافه کنیم:
comboBoxKala_Select.columns.add(new datacolumn("col_details" , typeof(system.string) , "kalaid + '@' + pis + '@' + price_sales"));
البته اینها که گفته شد فقط بخاطر تکمیل بحث و خواسته استارتر محترم تاپیک بود، ولی در عمل نیازی به هیچ کدام از این ها نیست.
کافی هست valuemember رو همون kalaid بگذاریم و خیلی ساده مستقیما از روی datasource کمبوباکس و بر مبنای selectedvalue با یک select به datarow مورد نظر و دیتای اون برسیم:
datarow dr = comboBoxKala_Select.select("kalaid=" + comboBoxKala.selectedvalue.tostring())[0];