1

我已经构建了一个接口,在该接口中我将一个List<TripStop>对象绑定到它并要求下拉列表使用:

//Convert the TripStop dictionnary to a list for databinding
StartStop.DataSource = EditorPlugin.getTripStops().Values.ToList();
StartStop.ValueMember = "Id";
StartStop.DisplayMember = "NameFr";

Id 和 NameFr 作为 Value/DisplayMembers。

如果我在绑定后检查数据源,我会看到我的所有数据都正确绑定,每个对象的每个属性都很好,我的数据没有损坏。

问题?如果我选择某些东西并查看 SelectedValue,我会得到错误的值,我会得到一个完全不同的项目的“Id”。

反向是一样的,我加载表单并要求 DropDownList :

StartStop.SelectedValue = EditorObject.StartStop;

我看到的是与我要求它选择的实际价值完全不同的项目。例如,我要求第 4 项,我选择了第 14 项。我在列表中选择项目#4,SelectedValue 是#14。

指数和价值之间没有相关性。

更奇怪的是,如果我这样做:

EditorObject.StartStop = (UInt32)((TripStop)StartStop.SelectedItem).Id;

这种方法工作正常,我从选定的项目中得到正确的值。

4

1 回答 1

0

您是否偶然检查了 SelectedIndexChanged 或 SelectedValueChanged 中选择的值?我对此有一些问题,因为程序分配与用户选择的分配因此切换到 SelectionChangeCommitted。这是一个我知道有效的例子......

// On Load...
city_IDComboBox.DataSource = context.Cities.Local.ToBindingList();
city_IDComboBox.DisplayMember = "Name";
city_IDComboBox.ValueMember = "ID";

// Checking value of selection, acting on it
private void city_IDComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
   var currentCounty = county_IDComboBox.SelectedItem as County;
   var currentCity = city_IDComboBox.SelectedItem as City;
   if (currentCity != null)
   {
      if (currentCounty != null)
      {
         if (currentCity.County_ID == currentCounty.ID)
            return;
      }
      county_IDComboBox.SelectedValue = currentCity.County_ID;
   }
   else
   {
      county_IDComboBox.SelectedItem = null;
   }
}
于 2013-02-01T20:05:24.830 回答