使用组合框的最佳方法(将显示文本和数据库文本绑定在一起)
本文关键字:文本 显示 数据库 绑定 在一起 组合 方法 最佳 | 更新日期: 2023-09-27 18:31:00
我正在创建一个名为 AMTI 的新窗口,该窗口使用组合框为用户显示不同的选择。例如,选择文本可以是"分析",在这种情况下,值"E04"应存储在数据库 AMTI 表的相应列中。我读过有关使用枚举进行数据绑定的信息,但这里文本和数值被绑定在一起,然后可以在组合框中进行数据绑定。将组合框中的显示文本与要存储在数据库中的值映射的最简单(或正确)方法是什么?
可以将 ComboBox 绑定到任何元素公开公共属性(包括 datatable)的集合,或者,如果您没有准备好集合并且需要键值对象,则可以使用 Dictionary。
Dictionary<string, int> dict = new Dictionary<string, int>();
// fill the dictionary here
mycomboBox.DataSource = new BindingSource(dict, null);
mycomboBox.DisplayMember = "Key";
mycomboBox.ValueMember = "Value";
if(mycomboBox.SelectedIndex!=-1)
int currentlySelected = (int)mycomboBox.SelectedValue;
。或者创建自己的对象类进行绑定:
class NameValueHolder
{
public string Name{get;set;}
public int Value{get;set;}
public NameValueHolder(){}//so you can use it in linq
public NameValueHolder(string name, int value)
{
this.Name=name;
this.Value=value;
}
}
BindingList<NameValueHolder> list = new BindingList<NameValueHolder>();
list.Add(new NameValueHolder("object 1", 1);
list.Add(new NameValueHolder("object 2", 2);
list.Add(new NameValueHolder("object 3", 3);
mycomboBox.DataSource = new BindingSource(list, null);
mycomboBox.DisplayMember = "Name";
mycomboBox.ValueMember = "Value";
if(mycomboBox.SelectedIndex!=-1)
NameValueHolder currentlySelected = (NameValueHolder)mycomboBox.SelectedValue;
还可以将组合框绑定到 Linq 查询结果:
var qResult = from a in yourDataSource
where (/*some condition*/)
select new {Name = a.someName, Value = a.someValue};
mycomboBox.DataSource = qResult.ToList();
mycomboBox.DisplayMember = "Name";
mycomboBox.ValueMember = "Value";
这些只是其中的一些可能性。