【问题标题】:How to display multiple columns as a list in a ComboBox?如何在 ComboBox 中将多列显示为列表?
【发布时间】:2016-03-21 08:08:12
【问题描述】:

我想在组合框中显示多个特定列,并将其用作查询的搜索参数。如果这是我能做的,有什么想法吗?

我将在下面给出我的表格示例:

Company Name    Document    Notes    2nd Document    Notes 2
A               1           test     2               test
B               1           test     2               test
C               1           test     2               test
D               1           test     2               test

我设置了一个组合框参数,通过公司名称搜索查询。 因此,如果我在第一个组合框中选择“A”;结果将返回:

Company Name    Document    Notes    2nd Document    Notes 2
A               1           test     2               test

我希望下一个组合框显示“文档”列和“第二个文档”列;本质上显示特定公司的文件列表。

然后一旦选择了一个文档;我想要一个文本框来显示下一列。

例如

Combo box 1     Combo box 2           txt box:
'A' selected    '2' selected          Displays text from 'Notes 2'

所以简而言之,如果可能的话,我怎样才能获得一个组合框来显示查询结果的特定列? - 以及如何获得一个文本框来显示上一个组合框中选择右侧的列(例如,选择“1”将显示“注释”列,选择“2”将显示“注释 2”列如果没有,还有其他选择吗?谢谢!

编辑: 我有一个想法——也许有一种方法可以让查询将多个特定列转换为一个列表;然后在组合框中显示该列表?

【问题讨论】:

  • 在 CBO 中显示多位数据但又将它们分开的一种方法是使用 List(Of T) 作为数据源。 T 将是一个覆盖 ToString 以提供显示的类。尽管您可能要考虑使用 DataGridView 的列这么多
  • 您的数据存储在哪里?数据表?那种List<T>?是 VB.Net 还是 Ms-Access?到目前为止,您尝试过什么?

标签: sql vb.net ms-access combobox


【解决方案1】:

它实际上听起来像(除非我弄错了)所谓的Cascading Comboboxes

因此,您的第一个组合框会显示公司名称的所有唯一选项:

MyCombo1.RecordSource = "SELECT Distinct CompanyName FROM MyTable"

第二个组合框选择所选公司名称的所有唯一选项:

MyCombo2.RecordSource = "SELECT Distinct Document FROM MyTable 
    WHERE CompanyName = '" & MyCombo1.Value & "'"

如果需要,您可以无限执行此操作。只需继续将前一个组合框的值添加到下一个组合框的 RecordSource 的 WHERE 子句中即可。

最后,在最后一个组合框的 AfterUpdate 事件中,您设置了显示的文本。所以,在 MyCombo2 的 AfterUpdate 事件中,添加:

Dim db as Database
Dim rec as Recordset

Set db = CurrentDB
Set rec = db.OpenRecordset("SELECT Notes2 FROM MyTable 
    WHERE CompanyName = '" & MyCombo1.Value & "' AND Document = '" & MyCombo2.Value & "'"

MyTextbox.Text = rec(0)

当然,如果每条记录都有某种 ID 号,它会更容易(实际上是 很多和 Document,但这是大意。

编辑

我刚刚意识到您的数据集没有标准化,如果不进行一些调整,我的答案将无法正常工作。如果可能的话,你应该normalize your dataset。听起来不像是数据势利小人,但人们去学校学习这些东西是有原因的;这重要。您的表格实际上应该看起来更像这样:

CompanyName      Document     Notes
A                1            Test
A                2            Test 2
B                1            Test
B                2            Test 2

【讨论】:

  • 请原谅我的无知;我已经有几年没有使用访问权限了,所以再次了解这一切有点复杂。但是非常感谢你;我知道数据库看起来不对,只是不知道在哪里。我真是个白痴。我已经对其进行了规范化,并且组合框立即链接起来。很棒的东西!
猜你喜欢
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2012-09-02
  • 2017-03-18
  • 2022-07-24
  • 2013-12-18
相关资源
最近更新 更多