public class ComboboxItem {
public string Text { get; set; }
public string Value { get; set; }
public override string ToString() { return Text; }
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int selectedIndex = comboBox1.SelectedIndex;
int selecteVal = (int)comboBox1.SelectedValue;
ComboboxItem selectedCar = (ComboboxItem)comboBox1.SelectedItem;
MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));
}
I'm adding them like:
ComboboxItem item = new ComboboxItem();
item.Text = cd.Name;
item.Value = cd.ID;
this.comboBox1.Items.Add(item);
I keep getting a NullReferenceExeption and not sure why. the text seems to show up just fine.
Try this:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
int selectedIndex = cmb.SelectedIndex;
int selectedValue = (int)cmb.SelectedValue;
ComboboxItem selectedCar = (ComboboxItem)cmb.SelectedItem;
MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));
}
You are getting NullReferenceExeption
because of you are using the cmb.SelectedValue
which is null. the comboBox
doesn't know what is the value of your custom class ComboboxItem
, so either do:
ComboboxItem selectedCar = (ComboboxItem)comboBox2.SelectedItem;
int selecteVal = Convert.ToInt32(selectedCar.Value);
Or better of is use data binding like:
ComboboxItem item1 = new ComboboxItem();
item1.Text = "test";
item1.Value = "123";
ComboboxItem item2 = new ComboboxItem();
item2.Text = "test2";
item2.Value = "456";
List<ComboboxItem> items = new List<ComboboxItem> { item1, item2 };
this.comboBox1.DisplayMember = "Text";
this.comboBox1.ValueMember = "Value";
this.comboBox1.DataSource = items;
I had a similar error, My Class is
public class ServerInfo
{
public string Text { get; set; }
public string Value { get; set; }
public string PortNo { get; set; }
public override string ToString()
{
return Text;
}
}
But what I did, I casted my class to the SelectedItem property of the ComboBox. So, i'll have all of the class properties of the selected item.
// Code above
ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem;
mailClient.ServerName = emailServer.Value;
mailClient.ServerPort = emailServer.PortNo;
I hope this helps someone!
Cheers!
The problem you have with the SelectedValue
is not converting into integer. This is the main problem so usinge the following code snippet will help you:
int selectedValue;
bool parseOK = Int32.TryParse(cmb.SelectedValue.ToString(), out selectedValue);
Try this:
int selectedIndex = comboBox1->SelectedIndex;
comboBox1->SelectedItem->ToString();
int selectedValue = (int)comboBox1->Items[selectedIndex];
Try this:
private void cmbLineColor_SelectedIndexChanged(object sender, EventArgs e)
{
DataRowView drv = (DataRowView)cmbLineColor.SelectedItem;
int selectedValue = (int)drv.Row.ItemArray[1];
}