我正在将我编写的Access数据库移植到VB.NET上,虽然我已经使用Access 25年了,但我已经使用了VB.NET 2天,所以我不知道它的功能是什么。
在我的Access表单中,我有一个组合框,它允许用户从表中选择一个部件记录。使用Access,我可以向做出选择的用户显示多个列-- PartID、Description、notes等等。然而,一旦选择了部件,组合框关闭,我只显示唯一的部件ID。其他列帮助用户选择,但使表单看起来非常混乱。
在我的VB.NET表单中,我将ValueMember设置为PartID。但我只知道如何将DisplayMember设置为单个字段。我创建了一个复合字段"PartID \ selection \ Notes“,但这就是即使在选择完成之后也会出现的内容。
在VB.NET中,是否可以在打开框时显示一件东西,在选择完成后显示另一件东西?
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
发布于 2020-05-30 22:05:55
我明白你想做什么了。我在MS Access上也是这么做的,但那是20多年前的事了。
我同意吉米的看法。从设计的角度来看,尝试在新的环境中复制类似于访问的特性并不是一个好主意。
用户熟悉Winforms控件,在UI布局和一致性方面有一定的期望。如果你正在从头开始构建一个新的UI,你应该抓住机会重新设计它并使它现代化。不要只带着25岁的习惯。尤其是如果您不是该应用程序的唯一用户,因为您不希望人们认为您的编码方法停留在20世纪.
在VB.NET中,是否可以在打开框时显示一件东西,在选择完成后显示另一件东西?
如果您确实希望实现此行为,则需要使用组合框事件。您需要的两个事件是DropDownClosed和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
诀窍是,每当用户折叠/展开组合框时,就更改DisplayMember
属性。基本价值保持不变。
我不知道你是否需要从键盘自动完成或有其他需要。treeview
或listview
听起来像是明显的替代品。但你说过你想要一个“紧凑”的控制。这就是你要的。
https://stackoverflow.com/questions/62107541
复制相似问题