读取一个 SQL table 单元格值并且只更改一个 ComboBox.text 而不更改 ComboBox 集合项

Read a SQL table cell value and only change a ComboBox.text without changing the ComboBox collection items

我正在尝试为微型战略游戏制作军队列表生成器。

我想知道读取 SQL table 单元格值并将每个单元放入 ComboBox.text 字段的正确方法,但仅限于该字段.

ComBoBox 集合项不应修改(我需要它们保持原样)。我只想用红色框的值修改 ComboBox.text 值,并且对于每个单元

作为记录,目前,我阅读了其他 table 信息并以这种方式将它们加载到其他组合框中:

Private Sub TextBoxQuantitéUnités_Click(sender As Object, e As EventArgs) Handles TextBoxQuantitéUnités.Click
        Dim connection As New SqlConnection("Data Source=Server;Initial Catalog=OST;Integrated Security=True")
        Dim dt As New DataTable
        Dim sqlquery As String

        connection.Open()

        sqlquery = "select * from liste1 Order By index_unité"

        Dim SQL As New SqlDataAdapter(sqlquery, connection)
        SQL.Fill(dt)

        Dim cmd As New SqlCommand(sqlquery, connection)
        Dim reader As SqlDataReader = cmd.ExecuteReader

        ComboBoxNomUnités.DataSource = dt
        ComboBoxNomUnités.DisplayMember = "nom_unité"

        ComboBoxTypeUnités.DataSource = dt
        ComboBoxTypeUnités.DisplayMember = "type_unité"

        ComboBoxAbréviationUnités.DataSource = dt
        ComboBoxAbréviationUnités.DisplayMember = "abréviation_unité"

        ComboBoxCoutTotal.DataSource = dt
        ComboBoxCoutTotal.DisplayMember = "cout_unité"

        connection.Close()
    End Sub

非常感谢:-)

The ComboBox.text where I want to load the cell value

The table picture with the framed value I want to load into the cell

The original ComboBox collection I want to keep

编辑 2:

My table structure

Your function call

A short clip of the program in order to understand my problem

如您所见,该功能看起来不错,当我在执行过程中检查 ComboBoxQuality 文本时,它看起来不错,但由于某种原因,它没有改变...

其他组合框是同步的,如您在上面的代码中所见。

提前致谢...

编辑 3:

要求的全部代码:

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Sql



