У вас нет ингредиентов для воды или джина в вашем списке "componentDB". Источник данных DataGridView настроен на список ингредиентов. Когда форма загружена, она автоматически создает 3 столбца (Имя, Описание, Количество) на основе свойств вашего бизнес-объекта (то есть Ingredient). Затем строки добавляются на основе вашего списка ингредиентов («Вода» и «Джин»). Таким образом, в результате у вас есть 3 столбца и 2 строки в вашем DataGridView, и это выглядит так:
Name | Description | Amount
Water | Wet | 2
Gin | Yummy | 2
Однако вы вставляете DataGridViewComboBoxColumn в столбец 0 (т. Е. В первый столбец), и именно в этом проблема.
Источник данных DataGridVidwComboBoxColumn установлен на ваш BindingSource dataBs, который, в свою очередь, установлен на «componentDB». В "componentDB" содержатся только записи для "риса", "цельной пшеничной муки" и "сливочного масла". Когда столбец отображается для первой строки, он ищет ингредиент с именем == "Вода" в своем источнике данных ("componentDB"). Этот «componentDB» не содержит Ingredient for Water и обычно вызывает DataGridViewDataErrorEvent. Однако вы сами обрабатываете событие и ничего с ним не делаете. Поэтому в ComboBox ничего нет. То же самое происходит с ингредиентом "Джин". Ингредиент "Джин" не может быть найден в вашем "ингредиенте DB", поэтому его нельзя выбрать.
Чтобы решить эту проблему, вам нужно добавить «Water» и «Gin» к вашему «componentDB»:
public Data()
{
ingredientDB = new BindingList<Ingredient>();
ingredientDB.Add(new Ingredient("rice", "a grain", 2));
ingredientDB.Add(new Ingredient("whole wheat flour", "for baking", 1));
ingredientDB.Add(new Ingredient("butter", "fatty", 3));
ingredientDB.Add(new Ingredient("Water", "Wet", 2));
ingredientDB.Add(new Ingredient("Gin", "Yummy", 2));
}