anchor.diff:        ..autoScrollOnDataChange = true
         ..columns = _createGridColumns()
         ..useEvenOdd = false
  +      ..rowLockIndex = 2
  +      ..columnLockIndex = 2
         ..onListScrollPositionChanged.listen(_updateRowIndices)
         ..onHeightChanged.listen(_updateRowIndices)
  -      ..onRendererAdded.listen(_handleNewRowRenderer);
  +      ..onRendererAdded.listen(_handleNewRowRenderer)
  +      ..onRowLockIndexChanged.listen((FrameworkEvent<int> event) => columnList.lockIndex = event.relatedObject);
       
       gridGroup.addComponent(columnListGroup);
       gridGroup.addComponent(spreadsheet);
  
positive.code:       ..autoManageScrollBars = false
        ..horizontalScrollPolicy = ScrollPolicy.NONE
        ..verticalScrollPolicy = ScrollPolicy.NONE
        ..itemRendererFactory = new ItemRendererFactory<RowItemRenderer<Row<Cell>>>(
            constructorMethod: RowItemRenderer.construct, 
            className: 'row-item-renderer'
  
negative.code:     if (spreadsheet.scrollPosition > (spreadsheet.rowHeight * spreadsheet.dataProvider.length - spreadsheet.height) * .95) 
        spreadsheet.dataProvider.addAll(_createNewDataProvider(spreadsheet.dataProvider.length));
      
      final List<Row<Cell>> columnListDataProvider = new List<Row<Cell>>.generate(columnList.lockIndex, (int i) => spreadsheet.dataProvider[i]);
      
      columnListDataProvider.addAll(spreadsheet.dataProvider.sublist(startIndex + ((columnList.lockIndex >= 0) ? columnList.lockIndex : 0)));
      
      columnList.dataProvider = new ObservableList<Row<Cell>>.from(columnListDataProvider);
    }
    
    void _handleNewRowRenderer(FrameworkEvent<DataGridItemRenderer> event) {
  