2017-07-17 17 views
0

CheckedListBoxがあります。データソースとして、私自身のクラスvar dataSource3 = new BindingList<Modells.Person>();のBindingListを使用します。CheckedListBoxの項目をリスト内に存在する場合に選択します。

その後、私はアルファベット順に並べ替えます。

var sorteddataSource3 = new BindingList<Modells.Person>(dataSource3.OrderBy(x => x.lastname).ToList()); 

そしてそれらを結合する。

clbPerson3.DataSource = sorteddataSource3; 
clbPerson3.DisplayMember = "lastname"; 
clbPerson3.ValueMember = "idPerson"; 

私自身のクラスは、このように構成されていますIRestResponse<List<Modells.Person>> selectedPersons = client.Execute<List<Modells.Person>>(request);

そして今、タスクは次のとおりです。

public class Person 
{ 
    public int idPerson { get; set; } 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    public string phonenumber { get; set; } 
    public string mailadress { get; set; } 
    public int idCompany { get; set; } 
} 

は今、私はRestRequestから取得する「人」、の他のリストを持っていますCheckedListBoxでselectedPersonsの人物をチェックします。sorteddataSource3。この時点で

私の解決策は次のとおりです。

for (int i = 0; i < selectedPersons.Data.Count; i++) 
{ 
    if (selectedPersons.Data[i].idCompany.Equals(comboBox3.SelectedValue)) 
    { 
     int index3 = clbPerson3.Items.IndexOf(selectedPersons.Data[i].idPerson); 
     clbPerson3.SetItemChecked(index3, true); 
    } 
} 

まず人がにCheckedListBoxに表示されている場合、私は確認してください。 その後、私は人のインデックスを取得しようとします。そして、ここには私の間違いがあります。 index3は常に-1です。

CheckedListBoxで項目を設定するソリューションを探しています。

+0

)__selecting__と__checking__が混在しているようです。 – TaW

答えて

2

selectedPersonsのオブジェクトはsorteddataSource3のオブジェクトと同じ値を持つことがありますが、オブジェクト自体は同じではないという問題があります。あなたは何らかの比較を実装する必要があります。非常に単純なアプローチは、selectedPersons(同じ値を持つ少なくともオブジェクト)に表示されるsorteddataSource3から項目を選択すること、次いで、それらの(この例では、私はidPersonが主キーであることを想定)反復処理であろう:

var selectList = sorteddataSource3.Where(s => selectedPersons.Data.Any(p => p.idPerson == s.idPerson)).ToList(); 

foreach(Person person in selectList) 
{ 
    int index3 = clbPerson3.Items.IndexOf(person); 
    clbPerson3.SetItemChecked(index3, true); 
} 
0

clbPerson3.Itemsは厳密にタイプされており、すべてのアイテムはPersonタイプであり、このコレクション内の番号は探していますが、これは明らかに見つかりませんでした。したがって、検索機能は少し異なるはずです(例:

int index3 = clbPerson3.Items.IndexOf(dataSource3.Where(p => p.idPerson == selectedPersons.Data[i].idPerson).Single()); 
関連する問題