http://www.crifan.com/csharp_combobox_data_dynamic_binding/
C#中,已有一個List,想要動態的,綁定到ComboBox中。
【解決過程】
1.參考:
c# winform comboBox動態綁定數據
去試試代碼:
cmbSubCategory.DataSource = generalCategoryList;
cmbSubCategory.DisplayMember = "name";
cmbSubCategory.ValueMember = "url";
結果是可以執行,但是點擊combobox時,下來菜單是空的。
2.參考:
C# Binding Generic LIst<string> to Combo Box
打算去試試。
3.經過后來的折騰,找到原因了:
【已搞懂】C#中代碼加了斷點,但是調試時卻無法執行到
4.然后此處,實際上是,之前的寫法,就是正常的:
public struct categoryItem
{
public string Name { get; set; }
public string Url { get; set; }
};
List<categoryItem> generalCategoryList;
private void initSearchCategory()
{
generalCategoryList = new List<categoryItem>();
foreach (HtmlNode singleOptionNode in optionNodeList)
{
......
//store info
categoryItem singleCategoryItem = new categoryItem();
singleCategoryItem.Name = generalCategory;
singleCategoryItem.Url = singleCategoryUrl;
//add to list
generalCategoryList.Add(singleCategoryItem);
}
if (generalCategoryList.Count > 0)
{
//init search category
cmbSubCategory.DataSource = generalCategoryList;
cmbSubCategory.DisplayMember = "name";
cmbSubCategory.ValueMember = "url";
}
}
然后ComboBox中就可以看到對應的選項了:
【總結】
綁定的動作,其實很簡單:
cmbSubCategory.DataSource = generalCategoryList;
cmbSubCategory.DisplayMember = "name";
cmbSubCategory.ValueMember = "url";
就可以了。
但是要注意:
此處,如果改為:
public struct categoryItem
{
public string name;
public string url;
};
List<categoryItem> generalCategoryList;
private void initSearchCategory()
{
generalCategoryList = new List<categoryItem>();
foreach (HtmlNode singleOptionNode in optionNodeList)
{
......
//store info
singleCategoryItem.name = generalCategory;
singleCategoryItem.url = singleCategoryUrl;
//add to list
generalCategoryList.Add(singleCategoryItem);
}
if (generalCategoryList.Count > 0)
{
//init search category
cmbSubCategory.DataSource = generalCategoryList;
cmbSubCategory.DisplayMember = "name";
cmbSubCategory.ValueMember = "url";
}
}
那么結果就錯了,然后每一項,就都是對應的對象的名字了:
具體根本原因,暫時懶得去深究了。