C # комбинированный список, как выпадающий список в веб-приложении - PullRequest
1 голос
/ 01 декабря 2011

У меня есть компонент comboBox, и я добавляю элементы типа comboBox1.Items.Add("Item1"). Но мне также нужно знать некоторую другую информацию об этом пункте. Поэтому, если я нажму «Item1», мне нужно получить "102454". Могу ли я как-то сохранить 102454 в "Item1" в выпадающем списке.

В веб-приложении есть выпадающий список, который выглядит как

<select>
  <option value="102454">Item1</option>
</select>

и когда я нажимаю «Item1», я получаю 102454.

Могу ли я сделать это в приложении Windows для рабочего стола с помощью выпадающего списка?

Ответы [ 3 ]

3 голосов
/ 01 декабря 2011

Изменить лучшее решение:

Использовать KeyValuePair и ValueMember \ DisplayValue:

comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value";

comboBox1.Items.Add(new KeyValuePair<int, string>(102454, "Item1"));

Как указывает Кристиан, это может быть расширеночтобы быть еще более гибким - вы можете поместить любой объект, который вам нравится, в список элементов, а также установить значение и отобразить элементы в выпадающем списке таким образом, какой путь свойств вы хотите.


Чтобы получить ключпозже вы можете сделать это:

var item = combobox1.SelectedItem;

int key = ((KeyValuePair<int, string>)item).Key;
0 голосов
/ 01 декабря 2011

A создали подобный класс, как предложил Марк Пим; однако мой использует дженерики. Конечно, я бы не стал делать свойство Value строковым типом.

    public class ListItem<TKey> : IComparable<ListItem<TKey>>
    {
        /// <summary>
        /// Gets or sets the data that is associated with this ListItem instance.
        /// </summary>
        public TKey Key
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the description that must be shown for this ListItem.
        /// </summary>
        public string Description
        {
            get;
            set;
        }

        /// <summary>
        /// Initializes a new instance of the ListItem class
        /// </summary>
        /// <param name="key"></param>
        /// <param name="description"></param>
        public ListItem( TKey key, string description )
        {
            this.Key = key;
            this.Description = description;
        }

        public int CompareTo( ListItem<TKey> other )
        {
            return Comparer<String>.Default.Compare (Description, other.Description);
        }

        public override string ToString()
        {
            return this.Description;
        }
    }

Также легко создать неуниверсальный вариант:

    public class ListItem : ListItem<object>
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ListItem"/> class.
        /// </summary>
        /// <param name="key"></param>
        /// <param name="description"></param>
        public ListItem( object key, string description )
            : base (key, description)
        {
        }
    }
0 голосов
/ 01 декабря 2011

Вы можете взглянуть на свойство SelectedItem .

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