如何在ComboBox中将多列显示为列表?

时间:2015-12-15 13:44:05

标签: sql vb.net ms-access combobox

我想在组合框中显示多个特定列,并将其用作查询的搜索参数。任何想法,如果这是我可以做的事情?

我将举例说明下表:

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'

所以在Nutshell中,如果可能的话,如何让组合框显示查询结果的特定列? - 如何在上一个组合框中显示一个文本框以显示选择右侧的列(例如,选中' 1'将显示' Notes'列,选择& #39; 2'会显示' Notes 2'列如果没有,还有其他选择吗?谢谢!

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

1 个答案:

答案 0 :(得分:2)

实际上听起来像是(除非我误解了)所谓的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号,它会让它变得更容易(实际上很多更容易),所以你可以引用它而不必同时按两个CompanyName过滤和文件,但这是一般的想法。

修改

我刚刚意识到你的数据集没有被标准化,我的答案在没有经过调整的情况下无法工作。如果可能的话,你应该normalize your dataset。不要听起来像数据势利小人,但人们上学学习这些东西的原因;它的重要。你的桌子看起来应该更像这样:

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