2011-07-30 91 views
1

我有一個組合框,使用Arraylist填充,如下所示。如果我有另一個同一個對象的實例,我該如何選擇組合框中的對象?請看下面的代碼來理解。在組合框中查找按對象值的項目

 MakeEntity selectedMake = Make.GetMakeByTitle("Honda"); 
     List<MakeEntity> allMakes = Make.GetAllMakes(); 
     cbVehicleMake.DataSource = allMakes; 
     cbVehicleMake.SelectedIndex = cbVehicleMake.Items.IndexOf(selectedMake); 

但是最後一行沒有按預期工作。我可以讓它運行嗎?還是我會朝錯誤的方向發展? MakeEntity應該實現iComparable嗎?

回答

3

假設MakeEntity有一個屬性叫做id!

cbVehicleMake.SeletedItem=allMakes.Find(q=>q.Id==selectedMake.Id)) 
+0

Short,Crisp&Sweet ...謝謝! –

1

對於IndexOf,您應該無需執行IComparable,只需Equals即可。否則它將默認爲Object.Equals,只有在兩個引用是同一個實例時才匹配。 (不知道這是沒有看到的MakeEntity定義中的問題或不。)

而且,只需使用:

cbVehicleMake.SelectedItem = selectedMake; 

這會在內部處理髮現在選項的對象。

文檔:http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem.aspx

+0

它不工作。原因可能是'selectedMake'與'allMakes'中的一個不同。我應該重寫「equals」方法嗎? –

+0

是的。重寫Equals方法,以便MakeEntity的兩個不同實例在它們的標識屬性相同時將被視爲「相等」。看看你的代碼,標題可能是一個很好的候選人。 –