C# В комбинированном окне WindowsForm отображается неверное «Отображаемое значение» - PullRequest
0 голосов
/ 03 апреля 2020

Цель:

  • Получить все каталоги файлов из MySQL и поместить их в словарь.

  • Отобразите их в поле со списком, как имя файла. например, filename

  • Назначьте значение поля со списком в качестве полного каталога. например, c:\users\user\desktop\filename.jpg

Код:

string filenames = "select filename from  request_label_signoff where progress_user1 is null or progress_user2 is null";

//On load - load specific images from query above
private void Form15_Load(object sender, EventArgs e)
{

    //Dict to store file into
    Dictionary<string, string> files = new Dictionary<string, string>();

    using (var conn = new MySqlConnection(connString))
    {
        conn.Open();
        using (var cmd = new MySqlCommand(filenames, conn))
        {
            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {   
                    //add filename without extension and full directory
                    files.Add(Path.GetFileNameWithoutExtension(reader.GetString(0)), reader.GetString(0));
                }
            }
        }

    }

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

}




private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    value = ((KeyValuePair<string, string>)comboBox1.SelectedItem).Value;
    pictureBox1.Image = Image.FromFile(value);

}

Проблема:

По какой-то причине отображаемое значение для выпадающего списка выглядит следующим образом:

enter image description here

Вывод текста: [abc 123, C:\Users...]

Тогда как оно должно быть abc 123 без каталога рядом с ним.

Вопрос:

Почему в поле со списком отображается оба элемента?

Ответы [ 2 ]

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

Вместо этого: Dictionary<string, string> files = new Dictionary<string, string>();

Я использовал: var choices = new Dictionary<string, string>();

Как указано в комментарии hans-passant

И все работает. Не уверен, в чем разница.

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

Вам необходимо изменить порядок назначения в выпадающем списке.

Причины:

Вместо:

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

должно быть:

comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
comboBox1.DataSource = new BindingSource(files, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...