0
votes

Trying to get the value of the selected object in a combobox (dropdown list) Getting this error:

System.InvalidCastException: 'Unable to cast object of type
'System.Collections.Generic.KeyValuePair`2[System.String,schoolstuff.Employee]' to type 'schoolstuff.Employee'.'

I tried to find a "Value" for the cboEmployees.SelectedItem but it doesn't seem like there is any..

employees[employee.Name] = employee;

cboEmployees.DataSource = new BindingSource(employees, null);
cboEmployees.DisplayMember = "Key";
cboEmployees.ValueMember = "Value";

private void cboEmployees_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cboEmployees.SelectedItem == null) return;

    var employee = (Employee)cboEmployees.SelectedItem;

    if(employee != null)
        txtName.Text = employee.Name;
}
2
@HenkHolterman yeah, had just spotted & fixed. Whoops! - Charles Mager

2 Answers

1
votes

Your SelectedItem isn't an Employee.

Either use SelectedValue

var employee = (Employee)cboEmployees.SelectedValue;

Or cast to KeyValuePair<string, Employee>

var kvp = (KeyValuePair<string, Employee>)cboEmployees.SelectedItem;
var employee = kvp.Value;
1
votes

cboEmployees.SelectedItem is a KeyvaluePair<K,V>.

So you cannot cast it like this: (Employee)cboEmployees.SelectedItem

This ought to work:

var employee = ((KeyValuePair<string,Employee>)cboEmployees.SelectedItem).Value;

Or you could use SelectedValue instead:

    if (cboEmployees.SelectedValue == null) return;
    var employee = (Employee)cboEmployees.SelectedValue;