首页 > 解决方案 > 读取 SQL 表单元格值,只更改 ComboBox.text 而不更改 ComboBox 集合项

问题描述

我正在尝试为微型策略游戏制作军队列表构建器。

我想知道读取 SQL 表单元格值并将每个单元的值放入 ComboBox.text 字段的正确方法,但只放入字段中。

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

作为记录,目前,我读取了其他表信息并以这种方式将它们加载到其他 ComboBoxes 中:

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

非常感谢 :-)

我要加载单元格值的 ComboBox.text

带有我要加载到单元格中的带框值的表格图片

我想保留的原始 ComboBox 集合

编辑 2:

我的表结构

你的函数调用

程序的简短剪辑,以了解我的问题

如您所见,该功能看起来不错,当我在执行期间检查 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

标签: sqldatabasevb.netcombobox

解决方案


你的sql查询问题。您的查询选择所有内容,并且您假设返回与您的项目相关的 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

推荐阅读