首页 > 解决方案 > 如何在与表中的值相关的多选列表框中自动选择项目?

问题描述

到目前为止,我已经完成了与此相反的操作——我已经根据在多选列表框中所做的选择将记录输入到表中。多选列表框命名为“lstboxColor”,表命名为 tblColors。这是通过以下代码完成的:

Set rs = New ADODB.Recordset
    Dim itm As Variant
    cnnLocal.CursorLocation = adUseClient 'avoid error 3705

'SET UP A LOOP TO ADD A COLOR RECORD IN THE COLORS TABLE FOR EACH SELECTED COLOR
    rs.Open "tblColors", cnnLocal, adOpenDynamic, adLockOptimistic

   For Each itm In lstboxColor.ItemsSelected

        rs.AddNew
        rs!CrayonID = CrayonID_HOLD 
        rs!ColorID = lstboxColor.ItemData(itm)
        rs.Update

  Next

     rs.Close 

所以,现在我想做相反的事情——我需要打开一个带有列表框的表单,并根据表中的值自动预选多选列表框中的项目。除了循环遍历表并使用 if 语句和 .Selected = true 之外,似乎无法弄清楚所需的方法。有任何想法吗?先感谢您。

编辑:添加了几乎可以工作的当前代码。更改了我需要做的事情 - 我正在使用 3 个表格,并且有一个组合框选择自动选择列表框中的行。代码在组合框的 AfterUpdate() 中。我添加了“Else: If rs.NoMatch Then .Selected(i) = False”——但这不是问题。认为它可能是 SQL 查询,但同样的查询在子表单中提取了正确的答案,所以我知道该查询有效。可能是我用于列表框行的查询(仅从 tblEquipment 中选择 EquipmentID 和 Equipment name)?请让我知道您对它可能仅突出显示列表框中的一行的原因有何看法。

编辑:此代码适用于 3 个表。组合框中的选择会自动选择列表框中的正确行。解决方案标记为 2 个表版本(或一个表),但概念相同。

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Integer
Dim strSQL As String
Set db = CurrentDb

Set rs = db.OpenRecordset("SELECT tblMusicEquipment.EquipmentID, * 
FROM tblMusic 
INNER JOIN (tblEquipment INNER JOIN tblMusicEquipment
ON tblEquipment.EquipmentID = tblMusicEquipment.EquipmentID)
ON tblMusic.InstrumentID = tblMusicEquipment.InstrumentID
WHERE  (((tblMusic.InstrumentID))) = " & [cboSelectInstrument])

With Me.LstEditEquip

    For i = 0 To .ListCount - 1

       rs.FindFirst "EquipmentID =" & .ItemData(i)
       If Not rs.NoMatch Then
        .Selected(i) = True
       Else: If rs.NoMatch Then .Selected(i) = False
       End If

    Next

End With

标签: ms-access

解决方案


必须遍历列表框并与一个值进行比较以确定选择。在您的情况下,请在记录集上执行 FindFirst。如果找到匹配项,则选择项目。假设要匹配的值是数字键,请考虑:

    Dim rs As DAO.Recordset, i As Integer
    Set rs = CurrentDb.OpenRecordset("SELECT ColorID FROM tblColors WHERE CrayonID_HOLD=" & Me.CrayonID_HOLD)
    With Me.lstboxColor
    For i = 0 To .ListCount - 1
        rs.FindFirst "ColorID = " & .ItemData(i)
        .Selected(i) = Not rs.NoMatch
    Next
    End With

推荐阅读