Обновление источника строк в выпадающем списке - как выпадающий список обновления - PullRequest
0 голосов
/ 06 марта 2012

У меня есть элемент управления в виде дерева в форме 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

Но, как ни странно, это не обновляет список значений. Второй щелчок по тому же узлу обновляет список до ожидаемых значений; при щелчке по другому узлу список снова оказывается неправильным (он содержит список, относящийся к ближайшему к последнему назначенному источнику строк, а не к последнему назначенному источнику строк).

Есть ли некоторая задержка в активации источника строк поля со списком?
Как решить эту неприятную проблему?

1 Ответ

0 голосов
/ 07 марта 2012

ОК нашел решение для этого сам - мне это не особо нравится (*), но оно работает, поэтому я рассматриваю его как временное решение, пока кто-то другой не предоставит решение, использующее королевский маршрут (установкакаким-то образом заставить это иметь желаемый эффект).

Я проверил сайт 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 и ссылку аргументы кода конкретной функции на нем.

(*) из-за очевидных накладных расходов на набор записей, приводящих к падению производительности - но так как список, который я показываю, не более 40 строк, он отлично работает для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...