2015-07-09 2 views
0

Программа представляет собой объект minidatabase-ish для целей заказа продукта, где я сохраняю уникальные порядки в структуре и имена продуктов в перечислении (для практики в основном). У меня только 3 имени продукта (Product0, Product1, Product2), и они добавляются в поле со списком (cbo_productNameEdit.DataSource = Enum.GetNames(typeof(productNames));).Struct & Enum, Combobox.SelectedItem

В любом случае, после сохранения заказа, я хочу, чтобы этот combobox менял выбранный элемент на имя сохраненного продукта, но он этого не делает. Я проверил это с MessageBox, чтобы увидеть, если он не хранить его правильно ...

MessageBox.Show(Orders[cbo_productID.SelectedIndex].productName.ToString()); 
cbo_productNameEdit.SelectedItem = Orders[cbo_productID.SelectedIndex].productName; 

... MessageBox вернулся product2, который действительно является правильным, но выбранный элемент остался в Product0.

ответ

0

Одна вещь, которую вы могли бы сделать, чтобы решить это установить SelectedIndex вместо SelectedItem собственности на ComboBox. По умолчанию Enums основаны на 0 целых чисел, поэтому индекс будет соответствовать значению перечисления.

cbo_productNameEdit.SelectedIndex = (int)Enum.Parse(typeof(productNames), 
          Orders[cbo_productID.SelectedIndex].productName.ToString()); 
+0

** 1 ** Перечни являются а не 0 на основе целых чисел. Вы можете использовать значения перечисления с отрицательными целыми числами или значения могут начинаться с других чисел, тогда 0. ** 2. ** Усушение того, что 'SelectedIndex' будет всегда таким же, как значение выбранного перечисления далеко от хорошего решения. – Fabio

+0

1. По умолчанию они есть, вот что я имел в виду. 2. Он хотел получить ответ на заданный вопрос, и это решение работает. Я согласен, что это не лучший способ, но – Zillo

+0

Если, например, он будет иметь перечисление со значениями '{0, 1, 4, 5}', ваше решение не будет работать. И извините, но из фразы _Enums основаны на 0 целых чисел. Трудно понять, что это только по умолчанию :) – Fabio

0

Поскольку вы использовали .DataSource свойство для заполнения ComboBox с пунктами
Вы должны использовать .SelectedValue для установки выбирающего элемента

cbo_productNameEdit.SelectedValue = Orders[cbo_productID.SelectedIndex].productName; 

Из MSDN:. ComboBox.SelectedValue