Получить индекс из Combobox на основе ValueMember - PullRequest
1 голос
/ 20 января 2020

У меня есть Combobox, который хранит name как DisplayMember и id как ValueMember. В моей базе данных я храню только id.

. Как мне установить правильный индекс на id?

Пример кода:

Combobox.SelectedIndex = Combobox.FindByValueMember("10");

Лучшим, что я смог найти, был этот вопрос, но наиболее проголосовавший ответ не понял, что это был за вопрос.

int index = comboref.Items.IndexOf("string");

Не работает, так как не выполняет поиск по ValueMember.

Это отвечает, но мне интересно, есть ли лучший способ сделать это.

1 Ответ

4 голосов
/ 20 января 2020

Вам не нужно искать индекс на основе выбранного значения, просто установите SelectedValue.

Пример 1 - Установите SelectedValue

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = Enumerable.Range(1, 5)
        .Select(x => new { Name = $"Product {x}", Id = x }).ToList();
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Id";
}
private void button1_Click(object sender, EventArgs e)
{
    comboBox1.SelectedValue = 3;
}

Хотя в приведенном выше примере показано, как установить выборку с использованием выбранного значения, если по какой-либо причине вы хотите найти элемент или выбранный индекс на основе этого значения, вам необходимо использовать этот метод расширения GetItemValue и найти На этом основывается элемент.

Пример 2 - Получить элемент по значению → Установить SelectedItem

private void button1_Click(object sender, EventArgs e)
{
    var value = 3;
    var item = comboBox1.Items.Cast<Object>()
        .Where(x => comboBox1.GetItemValue(x).Equals(value))
        .FirstOrDefault();
    comboBox1.SelectedItem = item;
}

Пример 3 - Получить индекс по значению → Установить SelectdIndex

private void button1_Click(object sender, EventArgs e)
{
    var value = 3;
    var item = comboBox1.Items.Cast<Object>()
        .Where(x => comboBox1.GetItemValue(x).Equals(value))
        .FirstOrDefault();
    var index = comboBox1.Items.IndexOf(item);
    comboBox1.SelectedIndex = index;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...