none
急!! 必须对combox连续进行两次操作,textbox里的内容才发生相应的改变,这是怎么回事? RRS feed

  • 问题

  • 窗体上有combobox和textbox两个控件,分别用来显示图书类别名称和图书类别编号。
    现在将数据绑定在combobox1上,在窗体载入时combobox上同时已经显示数据库中的第一个图书类别名称,此时textbox里也已经显示了相应的图书编号。在这个窗体载入后,选择combobox下拉列表的任意一项,textbox里也同时显示相应的图书类别编号。关键代码如下:
        对窗体load事件:
            con.Open()
            Dim myda As New SqlDataAdapter("select btypename from booktype", con)
            Dim myds As New DataSet
            myda.Fill(myds, "booktype")
            Me.ComboBox1.DataSource = myds
            ComboBox1.DisplayMember = "booktype.btypename"  '要显示的表的成员列
            ComboBox1.ValueMember = "booktype.btypename"    '要显示的列的具体值,一般与上面写的相同

            Dim cmd As New SqlCommand("select btypeno from booktype where btypename='" & ComboBox1.Text & "'", con)
            Me.TextBox1.Text = cmd.ExecuteScalar().ToString()
            TextBox1.Focus()
            con.Close()
        End Sub
        对ComboBox1_DropDownClosed事件:
            con.Open()
            Dim cmd1 As New SqlCommand("select btypeno from booktype where btypename='" & Me.ComboBox1.Text.Trim & "'", con)
            Me.TextBox1.Text = cmd1.ExecuteScalar().ToString()
            con.Close()
        End Sub
    但是在程序执行时发现:要连续选择同一个图书类型名称两次,textbox里的内容才变化一次,(比如要连续重复选择类别名称:“计算机”两次,下面的textbox里才能显示:“TP001”),请问这是怎么回事?若将ComboBox1_DropDownClosed改成comboBox1_SelectedIndexChanged ,当load事件中运行到Me.ComboBox1.DataSource = myds 时程序直接跳到comboBox1_SelectedIndexChanged 事件,且执行这个事件的con.open 时会报错:" 连接未关闭。 连接的当前状态为打开。" 单步执行发现load时已经触发了SelectedIndexChanged事件.最后尝试在load事件开始时加ComboBox1.Enabled = False,在con.close()之后在将ComboBox1.Enabled设置成True,即: load事件:
                         ComboBox1.Enabled = False
                         con.Open()
                         。。。。
                         con.close()
                         ComboBox1.Enabled = true
    再次执行程序,仍然是当load事件中运行到Me.ComboBox1.DataSource = myds 时程序直接跳到comboBox1_SelectedIndexChanged 事件,且执行这个事件的con.open 时会报错:" 连接未关闭。 连接的当前状态为打开。" 这个问题怎么解决?
    谢谢!
    2009年4月23日 4:15

答案

  • 对于链接未关闭这样的错误除了楼上的这种写法外你试试下面的代码。

    Using scon As New SqlConnection()
    End
    Using

    此外,我觉得如果你要textbox中的数据根据combox选择的项而改变应该是用comboBox1_SelectedIndexChanged这个事件,而不是用ComboBox1_DropDownClosed这个事件。
    Microsoft Online Community Support
    2009年4月27日 6:23

全部回复

  • 你好, con.Open()  加个条件判断一下试试

        If conn.State <> ConnectionState.Open Then
                conn.Open()
            End If

    知识改变命运,奋斗成就人生!
    2009年4月23日 5:15
    版主
  • 对于链接未关闭这样的错误除了楼上的这种写法外你试试下面的代码。

    Using scon As New SqlConnection()
    End
    Using

    此外,我觉得如果你要textbox中的数据根据combox选择的项而改变应该是用comboBox1_SelectedIndexChanged这个事件,而不是用ComboBox1_DropDownClosed这个事件。
    Microsoft Online Community Support
    2009年4月27日 6:23
  • 谢谢你们!
    2009年4月29日 16:10