Winform BindingSources - 问题

时间:2010-01-15 00:55:05

标签: winforms data-binding

我有一个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属性而改变。

有点困惑。

提前致谢, 斯蒂芬

1 个答案:

答案 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未设置为所选值。