组合框上的数据绑定

时间:2010-10-06 07:18:36

标签: c#

我正在将项目添加到组合框中,如下所示:

   readonly Dictionary<string, string> _persons = new Dictionary<string, string>();
   ....
   //<no123, Adam>, <no234, Jason> etc..
   foreach (string key in _persons.Keys)
   {
        //Adding person code
        cmbPaidBy.Items.Add(key);                   
   }

我想通过显示字典中的值(即名称)来使组合框更具可读性。但我需要根据用户输入从数据库中提取人员代码(no123等)。

这样做的正确方法是什么?如何将值和键绑定到组合框项?

4 个答案:

答案 0 :(得分:5)

DisplayMember和ValueMember属性适合您:

cmbPaidBy.DataSource = new BindingSource(_persons, null); 
cmbPaidBy.DisplayMember = "Value"; 
cmbPaidBy.ValueMember = "Key"; 

更深入information here, 在这里BindingSource Class

  

BindingSource组件有很多用途。首先,它通过在Windows窗体控件和数据源之间提供货币管理,更改通知和其他服务,简化了表单上对数据的绑定控制

答案 1 :(得分:1)

由于Dictionary<TKey, TValue>未实现IList(或任何其他数据源接口),因此不能将其用作绑定的数据源。您可以使用其他表示形式,例如DataTableList<KeyValuePair<TKey, TValue>>

在后一种情况下,您可以使用以下代码轻松绑定:

cmbPaidBy.ValueMember = "Key";
cmbPaidBy.DisplayMember = "Value";
cmbPaidBy.DataSource = _persons; // where persons is List<KeyValuePair<string,string>>

答案 2 :(得分:0)

您可以在XAML中执行此操作,如下所示:

<ComboBox ItemsSource="{Binding Persons}" DisplayMemberPath="Key" ValueMemberPath="Value" />

确保您可以绑定到您的集合(简单字典不会,它不是可观察的集合) - 示例here使用数据表...

答案 3 :(得分:0)

将简单字典(键值对)绑定到组合框作为XAML中的显示成员和值成员

<ComboBox Height="23" HorizontalAlignment="Left" SelectedItem="{Binding SelectedKeyValue}" SelectedValuePath="Value"  DisplayMemberPath="Key" Width="120"     x:Name="comboBox1" />

   <TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" Text="{Binding Path=SelectedValue, ElementName=comboBox1, Mode=TwoWay}"/>