使用Combobox的最佳方式(将显示文本和数据库文本绑定在一起)

时间:2013-09-12 10:47:21

标签: c# combobox

我正在创建一个名为AMTI的新窗口,它使用组合框来为用户显示不同的选择。选择文本可以例如是“分析”,在这种情况下,值“E04”应该存储在数据库中的AMTI表中的适当列中。我读到了using enums for databinding,但这里将文本和数值绑在一起,然后可以在组合框中进行数据绑定。将组合框中的显示文本映射到存储在数据库中的值的最简单(或正确)方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以将ComboBox绑定到任何元素公开属性(包括数据表)的集合,或者,如果您没有准备好集合并且需要键值对象,则可以使用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;

您还可以将ComboBox绑定到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";

这些只是其中的一部分。