Комбинированные поля с несколькими столбцами - PullRequest
0 голосов
/ 11 января 2012

Я читал, что поля со списком не могут иметь несколько столбцов.Это немного застревает, поскольку я хочу отобразить одно поле из таблицы, но вернуть соответствующее значение из второго поля в той же таблице, т. Е.

Я хотел бы показать CustomerNames в комбополе, но когда пользователь выбирает имя, вместо него возвращается поле CustomerID.Как лучше обойти это?

Ответы [ 7 ]

2 голосов
/ 11 января 2012

Лучший способ - использовать свойства со списками DisplayMember и ValueMember

, установите ComboBox.DisplayMember для свойства, которое вы хотите отобразить.Используйте ValueMember для свойства, которое вы хотите вернуть.Затем вы можете использовать ComboBox.SelectedValue, чтобы получить текущий / выбранный ValueMember

1 голос
/ 11 января 2012

Вам не нужно несколько столбцов для его реализации.

class Member
{
    public string Name{get;set;}
    public string Address{get;set;}
    public int ID{get;set;}

    public string Description
    {
        get
        {
            return string.Format("{0}, {1}", Name, Address);
        }
    }
}

var members = new []
{
   new Member(){ID = 1, Name = "John", Address = "Addr 1"},
   new Member(){ID = 2, Name = "Mary", Address = "Addr 2"}
};

m_ComboBox.DataSource = members;
m_ComboBox.DisplayMember = "Description"
m_ComboBox.ValueMember = "ID";

теперь вы можете получить доступ к выбранному идентификатору

var selectedID = m_ComboBox.CelectedValue();
1 голос
/ 11 января 2012

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

0 голосов
/ 11 января 2012

Вы можете использовать свойство Tag ComboBoxItem для хранения значения.

0 голосов
/ 11 января 2012

Кроме того, вы можете определить объекты KeyValuePair с вашими идентификаторами и текстовыми полями.Подайте их в комбо, так как его свойство Items является коллекцией объектов.Затем для извлечения используйте приведение типа

var x = (KeyValuePair)combo.Items[0];

, а затем получите доступ к свойствам ключа и значения x.

0 голосов
/ 11 января 2012

Посмотрите на свойство ValueMember.Вы должны установить это в CustomerID.После привязки к комбинированному списку фактическое поле, отображаемое для пользователя, будет CustomerName, но когда вы захотите получить значение «CustomerName», оно вернет CustomerID.

Когда вы хотите получитьзначение в поле со списком, просто укажите SelectedValue.

Если вы непреклонны в отображении обоих в списке, есть несколько хакерских способов сделать это, но я бы порекомендовал пересмотреть ваши требования еще раз и посмотреть,это абсолютно необходимо.

0 голосов
/ 11 января 2012

Вы можете добиться желаемого поведения, установив свойства DisplayMember и ValueMember ComboBox равными "CustomerName" и "CustomerID" соответственно.

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