Я считаю, что проблема в том, что ваши "страны" не поддаются наблюдению, плюс это должна быть собственность.Рассмотрим следующий код:
private ObservableCollection<string> _Countries;
public ObservableCollection<string> Countries
{
get { return _Countries; }
set { _Countries = value; }
}
Инициализируйте и установите его содержимое в Form5_Load и посмотрите, работает ли он.
EDIT 1:
Мне было любопытно, так что я на самом делесоздал проект и попытался воссоздать проблему, и я считаю, что реальная проблема заключается в том, что ваш DataGridView заполняется в соответствии с информацией, которую вы получаете из БД.Я посмотрел на это немного дальше и нашел этот пост на SO:
C # Заменить текстовое поле по умолчанию в DataGridView на Combobox
Согласно этому, вы не можетеизмените тип столбца на DataGridView ComboBox Столбец, после того как он уже был создан как DataGridView TextBox Столбец в соответствии с данными, полученными из БД.Он также предлагает два разных подхода к делу, которые звучат реалистично.Я надеюсь, что вы можете понять это, удачи.
РЕДАКТИРОВАТЬ 2:
В соответствии с вашим запросом, я постараюсь найти способ сделать это путем изменения данных, которые вы получаете из БД.
В следующем фрагменте кода у вас есть объект "dt", который содержит данные, которые вы хотите отобразить в вашем DataGridView.
dt = new DataTable();
adapter.Fill(dt);
dataGridView1.DataSource = dt;
Я сам никогда этого не делал, иЯ не могу по-настоящему быстро воссоздать его, но я предлагаю вам попробовать поиграть с содержимым объекта "dt".Я полагаю, что код, который происходит в "adapter.Fill" создает DataTable в соответствии с данными из базы данных, вы можете попробовать добавить туда некоторый код, который добавит список вместо строки для столбца "type" (это поможетнасколько я понимаю, создайте ComboBoxColumn вместо TextBoxColumn.Я на самом деле проверил это прямо сейчас, и это выглядит немного сложным, но я действительно не знаю, что там происходит в вашей программе, это может быть так же просто, как и получается.
В любом случае, я попытался сделать это по-другому, вместо того, чтобы изменить существующий тип столбца, я добавил новый собственный DataGridViewComboBoxColumn в конец автоматически заполненного DataGridView:
![enter image description here](https://i.stack.imgur.com/q1XZf.png)
DataTable dt = new DataTable();
dataGridView2.DataSource = dt;
DataGridViewComboBoxColumn newColumn = new DataGridViewComboBoxColumn();
newColumn.DataSource = new List<string> { "asd", "qwe", "zxc" };
dataGridView2.Columns.Add(newColumn);
Затем вы можете просто удалить / удалить несоответствующий столбец типа, полученный из базы данных.Но на этом пути вы столкнетесь с некоторыми другими проблемами, такими как подключение выбранного объекта в выпадающем списке к другим данным в строке.Это не сложно, но может стать относительно уродливым.