如何设置组合框,始终将具有相同的数据,作为要在多个表单上使用的用户控件

How to Setup A Combox , always will with same data, as a user control to be used on multiple forms

我有一个在多个 WinForms 上使用的 ComboBox。不是在每个 WinForm 上放置一个 ComboBox,然后用每个单独 WinForm 上的 DataTable 中的数据填充 ComboBox,我不能创建一个已经填充数据的用户控件 (ComboBox) 并只在我的 Winforms 上使用该 UC 吗?

下面是我现在如何为每个单独的组合框填充数据。 (我有一个 public class 用于 sql 东西)

变量 SQL 来自一个名为 SQLControl 的 Class。 Class 具有所有 sql 连接内容。

Public Sub Fillcombobox()

    sql.AddParam("@ExaminerType", 3)
    sql.ExecQuery("MyStoredProcedure")
    ComboBoxExaminer.ValueMember = "Examiner_ID"
    ComboBoxExaminer.DisplayMember = "Last_Name"
    ComboBoxExaminer.DataSource = sql.DBDT
End Sub

Private Sub MyWinform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Call Fillcombobox()
End Sub

你可以放一个小的Class Examiner

Public Class Examiner
    Public Property Examiner_ID As Integer
    Public Property Last_Name As String
    Public Sub New(ID As Integer, lname As String)
        Examiner_ID = ID
        Last_Name = lname
    End Sub
End Class

然后,当加载第一个表单时,获取模块中声明的列表中的数据,以便可以从应用程序中的任何表单访问它。当然,你的Module里可能还有其他东西。

Module Module1
    Public ExaminerData As New List(Of Examiner)
End Module

Private Sub MyWinform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    FillExaminerList()
    ComboBoxExaminer.ValueMember = "Examiner_ID"
    ComboBoxExaminer.DisplayMember = "Last_Name"
    ComboBoxExaminer.DataSource = ExaminerData
End Sub

任何其他需要数据填充组合框的表单都可以使用 ExaminerData。您只需在应用程序开始时调用 FillExaminerList 一次。数据库只有一次命中。

Private OPConStr As String = "Your connection string."

Private Sub FillExaminerList()
    Dim dt As New DataTable
    Using cn As New SqlConnection(OPConStr),
            cmd As New SqlCommand("MyStoredProcedure", cn)
        cmd.Parameters.Add("@ExaminerType", SqlDbType.Int).Value = 3
        Using reader = cmd.ExecuteReader
            dt.Load(reader)
        End Using
    End Using
    For Each row As DataRow In dt.Rows
        Dim ex As New Examiner(CInt(row("Examiner_ID")), row("Last_Name").ToString)
        ExaminerData.Add(ex)
    Next
End Sub