VB.NET ComboBox验证是否存在值

时间:2016-02-02 15:47:54

标签: vb.net combobox vb.net-2010 verify

我目前正在处理用VB编码的应用程序。我正在修改并添加功能。

我遇到的问题是,在尝试选择值之前,我想根据值是否存在来运行ComboBox的验证检查。

组合框是从带有字典数据源的SQL查询填充的

Dim TimerComboSource As New Dictionary(Of String, String)()
TimerComboSource.Add(varSQLReader("ID").ToString, varSQLReader("Name").ToString)
'Binds the values to the comboboxes
cmbTimer.DataSource = New BindingSource(TimerComboSource, Nothing)
cmbTimer.DisplayMember = "Value"
cmbTimer.ValueMember = "Key"

我从另一个ComboBox中选择一个值,该值填充了不同的SQL Query / SQL表。

当我选择第二个ComboBox值时,它来自的表包含第一个ComboBox的ID。我想在选择它之前验证第一个ComboBox中的值是否存在。

以下不起作用:

If cmbTechnician.Items.Contains(varSQLReader("Tech_ID").ToString) Then
    cmbTechnician.SelectedValue = varSQLReader("Tech_ID").ToString
End If

VB中有没有一种特定的方法可以让它工作而不会过于复杂?另一项工作是制作更复杂的SQL查询,但如果有更简单的方法,我宁愿不这样做。

2 个答案:

答案 0 :(得分:2)

由于您在字典上使用BindingSource,因此应使用DataSource来确定存在的事物。如果您尝试添加到cmbTimer.Items或直接从中删除,则会收到错误消息,告知您使用DataSource。所以做同样的事情来检查是否存在某些东西(不要使用具有本地范围的字典):

' form or class level collection
Private cboSource As New Dictionary(Of String, String)

cboSource.Add("red", "red")
cboSource.Add("blue", "blue")
cboSource.Add("green", "green")

cbo.DataSource = New BindingSource(cboSource, Nothing)
cbo.DisplayMember = "Value"
cbo.ValueMember = "Key"

If cbo.Items.Contains("red") Then
    Console.Beep()     ' wont hit
End If

If cboSource.ContainsValue("red") Then
    Console.Beep()     ' hits!
End If

评论中的建议建议将DataSource BindingSource转回字典:

Dim tempBS As BindingSource = CType(cbo.DataSource, BindingSource)
Dim newCol As Dictionary(Of String, String) = CType(tempBS.DataSource, Dictionary(Of String, String))

If newCol.ContainsValue("red") Then
    Console.Beep()     ' hits!
End If

保留对字典的引用更容易,更直接,但重新创建它将起作用。

答案 1 :(得分:0)

这是另一种方式=>

 If cmbTechnician.FindString(varSQLReader("Tech_ID").ToString) <= -1 Then
         'Do Not Exist 
 End If

这将找到显示成员,如果存在值则返回行的索引,否则返回-1。

此处有更多信息=&gt; ComboBox.FindString