2016-11-12 64 views
0

我正在嘗試訪問組合框項目的值。該項目的值是類型MyClass如何在Windows窗體中訪問Combobox項目MemberValue?

List<MyClass> myIitemsList = getMyClassItemsMethod(); 
if (myIitemsList .Count > 0) 
{ 
    for (int i = 0; i < myIitemsList .Count; i++) 
    {   
     List<MyClass> selectedMyClassItems = myIitemsList .FindAll(x => x.myClassNumber == i); 
     string itemtext = "MyClass " + i ; 
     myComboBox.Items.Add(new { itemtext, ValueMember = selectedMyClassItems}); 
    } 
} 

這是我的示例代碼。現在我正在嘗試訪問ValueMember。當我在組合框中選擇一個項目時,我可以獲取選定的項目。

var ddlMyClassSelectedItem = myComboBox.SelectedItem; 

在調試觀察WINDO,我能看到ValueMember該項目具有的項目作爲一個列表,但我不知道如何訪問/檢索。

+2

您的代碼不會編譯的。目前還不清楚你在問什麼。 –

+0

讓您的類覆蓋ToString()方法並返回描述MyClass實例所需的任何內容,然後將組合的DataSource設置爲列表並將組合的ValueMember屬性設置爲MyClass的標識成員 – Steve

+0

我不是使用數據源,我手動添加項目,儘管我的代碼中顯示的for循環。 – user3726459

回答

1

讓我們討論你做了什麼。你如何找回您的會員是沒有什麼興趣的,雖然你可以這樣

myComboBox.DisplayMemeber = "Display"; 
myComboBox.ValueMemeber = "Value"; 
myComboBox.DataSource = 
    getMyClassItemsMethod().OrderBy(c => c.myClassNumber). 
    Select(c => new { Display = "Memeber: " + c.myClassNumber, Value = c}).ToList(); 

它將工作,現在你已經選擇使用myComboBox.SelectedItem一個項目去做。但是你遇到一個問題,你的物品實際上是一個匿名類型,你不能輕易地施展它。

關於這一點,你爲什麼不聲明類型像

class ComboItem 
{ 
    public string Display {get; set;}   
    public MyClass Value {get; set;} 
} 

,並使用此類型,而不是匿名類型。即代替new {...},你可以做new ComboItem {...}。現在,這是很容易現在

var ddlMyClassSelectedItem = (ComboItem)myComboBox.SelectedItem; 
Console.WriteLine(ddlMyClassSelectedItem.Value.myClassNumber); 

你知道ddlMyClassSelectedItemComboItem

+0

suggesstion爲我完美工作。謝謝! – user3726459

0

當添加到組合框,使用:

myComboBox.Items.Add(selectedMyClassItems); 

當檢索該項目,使用:

List<MyClass> ddlMyClassSelectedItem = myComboBox.SelectedItem as List<MyClass>; 

最後,在MyClass的,覆蓋的ToString(這樣的組合框可以,只要你喜歡使它):

public override string ToString() 
    { 
     return "MyClass " + myClassNumber; 
    } 
+0

我想出了一個可行的解決方案,但它並不乾淨。我在下面添加解決方案。使用ComboItem類的 – user3726459

0
List<MyClass> myIitemsList = getMyClassItemsMethod(); 
if (myIitemsList .Count > 0) 
{ 
    for (int i = 0; i < myIitemsList .Count; i++) 
    {   
     List<MyClass> selectedMyClassItems = myIitemsList .FindAll(x => x.myClassNumber == i); 
     string itemtext = "MyClass " + i ; 
     myComboBox.Items.Add(new KeyValuePair<string, List<SwitchPort>>(itemtext, 
          selectedMyClassItems); 
    } 
} 

然後從所選項目中檢索值。

var item = myComboBox.SelectedItem; 
KeyValuePair<string,List<MyClass>> selectedItemsPair = (KeyValuePair<string,List<MyClass>>)item; 
List<MyClass> myClassList = selectedItemsPair.Value; 

唯一的問題與此是,在我的COMBOX表演項目,如:

My class 1, [System.Collection] 
My Class 2, [System.Collection] 
My Class 3, [System.Collection] 
My Class 4, [System.Collection] 
My Class 5, [System.Collection] 
相關問題