2014-12-19 2 views
1

Как и для previous question, но для .NET 4.5, где принятый ответ не работает, когда я его пытаюсь.Словарь как источник данных для ComboBox

Я пытаюсь заполнить ComboBox из Словаря. Никаких ошибок компилятора, но я получаю ArgumentException: «Сложный DataBinding принимает в качестве источника данных либо IList, либо IListSource». Это заставляет меня думать, что способ, которым я привязываюсь, ComboBox только позволит мне заполнить один или другой, поскольку List - только один размер.

упрощенный код:

Dictionary<string,string> orgs = await api.CreateOrgMap(); 
organizationListComboBox.DataSource = orgs; 

Я мог бы использовать список объекта с полями ключом и значения, но это кажется глупым, когда словарь должна работы и заканчивается с бонусным объектом. Что я делаю неправильно/это уже невозможно?

Я не уверен, что это имеет значение, но я использую WinForms.

+0

Вы хотите как ключ и значение, чтобы показать в списке, это то, что вы пытаетесь достичь? – SwDevMan81

+0

Нет. Я хочу иметь возможность выбрать Ключ из ComboBox и получить соответствующее значение. Поиск через Ключи Словаря, чтобы это выглядело как неправильное направление. –

+0

Можете ли вы опубликовать, что не так с решением, указанным в вопросе, который вы ссылаетесь: http://stackoverflow.com/a/6412893/95573 – SwDevMan81

ответ

2

Я думаю, что вы не можете следовать примеру в указанной теме?

organization.ListComboBox.DataSource = orgs; 

Должно быть:

organization.ListComboBox.DataSource = new BindingSource(orgs, null); 
+1

... спасибо! Я пробовал этот конструктор, но я, должно быть, пропустил то, что написано в ответ_. –

+0

Я только что попробовал, но у меня нет достаточной репутации, чтобы поддержать ваш ответ, но еще раз спасибо! –

+0

Спасибо! отлично работает .. это выигрышная ставка! Вы знаете, как избавиться от отображаемых скобок .. [..value ..] –

0

Я использую List все время в VB.NET. Словарь должен работать одинаково.

cmbox.DataSource = GetStores(); //this function is returning a list 
cmbox.DisplayMember = "Joined"; //this is a property for an item in the list 
cmbox.ValueMember = "ID"; //this is another property for an item in the list 

Регистрация = Key ID = Значение - или вице-Versa надеются, что C# перевод правильный, и надеюсь, что это помогает.

Также может быть проще прокрутить словарь, чтобы сделать список IE, отбрасывая ключи, а затем бросает список в поле со списком. поскольку вы не используете клавиши для комбинированного блока.

+0

. В этом случае GetStores() возвращает объект, эквивалентный List <{string ID, string Registration}>, правильно? –

+0

Да, поэтому я думаю, что словарь мог бы сделать то же самое с Key и Value. (GetStores()) возвращает много свойств, но я использую только эти два для combobox). – nward32

Смежные вопросы