轉載於:http://blog.csdn.net/fcsh820/article/details/3867053
感謝原作者分享這麼好的文章。
WinForm下的ComboBox預設是以多行文本來設定顯示列表的, 這通常不符合大家日常的應用,
因為大家日常應用通常是鍵/值對的形式去綁定它的.
那麼用索引值對的形式如何做?
因為Combox的每一個項的值是一個object, 實際上就是一個鍵/值對.
我用的是下面這個類的執行個體作為它的一個項:
/// <summary>
/// ComboBox的項
/// </summary>
class ListItem : System.Object
{
private string _Value = string.Empty;
private string _Text = string.Empty;
/// <summary>
/// 值
/// </summary>
public string Value
{
get { return this._Value; }
set { this._Value=value; }
}
/// <summary>
/// 顯示的文本
/// </summary>
public string Text
{
get { return this._Text; }
set { this._Text=value; }
}
public ListItem(string value, string text)
{
this._Value = value;
this._Text = text;
}
public override string ToString()
{
return this._Text;
}
}
通過這個類就可以定義ComboBox的值了, 首先我們定義一個ListItem的清單作為ComboBox的資料來源:
List<ListItem> items = new List<ListItem>();
items.Add(new ListItem("0", "Item_0_Text"));
items.Add(new ListItem("1", "Item_1_Text"));
items.Add(new ListItem("2", "Item_2_Text"));
items.Add(new ListItem("3", "Item_3_Text"));
items.Add(new ListItem("4", "Item_4_Text"));
items.Add(new ListItem("5", "Item_5_Text"));
然後進行相應的設定:
//將資料來源的屬性與ComboBox的屬性對應
drpTest.DisplayMember = "Text"; //顯示
drpTest.ValueMember = "Value"; //值
然後進就可以進行綁定了:
drpTest.DataSource = items; //綁定資料
綁定資料之後, 就可以對其進行預設選擇項的設定, 取值等操作:
drpTest.SelectedValue = "4"; //設定選擇項
//取得當前選擇的項
ListItem selectedItem = (ListItem)drpTest.SelectedItem;
string value = selectedItem.Value; //值
string text = selectedItem.Text; //顯示的文字
////////////////////////////////////////////////////////////////////////////////////////////
根據原作者的文章。我想到了這個方法:
private void LoadComboboxYear()
{
List<KeyValuePair<string, int>> listItem = new List<KeyValuePair<string, int>>();
listItem.Add(new KeyValuePair<string, int>("2011年", 2011));
listItem.Add(new KeyValuePair<string, int>("2012年", 2012));
comboBox3.DataSource = listItem;
comboBox3.DisplayMember = "Key";
comboBox3.ValueMember = "Value";
comboBox3.SelectedIndex = 0;
}
取資料:
private void button1_Click(object sender, EventArgs e)
{
KeyValuePair<string, int> keyValue = (KeyValuePair<string,int>)comboBox3.SelectedItem;
MessageBox.Show("key:" + keyValue.Key + ",value:" + keyValue.Value);
}