2012-08-31 5 views
0

У меня есть Listbox (go figure), и этот список не привязан к RecordSource и динамически построен на основе других вариантов управления конечным пользователем. Раньше у меня не было большой проблемы с этим, но с этой текущей динамической ситуацией запроса столбцы не были окончательно постоянными. Поскольку используемый RecordSet является запросом CrossTab, одна четверть запроса CrossTab может содержать 5 столбцов, следующие 8 столбцов и следующие 3 столбца.Список не отображается Заголовки

Большинство из реализованных мной ListBox имеют статическое количество столбцов, которые я могу предсказать, но в этой ситуации я не могу точно предсказать количество столбцов.

Я поставил ColumnHeads свойство Yes, так это еще не проблема, и я даже сбросить ColumnHeads свойства против в VBA до AddItem операции я установка.

Logic Я использую для работы в/вокруг Listbox в вопросе (lstCategoryPG):

If lstCatType.ListIndex >= 0 Then 
'Application.Echo False 'Turn off Screen Updating 

    Dim crt As String: crt = "crt_CategoryPG" 'Cross-Tab Query 
    Dim cttbl As String: cttbl = CreateCTTable(crt) 'Create Table to store the Cross-Tab information 
    Dim sql As String: sql = SQLSelect(cttbl) 
    Dim flds As DAO.Recordset: Set flds = CurrentDb.OpenRecordset(sql) 
    Dim fldwd As String  'Store the Field Width pattern 
    fldwd = "0"";0"";2""" 'Handles `tid` and `cid` columns in the ListBox 
    'Assign the number of columns based on the number of fields in CTtable 
    lstCategoryPG.ColumnCount = flds.Fields.Count 

    Dim fld As Long 
    For fld = 3 To (flds.Fields.Count - 1) 
     fldwd = fldwd & ";.75""" 
    Next 
    flds.Close: Set flds = Nothing 

    lstCategoryPG.ColumnWidths = fldwd 

    sql = SQLSelect(cttbl, , ("tid = " & lstCatType.Value)) 

    lstCategoryPG.Enabled = True 
    lstCategoryPG.ColumnHeads = True 
    RefreshControl CurrentDb, lstCategoryPG, sql, , False 
'Application.Echo True  'Turn Screen Updating back on 
End If 
+0

В чем вопрос и почему вы не хотите использовать подформу, которая была бы намного проще? – Fionnuala

+0

Мне нужно сделать элемент редактируемым .... через всплывающее окно, так как вы не можете обновить сингулярные значения, отображаемые в CrossTab – GoldBishop

+0

. Я использую всплывающее окно для внесения изменений от конечного пользователя и логически группировать их для обновлений. – GoldBishop

ответ

0

Ориентировочное обкатки исправить решение, которое работает для меня, пока я не могу попасть в кишках и понять, почему заголовки столбцов не извлекаются из полей запроса.

If lstCatType.ListIndex >= 0 Then 
'Application.Echo False 'Turn off Screen Updating 

    Dim crt As String: crt = "crt_CategoryPG" 'Cross-Tab Query 
    Dim cttbl As String: cttbl = CreateCTTable(crt) 'Create Table to store the Cross-Tab information 
    Dim sql As String: sql = SQLSelect(cttbl) 
    Dim flds As DAO.Recordset: Set flds = CurrentDb.OpenRecordset(sql) 
    Dim fldwd As String, fldhd As String  'Store the Field Width pattern and Field Header Row 
--> fldhd = "-1;-1;Category" 
    fldwd = "0"";0"";2.5""" 'Handles `tid` and `cid` columns in the ListBox 
    'Assign the number of columns based on the number of fields in CTtable 
    lstCategoryPG.ColumnCount = flds.Fields.Count 

    Dim fld As Long 
    For fld = 3 To (flds.Fields.Count - 1) 
     fldwd = fldwd & ";.75""" 
-->  fldhd = fldhd & ";" & flds.Fields(fld).Name 
    Next 
    flds.Close: Set flds = Nothing 

    lstCategoryPG.ColumnHeads = True 
    lstCategoryPG.ColumnWidths = fldwd 

    sql = SQLSelect(cttbl, , ("tid = " & lstCatType.Value)) 

    lstCategoryPG.Enabled = True 
    RefreshControl CurrentDb, lstCategoryPG, sql, , False 
--> lstCategoryPG.AddItem fldhd, 0 
'Application.Echo True  'Turn Screen Updating back on 
End If