【问题标题】:subform combobox rowsource update - how update drop down list子表单组合框行源更新 - 如何更新下拉列表
【发布时间】:2012-03-06 15:28:26
【问题描述】:

我在 MS Access 表单上有一个树形视图控件。子窗体组合框控件的值列表取决于在主窗体的树视图中选择的节点。 我正在尝试实现子窗体上组合框下拉列表内容的刷新,如下所示:

Public Sub TreeView1_nodeClick(ByVal node As Object)
    subForm.Controls("Bid").RowSource = "... newquery depending on tree node values ..."
    subForm.Controls("Bid").Requery
End Sub

但奇怪的是,这并没有更新值列表。 第二次单击同一节点确实会将列表更新为预期值;当另一个节点再次被点击时,列表是错误的(它包含与下一个分配的行源相关的列表,而不是与分配的最后一个相关的列表)。

激活组合框的行源是否有一些延迟?
这个令人讨厌的问题的解决方案是什么?

【问题讨论】:

    标签: ms-access vba combobox


    【解决方案1】:

    OK 我自己找到了一个解决方案 - 我不是特别喜欢它 (*),但它确实有效,所以我将其视为临时解决方法,直到其他人使用皇家路线提供解决方案(设置 rowsource 和以某种方式使其具有预期的效果)。

    我查看了msdn站点,发现也可以使用自定义函数来填充组合框列表。最简单的部分是 Access 必须使用该函数这一事实的规范:只需在组合框的 Source Type 属性行中输入函数名称,只需简单的函数名称,前面没有任何 = 或 ()在它背后。
    现在对于不太容易的部分 - MS 需要特定格式的功能和特定内容。我的看起来如下:

    Private Function customFuncName(fld As Control, id As Variant, row As Variant, col As Variant, code As Variant) As Variant
        Dim rs As Recordset
        Set rs = CurrentDb.OpenRecordset(... new query ...)
    
        Select Case code
            Case acLBInitialize
                customFuncName = True
            Case acLBOpen
                customFuncName = 1
            Case acLBGetRowCount
                customFuncName = rs.RecordCount
            Case acLBGetColumnWidth
                customFuncName = -1
            Case acLBGetValue            
                customFuncName = rs.GetRows(rs.RecordCount)(col, row)
        End Select
    
    End Function
    

    查看msdn.microsoft.com rowSourceType property 和上面的链接specific function code arguments

    (*) 因为明显的记录集开销导致性能下降 - 但由于我显示的列表最多 40 行,它对我来说很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2020-06-27
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多