diff --git a/packages/common/src/core/slickGrid.ts b/packages/common/src/core/slickGrid.ts index 46c31047d..01e837cb0 100755 --- a/packages/common/src/core/slickGrid.ts +++ b/packages/common/src/core/slickGrid.ts @@ -5666,12 +5666,18 @@ export class SlickGrid = Column, O e if (this.rowsCache && typeof this.rowsCache === 'object') { Object.keys(this.rowsCache).forEach((row) => { const rowNumber = row ? parseInt(row, 10) : 0; - const rowNode = this.rowsCache[rowNumber].rowNode![0]; - if (this._options.rowTopOffsetRenderType === 'transform') { - rowNode.style.transform = `translateY(${this.getRowTop(rowNumber)}px)`; - } else { - rowNode.style.top = `${this.getRowTop(rowNumber)}px`; // default to `top: {offset}px` - } + // same formula appendRowHtml uses to place rows initially + const top = this.getRowTop(rowNumber) - this.getFrozenRowOffset(rowNumber); + // reposition EVERY fragment of the row: with frozen columns a row has one + // fragment per column pane, and repositioning only rowNode[0] left the + // right-pane fragment at its stale top after a paging-offset jump + this.rowsCache[rowNumber].rowNode!.forEach((rowNode) => { + if (this._options.rowTopOffsetRenderType === 'transform') { + rowNode.style.transform = `translateY(${top}px)`; + } else { + rowNode.style.top = `${top}px`; // default to `top: {offset}px` + } + }); }); } }