Public Class FormOst
    Public Function GetStringFromQuery(ByVal SQLQuery As String) As String
        Dim CN = New SqlConnection("Data Source=Server;Initial Catalog=OST;Integrated Security=True")

        CN.Open()

        Dim StrSql As String = SQLQuery

        Dim cmdReader As SqlCommand = New SqlCommand(StrSql, CN)
        cmdReader.CommandType = CommandType.Text

        Dim SdrReader As SqlDataReader = cmdReader.ExecuteReader(CommandBehavior.CloseConnection)

        GetStringFromQuery = ""
        Try
            With SdrReader
                If .HasRows Then
                    While .Read
                        If .GetValue(0) Is DBNull.Value Then
                            GetStringFromQuery = ""
                        Else
                            If IsDBNull(.GetValue(0).ToString) Then
                                GetStringFromQuery = ""
                            Else
                                GetStringFromQuery = .GetValue(0).ToString
                            End If
                        End If
                    End While
                End If
            End With
            CN.Close()

        Catch ex As Exception
            MsgBox(SQLQuery, MsgBoxStyle.Exclamation, "Error")
        End Try
    End Function




    Private Sub TextBoListeArmées_Click(sender As Object, e As EventArgs) Handles TextBoxListeArmées.Click
        Dim connection As New SqlConnection("Data Source=Server;Initial Catalog=OST;Integrated Security=True")

        Dim dt As New DataTable
        Dim sqlquery As String

        connection.Open()

        sqlquery = "select [nom_unité] + ' | ' + [abréviation_unité] as Unité, index_unité, abréviation_unité, type_unité, qualité_unité, cout_unité from liste1 Order By index_unité"

        Dim SQL As New SqlDataAdapter(sqlquery, connection)
        SQL.Fill(dt)

        Dim cmd As New SqlCommand(sqlquery, connection)

        ComboBoxNomUnités.DataSource = dt
        ComboBoxNomUnités.DisplayMember = "Unité"
        ComboBoxNomUnités.AutoCompleteMode = AutoCompleteMode.Append
        ComboBoxNomUnités.AutoCompleteSource = AutoCompleteSource.ListItems

        ComboBoxTypeUnités.DataSource = dt
        ComboBoxTypeUnités.DisplayMember = "type_unité"

        ComboBoxAbréviationUnités.DataSource = dt
        ComboBoxAbréviationUnités.DisplayMember = "abréviation_unité"

        ComboBoxCoutUnité.DataSource = dt
        ComboBoxCoutUnité.DisplayMember = "cout_unité"

        LabelListeChargéeVisible.Enabled = True
        LabelListeChargée.Visible = True

        connection.Close()
    End Sub

    Private Sub TextBoxQuantitéUnités_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBoxQuantitéUnités.KeyPress
        If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
            e.Handled = True
        End If
    End Sub

    Private Sub TextBoxQuantitéUnités_TextChanged(sender As Object, e As EventArgs) Handles TextBoxQuantitéUnités.TextChanged
        Try
            TextBoxCoutTotal.Text = (Decimal.Parse(TextBoxQuantitéUnités.Text) * Decimal.Parse(ComboBoxCoutUnité.Text)).ToString()
        Catch ex As Exception
        End Try

    End Sub

    Private Sub ButtonEffacer_Click(sender As Object, e As EventArgs) Handles ButtonEffacer.Click
        TextBoxQuantitéUnités.Text = ""
        ComboBoxNomUnités.Text = ""
        ComboBoxTypeUnités.Text = ""
        ComboBoxQualitéUnités.Text = ""
        ComboBoxAbréviationUnités.Text = ""
        ComboBoxCoutUnité.Text = ""
        TextBoxCoutTotal.Text = ""

    End Sub



    Private Sub LabelListeChargéeVisible_Tick(sender As Object, e As EventArgs) Handles LabelListeChargéeVisible.Tick
        LabelListeChargée.Visible = False
        LabelListeChargéeVisible.Enabled = False
    End Sub

    Private Sub ComboBoxNomUnités_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBoxNomUnités.SelectionChangeCommitted
        Try
            ''  TextBoxCoutTotal.Text = (Decimal.Parse(ComboBoxCoutUnité.SelectedItem.ToString) * Decimal.Parse(TextBoxQuantitéUnités.Text)).ToString
            ComboBoxQualitéUnités.Text = GetStringFromQuery("SELECT qualité_unité FROM liste1 ORDER BY index_unité")
        Catch ex As Exception
        End Try

    End Sub


End Class

通过sql查询

检索数据的功能
Public Function GetStringFromQuery(ByVal SQLQuery As String) As String
   Dim CN  As New SqlConnection("Data Source=Server;Initial Catalog=OST;Integrated Security=True")


    CN.Open()

    Dim StrSql As String = SQLQuery

    Dim cmdReader As SqlCommand = New SqlCommand(StrSql, CN)
    cmdReader.CommandType = CommandType.Text

    Dim SdrReader As SqlDataReader = cmdReader.ExecuteReader(CommandBehavior.CloseConnection)
    'SdrReader = cmdReader.ExecuteReader
    GetStringFromQuery = ""
    Try
        With SdrReader
            If .HasRows Then
                While .Read
                    If .GetValue(0) Is DBNull.Value Then
                        GetStringFromQuery = ""
                    Else
                        If IsDBNull(.GetValue(0).ToString) Then
                            GetStringFromQuery = ""
                        Else
                            GetStringFromQuery = .GetValue(0).ToString
                        End If
                    End If
                End While
            End If
        End With
        CN.Close()

    Catch ex As Exception
        MsgBox(SQLQuery, MsgBoxStyle.Exclamation, "Error")
    End Try
End Function

检索数据并放入您的组合框文本

ComboBox.Text = GetStringFromQuery("Enter Sql Query here")

您的 sql 查询问题。 您的查询 select 所有内容并且您假设 return 与您的项目相关的 UOM

 Private Sub ComboBoxNomUnités_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBoxNomUnités.SelectionChangeCommitted
    Try
        Dim Product as string = ComboBoxNomUnités.Text
        ComboBoxQualitéUnités.Text = GetStringFromQuery("SELECT qualité_unité FROM liste1 Where Nom_Unité = '" & Product & "'")
    Catch ex As Exception
    End Try

End Sub