Page, TotalPages и даже RecordCount - относительное понятие для БД.
Страница, на которой находится строка, зависит от порядка сортировки, времени (кто-то может вставить данные, таким образом, помещая все записи на одну или несколько строк) и модификации (так что soemone может обновить поле вашего ключа сортировки).
Так что я бы не сказал, что значения «PageNumber» и «TotalPages» связаны с данными, они связаны с запросом.
Разбиение по страницам данных вверх и вниз является тривиальным и детерминированным только в том случае, если ваш запрос может сделать своего рода снимок на основе вашего ключа.
Там, где этот моментальный снимок невозможен, так как он слишком дорог для вычисления или слишком велик, чтобы поместиться в память, значение «PageNumber», связанного с элементом, начинается с размытия.
Я полагаю, что именно по этой причине службы отчетов используют свой подход, по-видимому, построчно, пока страница не заполнится, а затем обновите заголовки.