我有一个工单的捕获表单,它有一个CustomerBindingSourceWorksOrderBindingSource控件。大多数编辑字段都绑定(bind)到WorksOrderBindingSource上,而ComboBox的列表绑定(bind)到CustomerBindingSource上,而其SelectedValue绑定(bind)到CustomerId中的WorksOrderBindingSource字段上。这都是非常常规和标准的,这里没有可笑的地方。

然后,我还有一些文本框字段,用于显示当前编辑的工单的当前所选客户的属性。我也将这些字段绑定(bind)到了CustomerBindingSource。选择客户后,这些字段将按预期显示该客户的属性。

我的问题是,当我想使用表单来捕获新的工单时。我用WorksOrder实例化了一个新的CustomerId == null对象,并将其绑定(bind)到WorksOrderBindingSource。我在CustomerBindingSource中没有带Id == null的对象,因此,正如预期的那样,下拉组合框为空白,但是CustomerBindingSource.Current属性指向该数据源中的第一个Customer对象。客户链接的显示字段显示该客户的值,而尚未选择任何客户。

对我来说,唯一的解决方法似乎很笨拙。在其中,我有两个客户类型的绑定(bind)源,一个用于选定客户,用于填充客户显示字段,另一个用于填充客户下拉列表。然后,我必须处理一个选择事件,并且只有在选择了一个客户的情况下,然后才能在显示字段的绑定(bind)源中找到该客户,如果未选择该客户,则将显示字段的数据源设置为null。这感觉非常笨拙。还有其他方法可以实现我想要的吗?

最佳答案

我发现这个主题完全是我的问题,但没有满意的答案。我知道这是一个老话题,但是。

最后,我找到了一个可行的解决方案:我在我的绑定(bind)源中添加了一个[PositionChanged]事件(将是您的CustomerBindingSource)。

        private void CustomerBindingSource_PositionChanged(object sender, EventArgs e)
    {
        if(<yourCombobox>.SelectedIndex==-1)
        {
            CustomerBindingSource.SuspendBinding();
        }
        else
        {
            CustomerBindingSource.ResumeBinding();
        }
    }

10-08 00:15