Before post this question ,I believe it is simple issue , I search for the answer and didn't find suitable solution.
in my daily work , I am working with web applications and can easily get or set values of dropdownlists
i can not do the same in windows application C#
I have combobox and class comboItem
public class ComboItem
{
public int Key { get; set; }
public string Value { get; set; }
public ComboItem(int key, string value)
{
Key = key; Value = value;
}
public override string ToString()
{
return Value;
}
}
Say the combobox is binded through hard code and the values are
Key : 2 / Value : Female
Key : 3 / Value : Unknown
lets say i have the Key =3 and I want to set this item ( whose key is 3 ) through code so when form is loaded , the selected value by default will be Unknown.
combobox1.selectedValue =3 //Not Working , selectedValue used to return an object
combobox1.selectedIndex = 2 //Working as 2 is the index of key 3/Unknown
but lets say i don't know the index , how can i get the index of item whose key = 3 ?
index can be get through value in this way
int index = combobox1.FindString("Unknown") //will return 2
FindString take a value not a key , i need something like FindString which take a key and return index
NOTE : Here is how i bind my drop down menu
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
jsonSerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
var empResult= await response.Content.ReadAsStringAsync();
List<Emp> Emps= JsonConvert.DeserializeObject<Emp[]>(empResult, jsonSerializerSettings).ToList();
foreach (var item in Emps)
{
ComboItem CI = new ComboItem(int.Parse(item.ID), item.Name);
combobox1.Items.Add(CI);
}
this.combobox1.DisplayMember = "Value";
this.combobox1.ValueMember = "Key";
You need to set the ValueMember
property so the ComboBox
knows what property to deal with when SelectedValue
is being used. By default the ValueMember
will be empty. So when you set the SelectedValue
, the ComboBox
does not know what you want to set.
this.comboBox1.ValueMember = "Key";
Normally, you would also set the DisplayMember
property:
this.comboBox1.DisplayMember = "Value";
If you do not set it, it will just call ToString()
on the object and display that. In your case the ToString()
returns the Value
.
how can i get the index of item whose key = 3 ?
If you want the item whose key is 3, why do you need to get it from the combobox? You can just get it from the collection the combobox is bound to:
For example, imagine this:
var items = new List<ComboItem> { new ComboItem(1, "One"),
new ComboItem( 2, "Two") };
this.comboBox1.DataSource = items;
this.comboBox1.DisplayMember = "Value";
this.comboBox1.ValueMember = "Key";
this.comboBox1.SelectedValue = 2;
If I need the item whose key is 2, then this will achieve that:
// Use Single if you are not expecting a null
// Use Where if you are expecting many items
var itemWithKey2 = items.SingleOrDefault(x => x.Key == 2);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.