在为 ComboBox 当定数据的时候,如果遇到界面显示需要用文本,而获取选定项的值时需要用数字,我们就很习惯使用 DataSource 来进行绑定。
例如以下代码:
List<TextValue> tvList = new List<TextValue>(); for (int i = 0; i < 4; i++) { tvList.Add(new TextValue(i.ToString(), i)); } ComboBox cmb = new ComboBox(); cmb.DataSource = tvList; cmb.DisplayMember = "Text"; cmb.ValueMember = "Value"; cmb.SelectedIndex = 0;
但是这么做,在最后一行设置下拉列表框选定项的时候会出现异常,因为这样直接绑定后,下拉列表框的 Items 属性中的数据长度是 0。但是我们又必须设置选定项,这个时候我用了一下代码:
ComboBox cmb = new ComboBox(); for (int i = 0; i < 4; i++) { cmb.Items.Add(new TextValue(i.ToString(), i)); } cmb.DisplayMember = "Text"; cmb.ValueMember = "Value"; cmb.SelectedIndex = 0;
/// <summary> /// ComboBox的Item /// </summary> public class TextValue { public TextValue() { } public TextValue(string inText, int inValue) { this.Text = inText; this.Value = inValue; } private string _text; private int _value; /// <summary> /// 文本 /// </summary> public string Text { set { this._text = value; } get { return this._text; } } /// <summary> /// 值 /// </summary> public int Value { set { this._value = value; } get { return this._value; } } }
这么做既可以让下拉列表框做到显示和背后的值的分离,也可以立刻设置选定项。