使用组合框控制列表框中的数据

时间:2014-04-08 14:10:59

标签: vb.net data-binding combobox listbox

我正在尝试使用组合框更改列表框中的值。

我的组合框数据源是一个绑定源,它的数据源是一个keyvaluepair状态集合。 Key是State缩写,值是一个State State,它包含有关状态的相关信息。 我的列表框的数据源是一个bindingsource,它的数据源包含一个包含State值的记录列表。

当用户点击列表框中的项目时,我希望组合框中的值反映selecteditems状态值中的值。然后,如果我更改该值,我希望更新列表框项。 目前我可以正确加载Combobox,我可以正确加载列表框。使用下面的代码,当我在列表框中的项目之间切换时,组合框不会更新;但如果我改变组合框中的值,则listitem会发生变化,如果我移开记录并重新开启,则值将继续重新填充。但是,当我移动到我没有编辑的项目时,组合框文本再次变为空白。以下是我的代码。我如何更改绑定以便:

  • 当我在列表框中选择时,项目状态在组合框中正确显示
  • 在组合框中更改值时,状态在列表框中更改

XML文件,它是Listbox Control的数据源:

<?xml version="1.0"?>
<ConversionRecords xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ConversionRecord>
    <InboundOriginCity>Seaford 0</InboundOriginCity>
    <InboundOriginState>
      <Key>AS</Key>
      <PostalAbbreviation>AS</PostalAbbreviation>
    </InboundOriginState>
    <InboundDestinationCity>Salisbury 0</InboundDestinationCity>
    <InboundDestinationState>
      <Key>AS</Key>
      <PostalAbbreviation>AS</PostalAbbreviation>
    </InboundDestinationState>
    <InboundCommodity>000000</InboundCommodity>
  </ConversionRecord>
  <ConversionRecord>
    <InboundOriginCity>Seaford 1</InboundOriginCity>
    <InboundOriginState>
      <Key>AS</Key>
      <PostalAbbreviation>AS</PostalAbbreviation>
    </InboundOriginState>
    <InboundDestinationCity>Salisbury 1</InboundDestinationCity>
    <InboundDestinationState>
      <Key>AS</Key>
      <PostalAbbreviation>AS</PostalAbbreviation>
    </InboundDestinationState>
    <InboundCommodity>111111</InboundCommodity>
  </ConversionRecord>
</ConversionRecords>

我尝试过的数据绑定:

_FileBindingSource = New BindingSource(_recordsRepository.getConversionRecords(), Nothing)
_InboundOriginStateBindingSource = New BindingSource(_stateRepository.StatesByKey, Nothing)
_InboundDestinationStateBindingSource = New BindingSource(_stateRepository.StatesByKey, Nothing)

ListBox1.DataSource = _FileBindingSource

'cboInboundOriginState
cboInboundOriginState.DisplayMember = "Key"
cboInboundOriginState.ValueMember = "Value"
cboInboundOriginState.DataSource = _InboundOriginStateBindingSource
cboInboundOriginState.DataBindings.Add("SelectedValue", _FileBindingSource, "InboundOriginState", True, DataSourceUpdateMode.OnPropertyChanged)

1 个答案:

答案 0 :(得分:0)

通过大量研究,我找到了答案。为了使其工作,我必须将Equals(objA as object)重写为boolean。一旦我这样做,比较它所使用的那个类的唯一值。