【问题标题】:Read a SQL table cell value and only change a ComboBox.text without changing the ComboBox collection items读取 SQL 表单元格值,仅更改 ComboBox.text 而不更改 ComboBox 集合项
【发布时间】:2021-04-04 20:42:12
【问题描述】:

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

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

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

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

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 database vb.net combobox


    【解决方案1】:

    通过 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")
    

    【讨论】:

    • 您好,Yat Fei Leong,感谢您的快速答复!好吧,也许我做错了什么,但它不起作用..我将函数放在公共类表单之后,并使用以下行调用该函数:ComboBoxQualitéUnités.Text = GetStringFromQuery("select qualité_unité from liste1 order by index_unité") 但是由于某种原因,它不起作用..(仅供参考,该函数自动将公共属性 ImporLinkCS 添加为字符串)
    • 我已经编辑了代码。您需要将连接更改为您自己的,而不是使用我的。
    • 感谢您的回复。我已经这样做了,但它不起作用..?
    • 如果您使用 sql server,请尝试使用相同的 sql 使用 sql management studio 查询它是否返回任何值。很可能是sql语句问题
    • 我用新东西编辑了我的第一篇文章(编辑 2)。该功能看起来不错,但由于某种原因,它不起作用。
    【解决方案2】:

    您的 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
    

    【讨论】:

    • 像魅力一样工作。非常感谢你! :-D
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2013-12-15
    • 2013-11-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多