This was a tough nut to crack.
I got it working by
First css override the default which is overflow:hidden to
.ui-jqgrid .ui-jqgrid-sdiv{overflow:visible;}
.ui-jqgrid .ui-jqgrid-hdiv{overflow:visible;}
On the javascript JQuery came to my rescue I implemented the following
function screenBottom() {
return $(window).scrollTop() + $(window).height();
}
$(window).scroll(function () {
var dataTableTop = dataTable.offset().top;
var dataTableHeight = dataTableTop + dataTable.outerHeight();
var windowTop = $(window).scrollTop();
var windowBottom = screenBottom();
//Scroll down
if (windowTop > dataTableTop - headerTable.height()
&& windowTop < (dataTableHeight - headerTable.height())) {
headerTable.offset({ top: windowTop, left: headerTable.offset().left });
}
//For footer
if (windowBottom > dataTable.offset().top + footerTable.outerHeight()
&& windowBottom < dataTableHeight + footerTable.outerHeight()) {
footerTable.offset({ top: windowBottom - footerTable.outerHeight(), left: footerTable.offset().left });
}
//Re adjust of the movement is too fast
if (windowTop < (dataTableTop - headerTable.height())
&& dataTableTop < (headerTable.offset().top + headerTable.height())) {
headerTable.offset({ top: dataTable.offset().top - headerTable.height(), left: headerTable.offset().left });
}
if (windowBottom > dataTableHeight + footerTable.outerHeight()) {
footerTable.offset({ top: dataTableHeight, left: footerTable.offset().left });
}
});
And then to check the footer and header while resizing the window
$(window).resize(function () {
setInitializeHeadersAndFootersPosition();
});
function setInitializeHeadersAndFootersPosition() {
var dataTableTop = dataTable.offset().top;
var dataTableHeight = dataTableTop + dataTable.outerHeight();
var windowTop = $(window).scrollTop();
var windowBottom = screenBottom();
if (windowBottom > dataTableTop && windowBottom < dataTableHeight) {
footerTable.offset({ top: windowBottom - footerTable.outerHeight(), left: footerTable.offset().left });
}
if (footerTable.offset().top < dataTableHeight && windowBottom > dataTableHeight) {
footerTable.offset({ top: dataTableHeight, left: footerTable.offset().left });
}
if (windowTop > dataTableTop && windowTop < dataTableHeight) {
headerTable.offset({ top: windowTop, left: headerTable.offset().left }); //Header does not need the offset
}
}