我在MS Access表单上有一个treeview控件。子窗体组合框控件的值列表取决于主窗体上树视图中选择的节点。 我试图刷新子窗体上的组合框下拉列表内容,如下所示:
Public Sub TreeView1_nodeClick(ByVal node As Object)
subForm.Controls("Bid").RowSource = "... newquery depending on tree node values ..."
subForm.Controls("Bid").Requery
End Sub
但奇怪的是,这并没有更新值列表。 再次单击同一节点会将列表更新为预期值;当单击另一个节点时,列表再次出错(它包含与下一个最后分配的行源相关的列表,而不是与分配的最后一个相关的列表)。
激活组合框'rowsource是否有一些延迟?
这个令人讨厌的问题的解决方案是什么?
答案 0 :(得分:0)
确定我自己找到了解决方案 - 我不是特别喜欢它(*),但它确实有效,所以我认为它是临时解决方法,直到其他人使用皇家路线提供解决方案(设置) rowsource以某种方式使它具有所需的效果。)
我检查了msdn网站,发现也可以为组合框列表填充使用自定义函数。这方面的简单部分是Access必须使用该函数的规范:只需在组合框的行Source Type属性中输入函数名称,只需输入普通函数名称,前面没有any =或者()背后。
现在,对于不太容易的部分 - 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行,它对我来说很好