Страница сайта http://www.silicontaiga.ru
Оригинал находится по адресу http://www.silicontaiga.ru/home.asp?artId=5443

Сортировка через контекстное меню

Администратор

Поиск по критериям - лишь половина задачи. Результаты поиска надо отсортировать! Можно повесить сортировку на кнопку, но если полей много, а места мало?

1. Не знаю как вы, а я выдаю результаты поиска, подменяя источник записей ListBox. Данный элемент мне нравится гораздо больше подчиненной формы. Почему? Считайте это прихотью программиста.))

2. Добавим в модуль (не формы, а просто модуль).

Public sqlOldList As String

Public Function SortBy(fld As String, Lst As ListBox)
Dim sql As String

sqlOldList = Trim(sqlOldList)

If Right(sqlOldList, 1) = ";" Then
sql = Left(sqlOldList, Len(sqlOldList) - 1) & " ORDER BY " & fld
Else
sql = sqlOldList & " ORDER BY " & fld
End If
Lst.RowSource = sql
'MsgBox sql
End Function

Переменная нам нужна для хранения источника данных.

3. На кнопке "Найти" у нас поиск. В конце, как передали в элемент измененный источник, в sqlOldList передаем его же, но без сортировки!!!

4. На загрузку формы вешаем передачу текущего источника в sqlOldList.

ГЛАВНОЕ, чтобы в исходном источнике (на момент загрузки) не было сортировки вообще! Т.е. в первый момент в списке видны неотсортированные данные.

5. Добавляем контекстное меню, которое впоследствии повесим на список. В элементах этого меню в качестве функции пишем что-то вроде: =SortBy("Table.[Field] DESC", Forms!MyForm!MyListBox)

6. Наслаждаемся результатом.

Пример работы с контекстным меню