关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
C#的组合框用起来有些别扭。例如我想显示的值和实际的值不同。只是简单添加列表项是行不通。
可以用绑定数据库的方法实现,但过于麻烦。
若要实现这种功能,可以使用C#提供的另外一种方式:设置DataSource。
这种方式,是给组合框的数据源指定一个数组或List,再指定相关字段。
用这种方法需要先构建一个简单的类:
class ClsComboItem { public string Value { get; set; } //值字段 public string Display{ get; set; }//显示字段 }
假设组合框的名称为cbmTest,加载数据方法如下:
private void LoadData(){ List<ClsComboItem> items = new List<ClsComboItem>(); items.Add(new ClsComboItem{Value = "en", Display = "English"}); items.Add(new ClsComboItem{Value = "zh", Display = "简体中文"}); cbmTest.DataSource = items; cbmTest.ValueMember = "Value"; cbmTest.DisplayMember = "Display"; }
加载窗体,执行LoadData方法,可以得到这个效果:
若要获取选中的值,可以用组合框的SelectedValue或SelectedItem来获取。
若要设置组合框选择哪个值,可以给SelectedValue设置值。这个在使用上一般没有什么障碍。
我们可以进一步优化一下代码,给ClsComboItem添加构造函数:
class ClsComboItem { public string Value { get; set; } //值字段 public string Display{ get; set; }//显示字段 //默认构造函数 public ClsComboItem() { } //带参数构造函数 public ClsComboItem(string value, string display) { this.Display = display; this.Value = value; } }
加了构造函数,就可以减少一些代码量:
private void LoadData(){ List<ClsComboItem> items = new List<ClsComboItem>(); items.Add(new ClsComboItem("en", "English")); items.Add(new ClsComboItem("zh", "简体中文")); cbmTest.DataSource = items; cbmTest.ValueMember = "Value"; cbmTest.DisplayMember = "Display"; }
之所以加了一个无参数的默认构造函数,是为了应对各种情况。
这代码还不是最优的,有时候绑定数据的时候,可能写错字段名称等等。那么可以加个静态方法:
class ClsComboItem { public string Value { get; set; } //值字段 public string Display{ get; set; }//显示字段 //默认构造函数 public ClsComboItem() { } //带参数构造函数 public ClsComboItem(string value, string display) { this.Display = display; this.Value = value; } /// <summary> /// 绑定数据 /// </summary> public static void BindControl(ComboBox cbm, List<ClsComboItem> items){ cbm.DataSource = items; cbm.DisplayMember = "Display"; cbm.ValueMember = "Value"; } }
只需要创建一个List列表,再调用该静态方法绑定数据即可:
private void LoadData(){ List<ClsComboItem> items = new List<ClsComboItem>(); items.Add(new ClsComboItem("en", "English")); items.Add(new ClsComboItem("zh", "简体中文")); ClsComboItem.BindControl(cboTest, items); //绑定数据 }
通过这种方法,就可以轻轻松松实现组合框绑定数据,显示的值和实际的值不同。
ps:这种方法不仅仅适用于组合框,列表框也可以。