我有一个Windows窗体(net 2.0),其上的控件通过BindingSource..works绑定到实体(带有INotifyPropertyChanged)。
在同一表格上,我有一个下拉列表,也是通过BindingSource ...连接的
以下是相关代码的示例:
m_PlanItemLookupBindingSource.DataSource = GetBusinessLogic().RetrievePaymentPlanLookups(); // Collection of PaymentPlans
paymentPlanType.Properties.DataSource = m_PlanItemLookupBindingSource;
paymentPlanType.Properties.DisplayMember = "Name";
paymentPlanType.Properties.ValueMember = "ID";
paymentPlanType.DataBindings.Add(new Binding("EditValue", m_PlanBindingSource, "PaymentPlanID", true, DataSourceUpdateMode.OnPropertyChanged, null, "D"));
agencyComission.DataBindings.Add(new Binding("EditValue", m_PlanBindingSource, "AgencyCommission", true, DataSourceUpdateMode.OnPropertyChanged, null, "P1"));
billingType.DataBindings.Add(new Binding("Text", m_PlanBindingSource, "BillingType"));
因此,当我在下拉列表中更改一个值时,我认为m_PlanItemLookupBindingSource Current属性会随着实际更改的实体的PaymentPlanID属性而改变。
有点困惑。
提前致谢, 斯蒂芬
答案 0 :(得分:1)
BindingSource获取控件中的值并将其设置在底层源中,这是由BindingSource的Position属性确定的当前对象。
因此,当您在下拉列表中选择一个值时,将使用所选的新值设置基础对象的PaymentPlanID属性。底层对象由BindingSource中的Current属性标识。
如果要将Current属性移动到下拉列表中选择的对象,则必须在BindingSource上使用MoveFirst,MoveLast,MovePrevious或MoveNext方法或Position属性。
正如我所看到的,您可以执行以下操作:在下拉列表中的Changed或ValueChanged事件的事件处理程序中,您将获得所选项的索引,您可以将哪个索引传递给BindingSource.Position属性。
Changed or ValueChanged event handler
...
int index = DropDownList.ListIndex
BindingSource.Position = index
...
End event handler
您应该删除将下拉列表从下拉列表EditValue链接到PaymentPlanID的DataBinding。这样,在BindingSource中的Position更改之前,底层对象中的PaymentPlanId未设置为所选值。