VB.Net ComboBox(作为Dropdown)没有使用数据绑定将文本转换为DisplayMember

时间:2016-07-15 18:23:36

标签: vb.net combobox

我在工作中继承了一个相当大的项目,该项目未记录并用VB编写(最初在.NET之前启动,以.NET 2结束)。我正在更新/刷新大量代码,但遇到了一个烦人的问题,我还没有找到解决方案。该系统使用UI,Web服务和SQL DB。

问题:我有一个数据绑定组合框(最初设置为DropDownList - 我正在将它更改为DropDown,这就是开始这个​​混乱的东西 - 返回不是一个选项)来自Web服务的DataSet。当用户手动输入他们想要的项目时,来自文本字段的数据似乎不会将自身与DisplayMember关联,这会强制WS / SQL查询失败(当它期望ValueMember时会发送一个空值) 。如果用户输入部分选择,然后使用箭头键或选项卡从DisplayMember列表中选择他们想要的值,则查询会毫无问题地显示。

我的问题:如何将文本字段转换为DisplayMember,然后将其自身正确绑定到ValueMember,然后允许查询正确执行?很抱歉让这个声音变得复杂或复杂;我确信答案很简单,我只是把它涂上了它。

代码的相关位是:

With cmbDID
    If dtsLU.Tables.Contains(reqTable) = True Then
        .DataSource = dtsLU.Tables(reqTable)
        .DisplayMember = "zip"
        .ValueMember = "gridID" 
    End If
End With
cmbDID.DataBindings.Clear()
cmbDID.DataBindings.Add("SelectedValue", dtsData, strDT & ".gridID")

我已尝试将"SelectedValue"更改为"Text",这几乎可以正常工作 - 但它直接转换为gridID并跳过zip,最终导致错误的Web服务响应由于zipgridID字段值未同步(zip(DisplayMember)可能为5123,而gridID(ValueMember)可能为6047)。我已经尝试将"SelectedValue"更改为"SelectedIndex",这让我无处可去。

非常感谢任何帮助。

修改 为了给流程添加一些说明,下面的伪代码/描述大致是发生了什么。我可以发布整个模块,但我觉得这会使整个问题更加混乱。

Private Sub A
    FormAlpha is created with 1 ComboBox in the form of a DropDown
    This DropDown is populated with a DataSet
    DataBinding with a blank DataSet is added to the control to keep track of the users input
End Sub

用户在填充DropDown及其数据后,会在FormAlpha上触发lblSubmit_Click事件。 lblSubmit_Click调用Private Sub Submit

Private Sub Submit
    BindingContext(DropDown DataSet, tableName).EndCurrentEdit() is called
    DataSet.HasChanges() is processed
    If changes are present, changes are processed

HERE存在问题

如果用户手动输入了DropDown字段,但未点击箭头键或标签,则DataSet会注册更改,但会在所有字段中返回空值 - 它知道输入的内容,但该数据显然没有不通过ComboBox的DataSet(ListItems或SelectedIndex没有改变/触发我猜)。如果用户使用箭头键选择项目,则DataSet具有正确的输入(我假设此时控件验证了数据)。

    If the processed data is good, a value is entered into the database
    If the processed data is bad (empty), an error is returned
End Sub

如果以上内容无法用我提供的内容解决,但有人仍然知道更好的方法来处理这种情况,我全都听见了。重写模块并不理想,但解决这个问题是必要的。

1 个答案:

答案 0 :(得分:0)

好吧,虽然这个修复可能不太理想,但它仍然是一个修复。

简单问题是DropDown的文本值不会导致数据实际影响控件的SelectedIndex / SelectedValue,除非您使用箭头键或鼠标单击与它进行交互。因此,虽然DropDown会读到" 1234"但实际上控件看到了#34;"。

我为此做的修复只是在用户点击提交按钮时调用comboBox.text = comboBox.text

相关问题