Я предполагаю, что ваша таблица будет содержать не более одного адреса для каждого из значений перечисления. То есть ноль или одно почтовое отправление, ноль или одно физическое, ноль или одно почтовое отправление и т. Д.
Нет необходимости создавать привязку данных (и она не будет работать). Также нет необходимости создавать источник данных для поля со списком. Просто используйте один и тот же BindingSource для таблицы и поля со списком, и они будут автоматически синхронизированы.
public class Address
{
public AddressType AddressType { get; set; }
public string Street { get; set; }
// etc...
}
public enum AddressType
{
Business,
Home,
Other,
PostOfficBox,
}
Чтобы продемонстрировать это, добавьте ComboBox и BindingSource к форме, установите для источника данных BingingSource тип Address, добавьте TextBox и привяжите его к свойству Street объекта BindingSource.
Затем поместите этот код в конструктор Form1:
{
var addresses = new List<Address> {
new Address { AddressType = AddressType.Business, Street = "123 Commercial Ave" },
new Address { AddressType = AddressType.Home, Street = "456 Suburbia Lane" },
new Address { AddressType = AddressType.Other, Street = "789 Booty Blvd" },
new Address { AddressType = AddressType.PostOfficBox, Street = "PO BOX 1000" },
};
tableBindingSource.DataSource = addresses;
comboBox1.DataSource = tableBindingSource;
comboBox1.DisplayMember = "AddressType";
}
Поле со списком вызовет ToString () для AddressType, так что вы увидите имена значений перечисления. Если вы хотите увидеть другое значение (например, «Почтовый ящик» вместо «PostOfficeBox»), есть еще кое-что сделать. Я знаю, что написал ответ об этом раньше, поэтому я не буду повторять его здесь (спросите меня или поищите мои ответы, если хотите).
Выбор элемента в выпадающем списке изменит текущий элемент его BindingSource, и все другие элементы управления, связанные с этим BindingSource, будут обновлены.