Arhn - архитектура программирования

Заполнение DataGridViewComboBoxColumn ключами и значениями словаря

У меня есть словарь, в котором в качестве ключей используется трехбуквенный код страны, а в качестве значений - название страны.

Dictionary<string, string> CountryList=new Dictionary<string, string>();

У меня также есть DataGridView и DataTable. Что я хотел бы сделать, так это создать DataGridViewComboBoxColumn для определенных столбцов в моих столбцах DataTable, которые отображают информацию о стране. Так, например, один из моих столбцов в моем DataTable называется Country, и я хотел бы, чтобы в этом столбце было раскрывающееся поле со списком, в котором отображается название страны, а при выборе оно заполняет ячейку в DataTable. ключом из словаря (трехбуквенный код). Тем не менее, я полностью озадачен тем, как это сделать. Должен ли я установить DataSource на ключи, а DisplayMember на значения? Я попробовал это и получил ошибку:

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn();
buildCountries.HeaderText = "List of Countries";
buildCountries.DataSource = CountryList.Keys.ToString();
buildCountries.DisplayMember = CountryList.Values.ToString();

Комплексная привязка данных принимает в качестве источника данных либо IList, либо IListSource.

Я не уверен, как это сделать.

29.11.2012

Ответы:


1

Я не уверен на 100%, но я думаю, что вы не сможете добиться этого так, как пытались. Я знаю, что это можно рассматривать как тяжелую артиллерию, но вы можете создать DataTable из Dictionary и сделать на ней DataBinding.

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn();
buildCountries.HeaderText = "List of Countries";
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Keys");
dataTable.Columns.Add("Values");
KeyValuePair<string, string> [] array = CountryList.ToArray();
foreach(KeyValuePair<string, string> kvp in array)
{
        dataTable.Rows.Add(kvp.Key, kvp.Value);
}
buildCountries.DataSource = dataTable;
buildCountries.DisplayMember = "Values";
buildCountries.ValueMember = "Keys";
dataGridView1.Columns.Add(buildCountries);
29.11.2012

2

С помощью Keys.ToString() вы создаете строку, представляющую коллекцию ключей, а не получаете список ключей. Это вернет:

System.Collections.Generic.Dictionary'2+KeyCollection[System.String,System.String]

DisplayMember — это имя свойства каждого элемента в DataSource, которое должно отображаться в поле со списком — вероятно, это должно быть "Value".

Попробуй это:

Dictionary<string, string> CountryList=new Dictionary<string, string>();

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn();
buildCountries.HeaderText = "List of Countries";
buildCountries.DataSource = CountryList.ToArray();
buildCountries.ValueMember = "Key";
buildCountries.DisplayMember = "Value";

CountryList.ToArray() даст вам массив KeyValuePair<string, string>s, который реализует IList.

Если вы хотите получить выбранный код страны, используйте buildCountries.SelectedValue.

29.11.2012

3

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

 buildCountries .DisplayMember = "Key";
 buildCountries .ValueMember = "Value";
 buildCountries .DataSource = new BindingSource(CountryList, null);
25.07.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..