PDA

View Full Version : استفاده از DataTemplate در ComboBox



PetekDincos
سه شنبه 03 اسفند 1389, 12:35 عصر
با سلام
من برای پر کردن کامبوباکسم از DataTemplate استفاده می کنم و DataTemplate ام از چندتا فیلد تشکیل شده و وقتی از DataTemplate برای بایند کردن ItemTemplate استفاده می کنی دیگه نمی شه از DisplateMemberPath استفاده کرد یعنی نمی شه هم زمان از این دو تا Property استفاده کرد و برای اینکه بتونم تو خود Text کامبو باکس مقدار نشون بدم از TextSearch.TextPath مثل DisplayMemberPath میشه استفاده کرد اما از این برای نشون دادن یک فیلد می شه استفاده کرد و برای نشون دادن چند فیلد کنار هم چیکار بایستی کرد با تشکر

مهدی فرزاد
سه شنبه 03 اسفند 1389, 15:45 عصر
سلام
من این دو راه رو پیشنهاد میکنم
مثال های زیر رو ببین

در هر دو مثال دیگه از DisplateMember استفاده نکردم و برای برگردندن مقدار ComboBox از
SelectedItem
استفاده شده
برای اولی متد ToString جدول مربوطه رو override کردم
ولی در دومی SelectedItem به نوع جدولم تبدیل کردم و هر فیلدی رو که میخوام خروجی گرفتم

PetekDincos
سه شنبه 03 اسفند 1389, 17:31 عصر
با سلام آقای فرزاد
ممنون از جوابتون من از ObjectDataProvider برای پر کردن منبع داده ام استفاده می کنم و مثال شما رو تغییر دادم و شبیه مشکل خودم کردم و ببینید و به اون TextSearch.TextPath هم دقت نمایید اگر اون TextSearch رو پاک کنی می بینید مشکل من کجاست با تشکر

مهدی فرزاد
سه شنبه 03 اسفند 1389, 17:43 عصر
سلام مجدد
همون راه اول جواب میده و میتونی با راه دوم ترکیب کنی

مثال شما رو اینجوری کردم


publicclassPersonalcs
{
publicstring FName { get; set; }
publicstring LName { get; set; }
publicoverridestring ToString()
{
returnstring.Format("{0} {1}", FName, LName);
}

}


و در نهایت

private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((this.comboBox1.SelectedItem as Personalcs).FName);
MessageBox.Show((this.comboBox1.SelectedItem as Personalcs).LName);
MessageBox.Show(this.comboBox1.SelectedItem.ToStri ng());
}

مهدی فرزاد
سه شنبه 03 اسفند 1389, 23:12 عصر
سلام
یک راه دیگه به ذهنم رسید که انعطاف بالاتری داره
شما یک Property یا چند Property دیگه به کلاست اضافه میکنی (هر کدوم میتونه ترکیبی از چند فیلد جدول رو برگردونه) مثلا برای مثال شما اونی که Bold شده رو اضافه کردم


public class Personalcs
{
public string FName { get; set; }
public string LName { get; set; }
public string FLName { get { return FName + " " + LName; } } //Bold
}
public class PersonalcsRestore
{
public List<Personalcs> Get_Personal()
{
List<Personalcs> mylist = new List<Personalcs>()
{
new Personalcs{FName="Mehdi",LName="Farzad"},
new Personalcs{FName="Petek",LName="Dincos"}
};
return mylist;
}

}


حالا میتوند از همون روش خودتون یعنی

<ComboBox TextSearch.TextPath="FLName"

استفاده کنید

خوبی این روش اینه که شما به هر تعداد و با هر تکریبی که خواستی میتونید Property بسازی و برای کمبو های مختلف استفاده کنی