管理绑定组合框中的可空值

时间:2014-04-30 08:06:02

标签: vb.net data-binding combobox datasource nullable

我有一个名为Agent的BO和另一个名为AgentList的定义为:

Inherits ComponentModel.BindingList(Of Agent)  

代理列表包含一个名为" CreateAgentList"的方法。返回从DB填充的AgenteList对象。

要填充组合框并将其绑定,请使用以下代码:

    cmbAgent.DataSource = AgenteList.CreateAgentList()
    cmbAgent.DisplayMember = "AgentCode"
    cmbAgent.ValueMember = "Id"
    cmbAgent.DataBindings.Add(New Binding("ValueMember", AgenteBindingSource, 
         "AgenteDiRiferimento", False, DataSourceUpdateMode.OnPropertyChanged))

如何在与Null值成员关联的组合框中有一个无文本的第一项?

N.B。目的是让用户不要选择任何代理。 DB中的ReferenceAgent字段是Agent表的Nullable Integer FK。每次用户在代理列表中浏览并且程序在表单中加载所选代理的数据时,绑定用于显示正确的代理。

1 个答案:

答案 0 :(得分:0)

除了在DB的Agent字段中存储空值之外,我刚刚删除了FK,该FK并非必须是已驱动的组合框的输入,并且不允许用户输入错误信息并替换" null id" 0(我的Id字段是从1开始的标识,因此没有问题)。

在表单加载过程中填充我的组合框并绑定它的代码如下:

    Dim cmb_Items As New Dictionary(Of Integer, String)
    cmb_Items.Add(0, "")

    For Each item As Agent In AgentList.CreateAgentList()
        cmb_Items.Add(item.Id, item.AgentCode)
    Next

    cmbAgent.DataSource = New BindingSource(cmb_Items, Nothing)
    cmbAgent.ValueMember = "Key"
    cmbAgent.DisplayMember = "Value"
    cmbAgent.DataBindings.Add(New Binding("SelectedValue", AgentBindingSource, "Agent", False, DataSourceUpdateMode.OnPropertyChanged))

不完全是我在第一时间想到的解决方案,但它就像一个魅力!