System.InvalidCastException: 'Невозможно привести объект - PullRequest
0 голосов
/ 15 февраля 2019

Попытка получить значение выделенного объекта в выпадающем списке (выпадающий список) Получение этой ошибки:

System.InvalidCastException: 'Невозможно привести объект типа
' System.Collections.Generic.KeyValuePair`2 [System.String, schoolstuff.Employee] 'для ввода' schoolstuff.Employee '.'

Я попытался найти «Значение» для cboEmployees.SelectedItem, но это неКажется, что есть ..

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 ]

0 голосов
/ 15 февраля 2019

Ваш SelectedItem не является Employee.

Либо используйте SelectedValue

var employee = (Employee)cboEmployees.SelectedValue;

Или приведите к KeyValuePair<string, Employee>

var kvp = (KeyValuePair<string, Employee>)cboEmployees.SelectedItem;
var employee = kvp.Value;
0 голосов
/ 15 февраля 2019

cboEmployees.SelectedItem является KeyvaluePair<K,V>.

Так что вы не можете разыграть его следующим образом: (Employee)cboEmployees.SelectedItem

Это должно сработать:

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

Или вместо этого вы можете использовать SelectedValue:

    if (cboEmployees.SelectedValue == null) return;
    var employee = (Employee)cboEmployees.SelectedValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...