无法在代码中更新列表框选定集合

时间:2014-03-06 04:36:30

标签: vba ms-access

我在查询中填充的表单上有一个列表框,其中的项目是根据匹配的分隔列表选择的。所以sSystemString等于“A; B; C”

然后我从SQL Server DB加载记录A,B,C,D,E,F,并且只应选择A,B,C。

在MS Access(2010)中是否有以本机方式执行此操作。我在这种情况下使用ADP。

我是通过代码进行的,但我不能选择的属性不能反映我的更改,也不能反映表单。

这是我的代码:

Dim rs As New ADODB.Recordset
Dim sSystemString As String

If Not IsNull(Me.OpenArgs) Then sSystemString = Me.OpenArgs

' Load this list box with SRC Systems
Call rs.Open("SELECT DISTINCT System FROM dbo.System WHERE System IS NOT NULL", _
CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly)


Do Until rs.EOF
    lstSrcSystems.AddItem (rs.Fields(0))
    If InStr(sSystemString, rs.Fields(0)) > 0 Then
        lstSrcSystems.Selected(lstSrcSystems.ListCount - 1) = True
    End If
    rs.MoveNext
Loop

我的代码肯定会点击lstSrcSystems.Selected(lstSrcSystems.ListCount - 1) = True行。

运行此行后,检查即时窗口中的属性仍然返回0(它不会更改)。在表单上,​​该项目也未被选中。

更新:我刚刚检查了我的代码,现在它正在更新,但下一个AddItem显然再次取消选择。

我怀疑我有一些奇怪的属性组合使这个只读,但我可以交互选择项目,实际上当我在代码中提取所选项目时,Selected属性按预期工作 - 即我选择一个项目在表格上,它反映在这个属性。

表单未绑定,并使用以下代码从另一个表单上的按钮调用:

DoCmd.OpenForm "fSiteList", acNormal, , , acFormEdit, acDialog, Me.SRCSystems

1 个答案:

答案 0 :(得分:0)

问题实际上是lstSrcSystems.AddItem (rs.Fields(0))正在重置Selected状态。我找不到任何提及此行为或如何将其关闭。我改变了我的表格如下:

  • 表格/数据属性全部为空白(未绑定)
  • 列表控制/数据/控制来源:空白
  • 列表控制/数据/行来源:填充我的列表的SELECT语句

这具有填充列表但不将列表或表单绑定到任何内容的效果。 (我发现绑定它阻止了我交互式编辑数据)

表单背后的

Form_Load代码已更改为选择已存在的项目:

Private Sub Form_Load()
    Dim sSystemString As String
    Dim iIndex As Integer

    ' List is bound to site list (from connections)
    ' Highlight those that are listed
    If Not IsNull(Me.OpenArgs) Then sSystemString = Me.OpenArgs
    iIndex = lstSrcSystems.ListCount

    Do While iIndex > 0
        If InStr(sSystemString, lstSrcSystems.ItemData(iIndex)) > 0 Then 
            lstSrcSystems.Selected(iIndex) = True
        End If
        iIndex = iIndex - 1
    Loop

End Sub

我仍然很想知道是否有更“内置”的方法来实现这一点:编辑分隔的字符串字段。