Допустим, что нам нужен грид для справочника (сейчас у меня под рукой небольшой: Номенклатура-SC12 = 32979).
Идем по короткому и простому пути:
- вывод с учетом иерархии;
- элементы первого уровня (parentid = ' 0 ');
- сортировка по наименованию;
- группы сверху;
- за границы первой порции не выходим (т.е. не двигаем курсор в гриде, а тупо смотрим);
Первая итерация: выводим наименования и row_id (как ключ для ТП) элементов.
select top 20
descr as Наименование,
row_id as row_id
from sc12 (nolock)
where
parentid = ' 0 '
order by
parentid,
isfolder,
descr,
row_id
Реакция мгновенная: попали в индекс PDESCR, получили 20 строк из 60 (на этом уровне всего 60 эл-ов). Все просто замечательно - пользователи довольны.
Вторая итерация: выводим наименования, isfolder (пользователи говорят, что не понятно кто из элементов списка есть группа, а кто элемент - будем рисовать пиктограммки) и row_id (как ключ для ТП) элементов.
select top 20
descr as Наименование,
isfolder as Пиктограммка,
row_id as row_id
from sc12 (nolock)
where
parentid = ' 0 '
order by
parentid,
isfolder,
descr,
row_id
Результаты как в предыдущем - все окай.
Третья итерация: выводим наименования, isfolder, код (видите ли хотят видеть код/артикул) и row_id элементов.
select top 20
descr as Наименование,
isfolder as Пиктограммка,
code as Код,
row_id as row_id
from sc12 (nolock)
where
parentid = ' 0 '
order by
parentid,
isfolder,
descr,
row_id
А тут уже начинается хужесть, но только самая-самая малость. А с добавление новых полей эта хужесть становится только хужее (наверняка нужно будет выводить ismark, чтобы пиктограммы были полноценными и некоторые поля таблицы: ед. изм. и прочее).