winforms vb.net 组合框数据未更新

2w3kk1z5  于 2023-06-24  发布在  .NET
关注(0)|答案(1)|浏览(115)
Private Sub client_name_Leave(sender As Object, e As EventArgs) Handles client_name.Leave
    If client_name.Text = "" Then
        TextBox2.Focus()
    Else
        Dim dr3 As SQLiteDataReader
        Try
            cmd = New SQLiteCommand("select * from client where name='" & client_name.Text & "'  ", cn)
            cn.Close()
            cn.Open()
            dr3 = cmd.ExecuteReader()
            If dr3.HasRows = False Then
                'client_name.Focus()
                client_master.c1.Text = client_name.Text
                dr3.Close()
                Home.Panel1.Visible = False
                client_master.MdiParent = Me.MdiParent
                If client_master.WindowState = FormWindowState.Minimized Then
                    client_master.WindowState = FormWindowState.Normal
                End If
                client_master.Show()
                client_master.BringToFront()
            End If
            dr3.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        cn.Close()

        Exit Sub
    End If

End Sub

这是我的代码,然后我离开client_name组合框,如果输入的值在数据库中不可用,则打开client_master表单输入新的客户端详细信息,但在我输入新的客户端详细信息后,client_name组合框不显示最新输入的值而不重新启动表单,我如何在不重新启动表单的情况下获得最新输入的值。

at0kjp5o

at0kjp5o1#

您可以在ComboBox.DropDown事件中更新client_name ComboBox的内容。这将在每次打开ComboBox时更新客户端列表,因此客户端列表将始终是最新的。根据表中有多少客户记录,这可能需要一些时间并影响用户体验,因此,尽管这可以确保列表是最新的,但在我看来这是矫枉过正的。
一个更好的选择是在client_master表单完成添加新客户端信息时更新ComboBox。您可以在此时引发一个事件并处理该事件以更新ComboBox。
另一个更简单的解决方案是,一旦检测到它是一个新的客户端(在If dr3.HasRows = False块中),立即将客户端名称添加到ComboBox中:

client_name.Items.Add(client_name.Text)

但这样做也有一些缺点:
1.客户端名称将位于列表的底部。根据组合框最初的填充方式,名称可能不在列表中的预期位置。例如,如果ComboBox是按字母顺序填充的名称,那么客户端可能不在正确的位置。当然,您可以使用client_name.Items.Insert将其插入正确的位置
1.在client_master表格中输入客户信息的过程中,客户名称可能已被修改,这些修改不会反映在项目中。

相关问题