نمایش اطلاعات دو ستون در یک ComboBox در سی شارپ
سلام
من میخوام توی یک کمبوباکس از یک کویری که دوتا ستون یکی نام و یکی کد برام برمیگردونه رو همزمان در یک کمبوباکس نشون بدم مثل عکس زیر
اما وقتی کاربر یکی از آیتمن های این لیست کمبوباکس رو انتخاب کرد نهایتا چیزی که توی کمبوباکس نشون داده میشه یه کد هستش یعنی بعد از کلیک روی یکی از آیتم های Selected Item برابر رو همون کد نشون داده بشه
مدل داده ای :
public partial class CST
{
public string Tafcode { get; set; }//ID
public string Esm { get; set; }//Name
public string Shoy => $"{Tafcode} {Esm}";
}
کد سی شارپ :
var quer_ITM = dbms.Database.SqlQuery<CST>("SELECT Tafcode , Esm FROM CST").ToList();
cmb.ItemsSource = quer_ITM;
cmb.DisplayMemberPath = "Shoy"; //Merg of Esm + Tafcode
cmb.SelectedValuePath = "Tafcode";//The Primary Key 112-1-1
XAML ComboBox :
<ComboBox x:Name="cmb" Margin="0,312,202,0" VerticalAlignment="Top" Height="22" FlowDirection="RightToLeft" FontFamily="/Negin;component/NT/#IRANSans" IsEditable="True" Background="#FFCCFFFF" HorizontalAlignment="Right" Width="402"></ComboBox>
From Stackoverflow :
how to do I show two displaymemeber and one selected value path in a combobox c# wpf only left one
چطور این کار رو انجام بدم ؟
پاسخ هوش مصنوعی
برای نمایش اطلاعات دو ستون در یک ComboBox در سی شارپ و WPF، شما باید از یک خاصیت ترکیبی استفاده کنید که شامل هر دو مقدار باشد و برای تنظیم مقدار انتخاب شده نیز از یک کلید اصلی استفاده کنید. با توجه به کد شما، به نظر می رسد که ساختار اصلی شما درست است. در صورت انتخاب یکی از آیتم ها، ComboBox شناسه اصلی (کد) را به عنوان مقدار انتخاب شده برمی گرداند.
کد شما به نظر می رسد صحیح باشد. فقط باید مطمین شوید که ویژگی 'Shoy' به درستی نمایش داده می شود و آیا ComboBox به درستی بروز می شود یا خیر. در ادامه می توانید استفاده از ComboBox را مشاهده کنید:
مدل داده ای:
public partial class CST
{
public string Tafcode { get; set; } //ID
public string Esm { get; set; } //Name
public string Shoy => $"{Tafcode} {Esm}";
}
کد سی شارپ:
var quer_ITM = dbms.Database.SqlQuery<CST>("SELECT Tafcode , Esm FROM CST").ToList();
cmb.ItemsSource = quer_ITM;
cmb.DisplayMemberPath = "Shoy"; //Merg of Esm + Tafcode
cmb.SelectedValuePath = "Tafcode"; //The Primary Key 112-1-1
XAML ComboBox:
<ComboBox x:Name="cmb" Margin="0,312,202,0" VerticalAlignment="Top" Height="22"
FlowDirection="RightToLeft" FontFamily="/Negin;component/NT/#IRANSans"
IsEditable="True" Background="#FFCCFFFF" HorizontalAlignment="Right" Width="402">
</ComboBox>
هنگامی که کاربر یک مقدار را از شی ComboBox انتخاب می کند، مقدار 'SelectedValue' باید به کد متناظر (Tafcode) تغییر کند که می توانید آن را اینگونه بررسی کنید:
string selectedValue = cmb.SelectedValue?.ToString(); // اینجا 'selectedValue' باید کد انتخاب شده باشد
اگر این کدها را امتحان کردید و هنوز مشکلاتی وجود دارد، ممکن است بخواهید از لینک کمک Stackoverflow استفاده کنید که در سوال شما وجود دارد.
برای نمایش اطلاعات دو ستون در یک کمبوباکس میتونید به روش زیر عمل کنید. روشی که در ادامه میگم خدمتتون برای سی شارپ، WPF و حتی Asp.net می تونید استفاده کنید و هیچ محدودیتی نداره.
ببینید شما وقتی میخواید اطلاعات رو درون ComboBox و یا در وب درون یک تگ Select نمایش بدید نیاز به 2 فیلد دارید. یکی DisplayMember که فیلدی هست که اطلاعات رو به کاربر نمایش میده و یکی ValueMember که این فیلد هم کد معادل DisplayMember هست و برای ذخیره اطلاعات در دیتابیس و یا کار با اطلاعات هست.
خب نکته اینجاست شما نیاز نیست برای DisplayMember حتما یک ستون از جدول رو مشخص کنید. میتونید یک کوئری بنویسید و 2 یا چند ستون رو مشخص کنید (به عبارتی Join کنید) و نتیجه اون کوئری رو در DisplayMember نمایش بدید.
مثال
var query = _context.CST.Select(c => new { Value = c.Tafcode , DisplayMemebr = c.Esm + " " + c.Tafcode }).ToList()
خب در مثال بالا یک کوئری داریم که 2 تا فیلد در خروجی داره. فیلد اول که اسمش رو Value گذاشتیم و مقدار ID شما رو داره و فیلد دوم هم اسمش رو DisplayMember گذاشتیم و مقدار مورد نظر شما و مقداری که قراره کاربر ببینه رو نمایش میده.
حالا خیلی راحت میتونید از این کوئری استفاده کنید.
cmb.DisplayMemberPath = "DisplayMember";
cmb.SelectedValuePath = "Value";
از این روش در هر زبان برنامه نویسی می تونید استفاده کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress