2016-10-07 10 views
0

Windowsフォーム内の他のコントロールの中で、私はにCheckedListBoxを取り込むための多数のitems.Theコードを含むにCheckedListBoxを持っているのです。私は、テーブル内のデータを保存すると、私は「ValueMember'.Nowをcheckedlistboxコントロールのselectedvalueからインデックスを取得する方法は?

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"; 

保存しています上記のフォームの編集モードでは、私はCheckedListBoxアイテムは、先に保存されたvaluememberを使用してチェックしたい。私の問題は、そのvaluemember ??? CheckedListBoxアイテムのインデックスを見つける方法です。

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

このコードはいくつかのコードとのアドバイスをwork.Pleaseしない

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

+0

あなたは例外を得るのですか? whileループではどうなりますか?辞書内の値とDBから来た値が同期しなくなる可能性はありますか? –

答えて

1

あなたのデータが辞書にあるので、値によってインデックスを見つけるための最も簡単な方法は、辞書にこの方法を値のインデックスを見つけることです:

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

ありがとうございます@Reza、あなたはもう一度あなたのコードで私を助けました。約1年前にあなたは私のコードで私を助けていた。 –

+0

あなたの歓迎:) –

+0

'.Kast 'プロパティの値が' IEnumerable 'を実装するので、' .Cast () 'の呼び出しは不要です。また、それほど簡潔ではありませんが、 'var searchIndex = ciDict.Select((pair、index)=> new {pair.Key、Index = index})でリストの作成を避けることができます。 == "SomeValue")。Index; '(あるいは重複するキーが存在しないので、' .Single() 'に' .First() 'を置き換えます)。 – BACON

関連する問題