【问题标题】:VB.Net Combo Box Number from Query查询中的 VB.Net 组合框编号
【发布时间】:2020-10-25 20:50:00
【问题描述】:

所以我有一个包含 2 行代码的数据库,名称可以这么说 代码名称 1 / 约翰 2 / 乔治

我使用此查询将它们带入我的组合框。

strConnection = String.Format("Provider=SQLOLEDB;Data Source={0};Initial Catalog={1};User ID={2};Password={3};",
                                          strServer, strDataBase, strUserName, strPassword)

            Dim Connection As New OleDbConnection(strConnection)
            Connection.Open()
            Dim cm As New OleDbCommand("SELECT Codeid [Κωδικός],descr [Περιγραφή] FROM EMBONILO_B.DBO.manufacturer GROUP BY Codeid,descr", Connection)
            Dim dr As OleDbDataReader = cm.ExecuteReader
            While dr.Read
                ComboBox.Items.Add(dr(1).ToString)
            End While
            dr.Close()
            Connection.Close()

它显示了约翰和乔治的名字。我想要的是当您单击组合框并选择一个名称时,我希望代码出现在组合框上让我们说如果它的乔治选择了我想要组合框中的数字 2 等。

感谢您的提前。

【问题讨论】:

  • 在不涉及集合函数的情况下为什么要使用 GROUP BY?
  • GROUP BY 暂时没有使用,所以没什么可看的。
  • 为什么要在ComboBox中显示代码?当您最初填充它时,您可以很容易地显示它。您可以在代码中使用 codeid,但您确定要更改显示的内容吗?
  • 因为我想在我的数据库中写代码 id 因为其他表使用内连接从 codeid 获取一些值

标签: sql vb.net


【解决方案1】:

当您向 ComboBox 添加项目时,您只需设置 Text 属性,而不是 Value 属性。 ComboBox.Items.Add() 应该有一个重载,当您在 While 循环中有项目时,您也可以在其中指定值,例如 ComboBox.Items.Add(dr(1).ToString(), dr(0).ToString())ComboBox.Items.Add(New ListItem(dr(1).ToString(), dr(0).ToString())) 如果您使用的是 ASP.NET WebForms。无论哪种方式,每个列表项都将具有单独的 Text 和 Value 属性;您想将 ID 放在 Value 属性中,然后您可以使用 ComboBox.SelectedValue 或类似方法在代码中获取选定的 ID,具体取决于您用于组合框的控件。

我的假设是您确实想在代码中获取 ID 以存储在 db 表中,而不是在 UI 中显示。

【讨论】:

  • 我没有,我不知道引用了哪种 ComboBox。我提供了关于如何获得所需结果的建议,我假设它具有与为每个项目显示的文本相关联的数值。如果这是 ASP.NET 网络表单,那么添加新的 ListItem 对象将是我的第二个示例中的方法。
  • 我会将其添加到您的答案中。是 WinForms 的第一个狙击手吗?无论如何,OP希望在选择项目时在组合框中显示codeID。
  • 我添加了一些说明。我回答假设 OP 试图弄清楚如何将 ID 包含在组合框中以供后续检索,而不是实际显示它,我相信他们后来在 cmets 中说明了这一点。
【解决方案2】:

这一切都适用于 WinForms 应用程序。

声明一个表单级别的变量来保存组合框中当前选定描述的CodeID

由于GetDescriptionData 是从Form.Load 调用的,连接字符串中使用的strServerstrDatabase 等值此时必须可用。如果在收集到一些用户输入之前它们不可用,则将代码移动到一个按钮。 .DisplayMember.ValueMember 是 Select 语句中的字段名称。

将数据访问代码与用户界面代码分开。连接和命令需要关闭和处理。 Using...End Using blocks 会为我们解决这个问题。

表单级变量CurrentCodeIDComboBox.SelectedIndexChanged事件中设置。

Private CurrentCodeID As String

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim ComboDataTable = GetDescriptionData()
    ComboBox1.DisplayMember = "descr"
    ComboBox1.ValueMember = "Codeid"
    ComboBox1.DataSource = dt
End Sub

Private Function GetDescriptionData() As DataTable
    Dim dt As New DataTable
    Dim strConnection = String.Format("Provider=SQLOLEDB;Data Source={0};Initial Catalog={1};User ID={2};Password={3};",
                                      strServer, strDataBase, strUserName, strPassword)

    Using Connection As New OleDbConnection(strConnection),
            cm As New OleDbCommand("SELECT Codeid,descr FROM EMBONILO_B.DBO.manufacturer;", Connection)
        Connection.Open()
        dt.Load(cm.ExecuteReader)
    End Using
    Return dt
End Function

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    CurrentCodeID = ComboBox1.SelectedValue.ToString
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多