Выложил обновленный вариант. Изменения:
- Исправлен баг с ошибкой при нажатии "End".
- Исправлен баг: могла многократно дублироваться последняя строка выборки

- Добавлен метод "УстановитьПараметр (НазваниеПараметра, ЗначениеПараметра)". Использование можно посмотреть в тестовой обработке.
- Реализован медленный быстрый поиск. Поиск работает по любой колонке. Работает тупым перебором всех значений в колонке, начиная с первой строки. Регистронезависим.
Что не понравилось в ТП (
На Дмитро я еще не наезжал? Щас будет)
1) Интерфейс CDataProvider - скрещение ужа с ежом. Присутствует методы, которые позволяют ТП управлять провайдером, вместе с методами, которыми провайдер может управлять ТП. ИМХО, нужно в этом интерфейсе сделать метод, которым ТП передаст интерфейс для взаимодействия с ним. К тому же в невиртуальных методах торчат детали реализации: HWND и пересылка сообщений. Это не хорошо. Представим ситуацию: ТП на клиентской машине, а провайдер может лежать либо на той же машине, либо на сервере. Если бы вместо невиртуальных функций был полноценный интерфейс, то реализовать такую систему можно было бы проще и красивее. А так еще и фиктивный HWND делать...
2) Не понравилась реализация перетаскивания ползунка прокрутки. Похоже, при этом фетчатся строки, пока не дофетчим до нужной. Или я чего не понял? Происходит переколупывание нехренового объема данных, что приводит к тормозам. Также это является недостатком по сравнению со штатными гридами - они-то такие штуки обрабатывают влет и без тормозов. Воспроизвести тормоза можно, например, таким запросом:
SELECT
Журнал.IDDocDef + Журнал.IDDoc AS [Документ $Документ]
FROM
1sjourn AS Журнал
ORDER BY
Журнал.Date, Журнал.Time
и поперетаскивать ползунок. Вообще, если не таскать ползунок, то работает довольно шустро.Не слишком большая пауза при выборке данных, а дальше без тормозов. Для теста использую не слишком большую базу (2К номенклатуры и документы за 2 года). Однако ест много памяти. ИМХО, для ТП нужен еще один метод в CDataProvider: аналогичный QueryRows, но с дополнительным параметром: смещение от переданной строки. Такая штука вроде неплохо ложится как на XBase методы доступа, так на SQL.
3) Лик строк в быстром поиске? В методе QuickSearch провайдер должен сделать поиск и, если нашел, вызывать SetCurrentRow. В SetCurrentRow передается указатель на строку, которую надо сделать текущей. Эта строка в ТП не освобождается. Тут что, подразумевается, что освобождать должен провайдер? ИМХО, нелогично. Во-первых, это не указано в документации. Во-вторых, при обычной выборке данных строки удаляет всегда ТП. В-третьих, реализация ТП может смениться и оно может захотеть временно хранить эту строку для своих целей.
По поводу Буста. ИМХО, если какие-то ретрограды не хотят его использовать, то их никто не заставляет. Им достаточно скачать пару мегов хедеров, прописать путь к ним в Студии и ... не использовать Буст. Проект будет собираться, а в своем коде они могут Буст никак не задействовать. А то что это за детский максимализм (с) получается? "Не хочу, не буду осваивать Буст, так не доставайся он никому!".