У меня была похожая проблема, и я решил ее частично с помощью других ответов здесь. Во-первых, моей конкретной проблемой было то, что
combobox1.SelectedItem = myItem;
не работал должным образом. Основной причиной было то, что myItem был объектом из группы, которая фактически представляла собой тот же список, что и элементы в выпадающем списке, но на самом деле это была копия этих элементов. Таким образом, myItem был идентичен допустимой записи, но сам по себе не был допустимым объектом из контейнера combobox1.
Решением было использование SelectedIndex вместо SelectedItem, например:
combobox1.SelectedIndex = get_combobox_index(myItem);
, где
private int get_combobox_index(ItemClass myItem)
{
int i = 0;
var lst = combobox1.Items.Cast<ItemClass >();
foreach (var s in lst)
{
if (s.Id == myItem.Id)
return i;
i++;
}
return 0;
}