2017-07-17 54 views
0

我有一個CheckedListBox。作爲DataSource,我使用我自己的類var dataSource3 = new BindingList<Modells.Person>();的BindingList。在CheckedListBox中選擇項目,如果它出現在列表中

後來我把它們分類爲alphapetical。

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

並綁定它們。

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

我自己的類的結構是這樣的:

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獲得的其他列表:IRestResponse<List<Modells.Person>> selectedPersons = client.Execute<List<Modells.Person>>(request);

而現在的任務是在CheckedListBox sorteddataSource3中設置從selectedPersons中選中的人員。

我在這個時間點解決辦法是:

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中的對象具有相同的值,但它們自身的對象不相同。你需要實施某種比較。一個非常簡單的方法將是從sorteddataSource3選擇項目還出現在selectedPersons(具有相同的值的至少對象),然後迭代那些(在這個例子中我假定,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()); 
相關問題