如何使用ComboBox更改事件触发代码

时间:2013-07-25 16:13:01

标签: vb.net oledb textchanged lost-focus

我创建了一个包含历史股票价格的数据库。在我的表单上,我有两个组合框,ComboBox_TickerComboBox_Date。当填充这些组合框时,我想检查数据库并查看数据库中是否存在相应的数据。如果是这样,我想将名为Label_If_Present的标签文本更改为“在数据库中”。

更改事件发生了我的问题。一旦我更改了文本框中的数据,我希望所有这些都发生。我已尝试过.TextChanged.LostFocus个事件。 '.TextChanged'在我的SQL命令语句中触发代码提前,抛出和错误。 `.LostFocus'事件根本不会触发我的代码。

这是我目前的代码:

Public databaseName As String = "G:\Programming\Nordeen Investing 3\NI3 Database.mdb"
Public con As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & databaseName)
Public tblName As String = "Historical_Stock_Prices"

Private Sub Change_Labels(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox_Ticker.TextChanged, ComboBox_Date.TextChanged
    con.Close()
    Dim dr As OleDbDataReader
    con.Open()
    If (File.Exists(databaseName)) Then
        Dim restrictions(3) As String
        restrictions(2) = tblName
        Dim dbTbl As DataTable = con.GetSchema("Tables", restrictions)
        If dbTbl.Rows.Count = 0 Then
        Else
            Dim cmd2 As New OleDb.OleDbCommand("SELECT * FROM " & tblName & " WHERE  Ticker = '" & ComboBox_Ticker.Text & "' " & "  AND  Date1 = '" & ComboBox_Date.Text & "'", con)
            dr = cmd2.ExecuteReader
            If dr.Read() = 0 Then
                'If record does not exist
                Label_If_Present.Text = ""
            Else
                Label_If_Present.Text = "In Database"
            End If
            con.Close()
        End If
    Else
    End If
End Sub

我已经在项目中的其他表单上成功实现了这个概念。这个略有不同,我无法弄清楚为什么我不能让这个工作。

1 个答案:

答案 0 :(得分:2)

处理TextChanged事件应该有效,但是您需要将DropDownStyle设置为DropDownList,以便Text属性只能是给定值。
然后检查两个组合框是否都选择了值。这样的事情应该有效:

  If ComboBox_Ticker.Text <> "" AndAlso DateTime.TryParse(ComboBox_Date.Text, Nothing) Then