VB.NET 具有多个字段的组合框 select 来自

VB.NET Combo Box with multiple fields to select from

我正在移植我写到 VB.NET 的 Access 数据库,虽然我已经使用 Access 25 年,但我已经使用 VB.NET 2 天,所以我不清楚是什么能力是。

在我的 Access 表单中,我有一个组合框,允许用户从 table 中 select 部分记录。使用 Access,我可以向用户显示多个列,制作 selection - PartID、描述、注释等。然而,一旦部件被 selected 并且组合框关闭,我只显示唯一的部件 ID。其他列帮助用户选择但使表单看起来非常混乱。

在我的 VB.NET 表单中,我将 ValueMember 设置为 PartID。但我只知道如何将 DisplayMember 设置为单个字段。我创建了一个复合字段 "PartID | Description | Notes",但即使在 selection 完成后,它也会出现。

在 VB.NET 中是否可以在盒子打开时显示一件事,而在 selection 完成后显示另一件事?

    qry = "SELECT PartID, cast(PartID as string) & " | " & [partName] AS PartString
            FROM [Part_List]
            GROUP BY PartID, cast(PartID as string) & " | " & [partName]
            ORDER BY PartID;"
    cmd = New SqlCommand(qry, conn)
    adapter = New SqlDataAdapter(cmd)
    Dim tblPN As New DataTable()
    adapter.Fill(tblPN)

    ChoosePartNum.DataSource = tblPN
    ChoosePartNum.DisplayMember = "PartString"
    ChoosePartNum.ValueMember = "PartID"
    ChoosePartNum.SelectedIndex = -1

我明白你想做什么了。我也在 MS Access 中这样做过,但那是 20 多年前的事了。

我同意吉米的观点。从设计的角度来看,尝试在新环境中重现类似 Access 的功能并不是一个好主意。

用户熟悉 Winforms 控件,对 UI 布局和一致性有一定的期望。如果您要从头开始构建新的 UI,您应该抓住机会重新设计它并使其现代化。不要只保留 25 年的习惯。特别是如果您不是该应用程序的唯一用户,因为您不希望人们认为您的编码方法停留在 20 世纪...

Is it possible in VB.NET to show one thing when the box is open and another thing once the selection has been made?

如果您真的想实现此行为,您需要使用 组合框事件。您需要的两个事件是 DropDownClosed and DropDown.

这是如何完成的:

  Private Sub ComboBox1_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.DropDown
        With Me.ChoosePartNum
            .DisplayMember = "composite field"
        End With
    End Sub

    Private Sub ComboBox1_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.DropDownClosed
        With Me.ChoosePartNum
            .DisplayMember = "PartID"
        End With
    End Sub

诀窍是在组合框被用户 folded/unfolded 时更改 DisplayMember 属性。基础价值保持不变。

我不知道您是否需要键盘自动完成或有其他需求。 treeviewlistview 听起来很明显。但是你说你想要一个 'compact' 控件。给你。