Try this...
function afterCreate(sender) {
var grid = sender;
sender.getView().on('scrollend', function(view, scrollX, scrollY) {
var vTop = grid.view.el.getTop(),
vBottom = grid.view.el.getBottom(),
top, bottom, hHeight = grid.headerCt.getHeight();
Ext.each(grid.view.getNodes(), function(node) {
if (!top && Ext.fly(node).getTop() > vTop) {
top = grid.view.getRecord(node).data._r;
}
if (Ext.fly(node).getBottom() - Ext.fly(node).getHeight() < vBottom) {
bottom = grid.view.getRecord(node).data._r;
}
});
if (top != 1) {
top += 1;
}
bottom += 1;
if (top == 1) {
grid.getSelectionModel().select(0)
} else if (bottom == grid.getStore().count()) {
grid.getSelectionModel().select(grid.getStore().count())
} else {
grid.getSelectionModel().select(Math.round((bottom + top) / 2))
}
grid.ensureVisible(grid.getSelection()[0]);
});
}