2016-10-07 9 views
0

Среди других элементов управления в форме окна, у меня есть CheckedListBox, содержащий многочисленные код items.the для заполнения CheckedListBox является:Как получить индекс из выбранного значения элемента checkedlistbox?

Dictionary<string, string> ciDict = new Dictionary<string, string>(); 
ciDict.Add("1", "Audi"); 
ciDict.Add("2", "Suzuki"); 
ciDict.Add("3", "Saab"); 
ciDict.Add("4", "Tata"); 

clb.DataSource = new BindingSource(ciDict, null); 
clb.DisplayMember = "Value"; 
clb.ValueMember = "Key"; 

Когда я сохранить данные в таблице, я спасая «ValueMember'.Now в режиме редактирования указанной формы, я хочу, чтобы проверенные элементы CheckedListBox проверялись с помощью сохраненного ранее параметра. Моя проблема заключается в том, как найти индекс элементов CheckedListBox у его оценщика. Надеюсь, вы поймете мой вопрос.

while (rdrCCA.Read()) 
{ 
    int index= clbCSA.Items.IndexOf(rdrCCA["CCA_ITEM_ID"]); 
    clbCSA.SetItemChecked(index, true); 
} 

где

clbCSA= name of the checkedlistbox control 
CCA_ITEM_ID = name of the table field where valumember are being stored. 

Этот код не work.Please консультации с некоторым кодом.

+0

ли вы получить исключение? Что происходит в цикле while? Любая вероятность того, что значения в словаре и те, что поступают из БД, не синхронизируются? –

ответ

1

Поскольку ваши данные в словаре, самый простой способ найти индекс по значению является нахождение индекса значения в словаре так:

var index = yourDictionary.Keys.ToList().IndexOf("SomeValue"); 
if(index > -1) 
    checkedListBox1.SetItemChecked(index, true); 
+0

Спасибо большое @Reza, вы снова помогли мне с кодом. В последнее время около 1 года назад вы помогли мне с моим кодом. –

+0

Ваш прием :) –

+0

Вызов '.Cast ()' не нужен, поскольку значение свойства '.Keys' будет реализовывать' IEnumerable '. Кроме того, это не совсем так сложно, но вы можете избежать создания списка с помощью: var searchIndex = ciDict.Select ((пара, index) => new {pair.Key, Index = index}). Single (item => item.Key == «SomeValue»). Index; '(или заменить' .First() 'для' .Single() ', поскольку мы знаем, что не могут быть дубликаты ключей). – BACON