2017-01-30 9 views
2

Я хочу задать пары имени и значения для combobox. Так что я создал класс с именем Item так:C# Winforms - заданное значение combobox

// Content item for the combo box 
private class Item 
{ 
    private readonly string Name; 
    private readonly int Value; 
    private Item(string _name, int _value) 
    { 
     Name = _name; Value = _value; 
    } 
    private override string ToString() 
    { 
     // Generates the text shown in the combo box 
     return Name; 
    } 
} 

и набор данных, как это:

comboBox1.DataSource = null; 
comboBox1.Items.Clear(); 
// For example get from database continentals. 
var gets = _connection.Continentals; 
comboBox1.Items.Add(new Item("--- Select a continental. ---", 0)); 
foreach (var get in gets) 
{ 
    comboBox1.Items.Add(new Item(get.name.Length > 40 ? get.name.Substring(0, 37) + "..." : get.name, Convert.ToInt32(get.id))); 
} 
// It points Africa. 
comboBox1.SelectedValue = 3; 

Вот результат:

// 1 - Europe 
// 2 - Asia 
// 3 - Africa 
// 4 - North America 
// 5 - South America 
// 6 - Australia 
// 7 - Antartica 

В моем примере Африканская континентальная должна быть но это не так. И больше, чем в моей форме редактирования, например, этот код получает из person ДАННЫЕ таблиц:

var a = _connection.persons.SingleOrDefault(x => x.id == Id);

Когда я код comboBox2.SelectedValue = a.continental, Африка континентальный должен быть выбран, но это не так. Я не решил проблему.

+0

Мне кажется, что вам нужно SelectedIndex = 3 или SelectedIndex = IndexOf(). –

+1

SelectedItem, Получает или задает текущий выбранный элемент в ComboBox. – bashkan

ответ

4

Как описано в документации SelectedValue собственности:

Свойство Значение
Объект, содержащий значение элемента источника данных, указанного в ValueMember собственности.

Примечания
Если свойство не указано в ValueMember, SelectedValue возвращает результаты ToString метод объекта.

Чтобы получить желаемое поведение, вы должны выставить Name и Value как общественные свойства вашего Item класса и использовать свойство управления DataSource, ValueMember и DisplayMember:

// Content item for the combo box 
private class Item 
{ 
    public string Name { get; private set; } 
    public int Value { get; private set; } 
    private Item(string _name, int _value) 
    { 
     Name = _name; Value = _value; 
    } 
} 

и использование образца :

// Build a list with items 
var items = new List<Item>(); 
// For example get from database continentals. 
var gets = _connection.Continentals; 
items.Add(new Item("--- Select a continental. ---", 0)); 
foreach (var get in gets) 
{ 
    items.Add(new Item(get.name.Length > 40 ? get.name.Substring(0, 37) + "..." : get.name, Convert.ToInt32(get.id))); 
} 
// Bind combobox list to the items 
comboBox1.DisplayMember = "Name"; // will display Name property 
comboBox1.ValueMember = "Value"; // will select Value property 
comboBox1.DataSource = item; // assign list (will populate comboBox1.Items) 

// Will select Africa 
comboBox1.SelectedValue = 3; 
+1

Я знаю, это текстовое поле для получения дополнительной информации, но большое спасибо за вашу помощь. –