Словарь как источник ComboBox заканчивается в InvalidCastException - PullRequest
0 голосов
/ 24 апреля 2020

Я использую словарь в качестве источника данных для моего ComboBox в C#.

comboBox1.DataSource = new BindingSource(Activities,null);
comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value";

Также у меня есть событие SelectedIndexChanged для comboBox1

if (comboBox1.SelectedValue != null)
{
   selected_id = Convert.ToInt32(comboBox1.SelectedValue);
}

Первый раз (так я думаю в то время как поле со списком заполняется) Я начинаю отладку, я получаю «System.InvalidCastException», и если я смотрю в «SelectedValue» comboBox1, есть ключ, а также значение, сохраненное в ... После нажатия F5, чтобы продолжить и попытаться выбрал один элемент из comboBox1 - все хорошо, и только ключ хранится в comboBox1.SelectedValue (поэтому работает назначение selected_id).

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 24 апреля 2020

Вот простой пример с несколькими изменениями, посмотрите, может ли это работать на вас.

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace CodeSample
{
    public partial class Form1 : Form
    {
        private readonly Dictionary<string,int> _activities = new Dictionary<string, int>()
        {
            {"Apples",1},
            { "Grapes", 2 },
            { "Cherries", 3 }
        };
        private readonly BindingSource _bindingSource = new BindingSource();
        private int _selectedId;

        public Form1()
        {
            InitializeComponent();
            Shown += Form1_Shown;
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            _bindingSource.DataSource = _activities;
            comboBox1.DataSource = _bindingSource;
            comboBox1.DisplayMember = "Key";
        }

        private void currentItemButton_Click(object sender, EventArgs e) => 
            _selectedId = ((KeyValuePair<string, int>) _bindingSource.Current).Value;
    }

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