Привязать комбинированный список к списку и изменить положение других таблиц - PullRequest
1 голос
/ 23 ноября 2011

У меня есть следующее:

  • таблица адресов и источник привязки для таблицы
  • список перечислений типа адреса: 0 = "Mailing", 1 = "Physical"", 2 =" Доставка "и т. Д. *

Я бы хотел связать источник данных в комбинированном ящике с перечислением, чтобы он отображал" Рассылка "," Физический "и т. Д. Затем я бы хотелизменить положение источника привязки в адресной таблице в зависимости от выбора пользователя в поле со списком.

Вот что у меня есть:

cbxAddressName.DataSource = New BindingSource(ApplicationEnums.GetEnumList(GetType(ApplicationEnums.CompanyAddressType)), Nothing)
cbxAddressName.ValueMember = "Value"
cbxAddressName.DisplayMember = "Key"

cbxAddressName.DataBindings.Add("SelectedIndex", bgsAddress, "AddressType", False)

Это правильно отображает перечисление в списке, но нене изменять положение источника привязки.

Таблица адресов выглядит следующим образом:

  • AddressID
  • AddressType
  • Street
  • State
  • Zip
  • Country

C # или VB.NET код был бы отличным, спасибо.

1 Ответ

1 голос
/ 23 ноября 2011

Я предполагаю, что ваша таблица будет содержать не более одного адреса для каждого из значений перечисления. То есть ноль или одно почтовое отправление, ноль или одно физическое, ноль или одно почтовое отправление и т. Д.

Нет необходимости создавать привязку данных (и она не будет работать). Также нет необходимости создавать источник данных для поля со списком. Просто используйте один и тот же 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, будут обновлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...