подключить пользовательский список с помощью элемента управления, как Combobox - PullRequest
1 голос
/ 21 августа 2010

У меня есть таблица - пользовательский идентификатор (например, 1.10,1.20) и имя (строка, где значения могут повторяться). И моя проблема заключается в том, чтобы установить его на управление WinForms, как Combobox. Но я хочу, чтобы этот пользователь в поле увидел только имя, а идентификатор не будет виден, но подсознательно должен быть связан с именами в контроле, чтобы при выборе пользователем элемента в выпадающем списке я мог получить этот идентификатор.

есть идеи, что это возможно?

Ответы [ 4 ]

2 голосов
/ 21 августа 2010

Настройте ваше поле со списком следующим образом:

// item type to display in the combobox
public class Item
{
    public int Id { get; set; }
    public string Text { get; set; }
}

// build new list of Items
var data = List<Item>
{
    new Item{Id = 1, Text = "Item 1"},
    new Item{Id = 2, Text = "Item 2"},
    new Item{Id = 3, Text = "Item 3"}
};

// set databind
comboBox1.DataSource = data;
comboBox1.ValueMember = "Id";  // the value of a list item should correspond to the items Id property
comboBox1.DisplayMember = "Text";  // the displayed text of list item should correspond to the items Id property

// get selected value
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var selectedValue = comboBox1.SelectedValue;        
}
1 голос
/ 21 августа 2010

Привязка к списку:

Детали:

class MyItem
{
    public int Id { get; set; }
    public string DisplayText { get; set; }
}

Настройка привязки:

List<MyItem> items = new List<MyItem>
{
    new MyItem(){ Id = 1, DisplayText = "one"},
    new MyItem(){ Id = 2, DisplayText = "two"},
};

comboBox1.DisplayMember = "DisplayText"; // or whatever field your you want to display
comboBox1.DataSource = items;

Найти значение:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var item = comboBox1.SelectedItem as MyItem;
    if (item != null)
        Console.WriteLine(item.Id);
}
1 голос
/ 21 августа 2010

Используйте свойство DisplayMember, чтобы установить, что будет отображаться, и используйте ValueMember, чтобы установить, на что оно действительно ссылается.

например. в вашем случае установите DataSource для таблицы, DisplayMember для имени и ValueMember для идентификатора.

0 голосов
/ 21 августа 2010

Избавление от концепции ItemData должно было стать одной из самых глупых вещей, которые когда-либо делал Microsoft. На самом деле онемение ума.

Это именно то, что вам нужно.

Вот ссылка, которая имитирует это поведение. ItemData

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