Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@JLynch7
Created September 19, 2011 23:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JLynch7/1227887 to your computer and use it in GitHub Desktop.
Save JLynch7/1227887 to your computer and use it in GitHub Desktop.
Patch for 1.4.3 to add frozen column support.
From 8b675f4bfc1fc90f854a167fb31aa59d8b2b9bb8 Mon Sep 17 00:00:00 2001
From: User <user@email.com>
Date: Fri, 16 Sep 2011 21:13:07 -0400
Subject: [PATCH] Add frozen column support
---
examples/example4-model.html | 11 +-
slick.grid.js | 358 +++++++++++++++++++++++++++++++++++++----
2 files changed, 331 insertions(+), 38 deletions(-)
diff --git a/examples/example4-model.html b/examples/example4-model.html
index d800c70..ec0fc08 100644
--- a/examples/example4-model.html
+++ b/examples/example4-model.html
@@ -107,7 +107,11 @@
{id:"%", name:"% Complete", field:"percentComplete", width:80, resizable:false, formatter:GraphicalPercentCompleteCellFormatter, editor:PercentCompleteCellEditor, sortable:true},
{id:"start", name:"Start", field:"start", minWidth:60, editor:DateCellEditor, sortable:true},
{id:"finish", name:"Finish", field:"finish", minWidth:60, editor:DateCellEditor, sortable:true},
- {id:"effort-driven", name:"Effort Driven", width:80, minWidth:20, maxWidth:80, cssClass:"cell-effort-driven", field:"effortDriven", formatter:BoolCellFormatter, editor:YesNoCheckboxCellEditor, cannotTriggerInsert:true, sortable:true}
+ {id:"effort-driven", name:"Effort Driven", width:80, minWidth:20, maxWidth:80, cssClass:"cell-effort-driven", field:"effortDriven", formatter:BoolCellFormatter, editor:YesNoCheckboxCellEditor, cannotTriggerInsert:true, sortable:true},
+ {id:"title1", name:"Title1", field:"title1", width:120, minWidth:120, cssClass:"cell-title", editor:TextCellEditor, validator:requiredFieldValidator, sortable:true},
+ {id:"title2", name:"Title2", field:"title2", width:120, minWidth:120, cssClass:"cell-title", editor:TextCellEditor, validator:requiredFieldValidator, sortable:true},
+ {id:"title3", name:"Title3", field:"title3", width:120, minWidth:120, cssClass:"cell-title", editor:TextCellEditor, validator:requiredFieldValidator, sortable:true},
+ {id:"title4", name:"Title4", field:"title4", width:120, minWidth:120, cssClass:"cell-title", editor:TextCellEditor, validator:requiredFieldValidator, sortable:true}
];
var options = {
@@ -116,7 +120,8 @@
enableCellNavigation: true,
asyncEditorLoading: true,
forceFitColumns: false,
- secondaryHeaderRowHeight: 25
+ secondaryHeaderRowHeight: 25,
+ frozenColumn: 4
};
var sortcol = "title";
@@ -203,7 +208,7 @@
.show();
grid.onCellChange = function(row,col,item) {
- dataView.updateItem(item.id,item);
+ dataView.updateItem(item.id,item);
};
grid.onAddNewRow = addItem;
diff --git a/slick.grid.js b/slick.grid.js
index 13b8a7a..74d98cb 100644
--- a/slick.grid.js
+++ b/slick.grid.js
@@ -8,7 +8,6 @@
* SlickGrid v1.4.3
*
* TODO:
- * - frozen columns
* - consistent events (EventHelper? jQuery events?)
*
*
@@ -41,6 +40,7 @@
* editorFactory - (default null) A factory object responsible to creating an editor for a given cell.
* Must implement getEditor(column).
* multiSelect - (default true) Enable multiple row selection.
+ * frozenColumn - (default -1) If greater than Cero, then columns whose index are less than or equal to this number will be frozen
*
* COLUMN DEFINITION (columns) OPTIONS:
* id - Column ID.
@@ -243,7 +243,9 @@ if (!jQuery.fn.drag) {
editorFactory: null,
cellHighlightCssClass: "highlighted",
cellFlashingCssClass: "flashing",
- multiSelect: true
+ multiSelect: true,
+ frozenColumn: -1
+
},
gridData, gridDataGetLength, gridDataGetItem;
@@ -317,6 +319,10 @@ if (!jQuery.fn.drag) {
var counter_rows_rendered = 0;
var counter_rows_removed = 0;
+ // appended for split funtionality
+ var canvas0, canvas1, headers0, headers1, viewp0,
+ uis = "dbhp" + Math.round(1000000 * Math.random());
+
//////////////////////////////////////////////////////////////////////////////////////////////
// Initialization
@@ -335,8 +341,16 @@ if (!jQuery.fn.drag) {
maxSupportedCssHeight = getMaxSupportedCssHeight();
+ // @author DB 5/Jan/2011
+ // for frozen column
+ var $headerScroller1, $headers1, $secondaryHeaderScroller1, $secondaryHeaders1,
+ $viewport1, $canvas1, $scrollerContainer, totalFrozenWidth = 0;
scrollbarDimensions = scrollbarDimensions || measureScrollbar(); // skip measurement if already have dimensions
options = $.extend({},defaults,options);
+ // validate frozenColumn
+ // @author(modify)DB
+ options.frozenColumn = ( options.frozenColumn >= 0
+ && options.frozenColumn < columns.length ) ? parseInt(options.frozenColumn) : -1;
columnDefaults.width = options.defaultColumnWidth;
// validate loaded JavaScript modules against requested options
@@ -362,18 +376,78 @@ if (!jQuery.fn.drag) {
if (!/relative|absolute|fixed/.test($container.css("position")))
$container.css("position","relative");
- $headerScroller = $("<div class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
- $headers = $("<div class='slick-header-columns' style='width:100000px; left:-10000px' />").appendTo($headerScroller);
-
- $secondaryHeaderScroller = $("<div class='slick-header-secondary ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
- $secondaryHeaders = $("<div class='slick-header-columns-secondary' style='width:100000px' />").appendTo($secondaryHeaderScroller);
+ //$headerScroller = $("<div class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
+ //$headers = $("<div class='slick-header-columns' style='width:100000px; left:-10000px' />").appendTo($headerScroller);
+
+ // modified (attribute 'id' appended)
+ // @author(modify)DB
+ $headerScroller = $("<div id='hs" + uis + "' class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
+ $headers = $("<div id='h" + uis + "' class='slick-header-columns' style='width:100000px; left:-10000px' />").appendTo($headerScroller);
+
+ // modified (attribute 'id' appended)
+ // @author(modify)DB
+ $secondaryHeaderScroller = $("<div id='shs" + uis + "' class='slick-header-secondary ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
+ $secondaryHeaders = $("<div id='sh" + uis + "' class='slick-header-columns-secondary' style='width:100000px' />").appendTo($secondaryHeaderScroller);
+
+ // split in two
+ // @author(modify)DB
+ if (options.frozenColumn > -1){
+ $scrollerContainer = $("<div id='splittedC" + uis + "' style='overflow:hidden;position:absolute;top:0px;' />");
+ $headerScroller1 = $("<div id='hs1" + uis + "' class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($scrollerContainer);
+ $headers1 = $("<div id='h1" + uis + "' class='slick-header-columns' style='width:100000px; left:-10000px' />").appendTo($headerScroller1);
+ $headers = $().add($headers).add($headers1);
+ // TODO REFACTORING
+ // @author DB
+ $secondaryHeaderScroller1 = $("<div id='shs1" + uis + "' class='slick-header-secondary ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($scrollerContainer);
+ $secondaryHeaders1 = $("<div id='sh1" + uis + "' class='slick-header-columns-secondary' style='width:100000px' />").appendTo($secondaryHeaderScroller1);
+ $secondaryHeaderScroller = $().add($secondaryHeaderScroller).add($secondaryHeaderScroller1);
+ $headerScroller = $().add($headerScroller).add($headerScroller1);
+ $secondaryHeaders = $().add($secondaryHeaders).add($secondaryHeaders1);
+ }
+
+ //$secondaryHeaderScroller = $("<div class='slick-header-secondary ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($container);
+ //$secondaryHeaders = $("<div class='slick-header-columns-secondary' style='width:100000px' />").appendTo($secondaryHeaderScroller);
if (!options.showSecondaryHeaderRow) {
$secondaryHeaderScroller.hide();
}
- $viewport = $("<div class='slick-viewport' tabIndex='0' hideFocus style='width:100%;overflow-x:auto;outline:0;position:relative;overflow-y:auto;'>").appendTo($container);
- $canvas = $("<div class='grid-canvas' tabIndex='0' hideFocus />").appendTo($viewport);
+ //$viewport = $("<div class='slick-viewport' tabIndex='0' hideFocus style='width:100%;overflow-x:auto;outline:0;position:relative;overflow-y:auto;'>").appendTo($container);
+ //$canvas = $("<div class='grid-canvas' tabIndex='0' hideFocus />").appendTo($viewport);
+
+ // original code for msStyle was modified
+ // @author DB 27/Jan/2011
+ var msStyle = "";
+
+ if (options.frozenColumn > -1){
+ msStyle = "width:100%;outline:0;position:relative;overflow-x: scroll; overflow-y: hidden;"
+ }else {
+ // with autoHeight, we can set the mainscroller's y-overflow to auto, since the scroll bar will not appear
+ msStyle = "width:100%;overflow-x:auto;outline:0;position:relative;overflow-y:auto;"
+ }
+ // modified (attribute 'id' appended)
+ // @author(modify)DB
+ $viewport = $("<div id='v" + uis + "' class='slick-viewport' tabIndex='0' hideFocus style='" + msStyle + "'>").appendTo($container);
+ $canvas = $("<div id='c" + uis + "' class='grid-canvas' tabIndex='0' hideFocus style='overflow:hidden' />").appendTo($viewport);
+
+ // split in two
+ // @author(modify)DB
+ if (options.frozenColumn > -1){
+ var msStyle1 = "width:100%;overflow-x:scroll;overflow-y:auto;outline:0;position:relative;overflow-y:auto;";
+ $viewport1 = $("<div id='v1" + uis + "' class='slick-viewport' tabIndex='0' hideFocus style='" + msStyle1 + "'>").appendTo($scrollerContainer);
+ $canvas1 = $("<div id='c1" + uis + "' class='grid-canvas' tabIndex='0' hideFocus style='overflow:hidden' />").appendTo($viewport1);
+ $viewport = $().add($viewport).add($viewport1);
+ $canvas = $().add($canvas).add($canvas1);
+ $scrollerContainer.appendTo($container);
+ // canvas
+ canvas0 = $("#c" + uis, $container)[0];
+ canvas1 = $("#c1" + uis, $container)[0];
+ // headers
+ headers0 = $("#h" + uis, $container)[0];
+ headers1 = $("#h1" + uis, $container)[0];
+ // viewport
+ viewp0 = $("#v" + uis, $container)[0];
+ }
// header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)
// calculate the diff so we can set consistent sizes
@@ -397,6 +471,22 @@ if (!jQuery.fn.drag) {
setupDragEvents();
createCssRules();
+ // appended
+ // @author DB
+ if (options.frozenColumn > -1){
+ // set width
+ // problems with cache when recovering item by index
+ // e.g headers0 = $headers.get(0)
+ totalFrozenWidth = getWidthSplittedCanvas().widthFixed;
+ $("#hs" + uis , $container).width(totalFrozenWidth);
+ $("#shs" + uis, $container).width(totalFrozenWidth);
+ $("#v" + uis, $container).width(totalFrozenWidth);
+ var rightW = $container.width() - totalFrozenWidth;
+ $scrollerContainer.css("left", totalFrozenWidth);
+ //.width(rightW);
+ //$("#v1" + uis, $container).width(rightW);
+ }
+
resizeAndRender();
bindAncestorScrollEvents();
@@ -493,6 +583,9 @@ if (!jQuery.fn.drag) {
function createColumnHeaders() {
var i;
+ // @author Diego Boris(modified for frozen Column) (6/Jan/2011)
+ var $headerTarget;
+
function hoverBegin() {
$(this).addClass("ui-state-hover");
}
@@ -501,18 +594,37 @@ if (!jQuery.fn.drag) {
}
$headers.empty();
+
columnsById = {};
for (i = 0; i < columns.length; i++) {
var m = columns[i] = $.extend({},columnDefaults,columns[i]);
columnsById[m.id] = i;
+ // @author Diego Boris(modify for frozen Column) (7/Jan/2011)
+ $headerTarget = (options.frozenColumn > -1 ) ?
+ ((i <= options.frozenColumn) ? $(headers0): $(headers1)) : $headers;
+ if (options.frozenColumn > -1){
+ if (i <= options.frozenColumn){
+ $headerTarget = $(headers0);
+ // TODO..
+ // make it resizable
+ // @author DB
+ m.resizable = false;
+ }else{
+ $headerTarget = $(headers1);
+ }
+ }else{
+ $headerTarget = $headers;
+ }
+
var header = $("<div class='ui-state-default slick-header-column' id='" + uid + m.id + "' />")
.html("<span class='slick-column-name'>" + m.name + "</span>")
.width((m.currentWidth || m.width) - headerColumnWidthDiff)
.attr("title", m.toolTip || m.name || "")
.data("fieldId", m.id)
- .appendTo($headers);
+ //.appendTo($headers);
+ .appendTo($headerTarget);
if (options.enableColumnReorder || m.sortable) {
header.hover(hoverBegin, hoverEnd);
@@ -578,7 +690,13 @@ if (!jQuery.fn.drag) {
return;
}
- var reorderedIds = $headers.sortable("toArray");
+ if ( options.frozenColumn > -1 ) {
+ var reorderedIds = $(headers0).sortable("toArray");
+ reorderedIds = reorderedIds.concat( $(headers1).sortable("toArray") );
+ } else {
+ var reorderedIds = $headers.sortable("toArray");
+ }
+
var reorderedColumns = [];
for (var i=0; i<reorderedIds.length; i++) {
reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid,""))]);
@@ -950,10 +1068,20 @@ if (!jQuery.fn.drag) {
if (self.onBeforeDestroy)
self.onBeforeDestroy();
- if (options.enableColumnReorder && $headers.sortable)
+ if (options.enableColumnReorder && $headers.sortable)
$headers.sortable("destroy");
unbindAncestorScrollEvents();
+
+ // changed
+ // @author DB
+ // if ($headers.sortable){$headers.sortable("destroy");}
+ $headers.each(function(){
+ if ($(this).sortable){
+ $(this).sortable("destroy");
+ }
+ });
+
$container.unbind(".slickgrid");
removeCssRules();
@@ -1239,7 +1367,14 @@ if (!jQuery.fn.drag) {
if (currentEditor) {
makeSelectedCellNormal();
}
- $canvas[0].innerHTML = "";
+
+ // modified
+ // @author DB
+ // $canvas[0].innerHTML = "";
+ $canvas.each(function(){
+ this.innerHTML = "";
+ });
+
rowsCache= {};
postProcessedRows = {};
counter_rows_removed += renderedRows;
@@ -1249,7 +1384,13 @@ if (!jQuery.fn.drag) {
function removeRowFromCache(row) {
var node = rowsCache[row];
if (!node) { return; }
- $canvas[0].removeChild(node);
+ //$canvas[0].removeChild(node);
+
+ // comment added and changed original code
+ // remove from DOM
+ // @auhor DB
+ // node.parentNode.removeChild(node);
+ $canvas.find(".slick-row[row=" + row + "]").detach();
delete rowsCache[row];
delete postProcessedRows[row];
@@ -1332,6 +1473,11 @@ if (!jQuery.fn.drag) {
(options.showSecondaryHeaderRow ? $secondaryHeaderScroller.outerHeight() : 0));
}
+ // FIXME.. although
+ // when read, resizeCanvas() method is always invoked
+ // so it appears it gives no problem
+ // @author DB
+
viewportW = $viewport.innerWidth();
viewportH = $viewport.innerHeight();
numVisibleRows = Math.ceil(viewportH / options.rowHeight);
@@ -1340,8 +1486,18 @@ if (!jQuery.fn.drag) {
$headers.find(".slick-header-column").each(function() {
totalWidth += $(this).outerWidth();
});
+
setCanvasWidth(totalWidth);
+ // modified to support split functionality
+ // @author DB
+ if(options.frozenColumn > -1 ){
+ var o = getWidthSplittedCanvas();
+ $(canvas0).width(o.widthFixed);
+ $(canvas1).width(o.widthScrolled);
+ $("#splittedC" + uis, $container).width($container.width() - o.widthFixed);
+ }
+
updateRowCount();
render();
}
@@ -1444,27 +1600,72 @@ if (!jQuery.fn.drag) {
parentNode = $canvas[0],
rowsBefore = renderedRows,
stringArray = [],
+ // appended
+ // @author DB
+ stringArrayRight = [],
rows = [],
startTimestamp = new Date(),
needToReselectCell = false;
- for (i = range.top; i <= range.bottom; i++) {
- if (rowsCache[i]) { continue; }
- renderedRows++;
- rows.push(i);
- appendRowHtml(stringArray,i);
- if (currentCellNode && currentRow === i)
- needToReselectCell = true;
- counter_rows_rendered++;
- }
+ //for (i = range.top; i <= range.bottom; i++) {
+ // if (rowsCache[i]) { continue; }
+ // renderedRows++;
+ // rows.push(i);
+ // appendRowHtml(stringArray,i);
+ // if (currentCellNode && currentRow === i)
+ // needToReselectCell = true;
+ // counter_rows_rendered++;
+ //}
+
+ if ( options.frozenColumn > -1 ) {
+ for (i = range.top; i <= range.bottom; i++) {
+ if (rowsCache[i]) {
+ continue;
+ }
+ renderedRows++;
+ rows.push(i);
+ appendSplitedHtmlRow(stringArray, stringArrayRight, i);
+ if (currentCellNode && currentRow === i)
+ needToReselectCell = true;
+ counter_rows_rendered++;
+ }
+
+ var x = document.createElement("div"),
+ xRight = document.createElement("div");
- var x = document.createElement("div");
- x.innerHTML = stringArray.join("");
+ x.innerHTML = stringArray.join("");
+ xRight.innerHTML = stringArrayRight.join("");
- for (i = 0, l = x.childNodes.length; i < l; i++) {
- rowsCache[rows[i]] = parentNode.appendChild(x.firstChild);
+ for (i = 0, l = x.childNodes.length; i < l; i++) {
+ rowsCache[rows[i]] = $().add($(x.firstChild).appendTo(canvas0))
+ .add($(xRight.firstChild).appendTo(canvas1));
+ }
+ } else {
+ for (i = range.top; i <= range.bottom; i++) {
+ if (rowsCache[i]) { continue; }
+ renderedRows++;
+ rows.push(i);
+ appendRowHtml(stringArray,i);
+ if (currentCellNode && currentRow === i)
+ needToReselectCell = true;
+ counter_rows_rendered++;
+ }
+
+ x = document.createElement("div");
+ x.innerHTML = stringArray.join("");
+
+ for (i = 0, l = x.childNodes.length; i < l; i++) {
+ rowsCache[rows[i]] = parentNode.appendChild(x.firstChild);
+ }
}
+ //var x = document.createElement("div");
+ //x.innerHTML = stringArray.join("");
+
+ //for (i = 0, l = x.childNodes.length; i < l; i++) {
+ // rowsCache[rows[i]] = parentNode.appendChild(x.firstChild);
+ //}
+
if (needToReselectCell) {
currentCellNode = $(rowsCache[currentRow]).children().eq(currentCell)[0];
setSelectedCell(currentCellNode,false);
@@ -1475,6 +1676,78 @@ if (!jQuery.fn.drag) {
}
}
+ /**
+ * Split htmlRow into the appropiate canvas according
+ * to options.frozenColumn value 26/Jan/2011
+ * @author DB
+ */
+ function appendSplitedHtmlRow(stringArray, stringArrayRight, row) {
+
+ var d = gridDataGetItem(row);
+ var dataLoading = row < gridDataGetLength() && !d;
+ var css = "slick-row " +
+ (dataLoading ? " loading" : "") +
+ (selectedRowsLookup[row] ? " selected ui-state-active" : "") +
+ (row % 2 == 1 ? ' odd' : ' even');
+
+ // if the user has specified a function to provide additional per-row css classes, call it here
+ if (options.rowCssClasses) {
+ css += ' ' + options.rowCssClasses(d);
+ }
+
+ stringArray.push("<div class='ui-widget-content " + css + "' row='" + row + "' style='top:" + (options.rowHeight*row) + "px'>");
+ stringArrayRight.push("<div class='ui-widget-content " + css + "' row='" + row + "' style='top:" + (options.rowHeight*row) + "px'>");
+
+ // left row
+ for (var i=0, cols=options.frozenColumn + 1; i<cols; i++) {
+ var m = columns[i];
+ if (m.hidden) continue;
+
+ stringArray.push("<div " + (m.unselectable ? "tabIndex=-1 " : "hideFocus tabIndex=0 ") + "class='slick-cell c" + i + (m.cssClass ? " " + m.cssClass : "") + "' cell=" + i + ">");
+
+ // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)
+ if (d && row < gridDataGetLength()) {
+ stringArray.push(getFormatter(m)(row, i, d[m.field], m, d));
+ }
+
+ stringArray.push("</div>");
+ }
+ stringArray.push("</div>");
+
+ // right row
+ for (i=options.frozenColumn + 1, cols=columns.length; i<cols; i++) {
+ m = columns[i];
+ if (m.hidden) continue;
+
+ stringArrayRight.push("<div " + (m.unselectable ? "tabIndex=-1 " : "hideFocus tabIndex=0 ") + "class='slick-cell c" + i + (m.cssClass ? " " + m.cssClass : "") + "' cell=" + i + ">");
+
+ // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)
+ if (d && row < gridDataGetLength()) {
+ stringArrayRight.push(getFormatter(m)(row, i, d[m.field], m, d));
+ }
+
+ stringArrayRight.push("</div>");
+ }
+ stringArrayRight.push("</div>");
+
+ }
+
+ // Return an object containing the two newly created canvas' width
+ // @author DB 28/Jan/2011
+ function getWidthSplittedCanvas(){
+ var widthFixed = 0, widthScrolled = 0;
+
+ $(headers0).find('.slick-header-column:visible').each(function () {
+ widthFixed += $(this).outerWidth();
+ });
+
+ $(headers1).find('.slick-header-column:visible').each(function () {
+ widthScrolled += $(this).outerWidth();
+ });
+
+ return {widthFixed : widthFixed, widthScrolled : widthScrolled};
+ }
+
function startPostProcessing() {
if (!options.enableAsyncPostRender) { return; }
clearTimeout(h_postrender);
@@ -1513,15 +1786,16 @@ if (!jQuery.fn.drag) {
}
function handleScroll() {
- scrollTop = $viewport[0].scrollTop;
- var scrollLeft = $viewport[0].scrollLeft;
+ var sufix = ((options.frozenColumn > -1 ) ? "1" : "") + uis;
+ var vwp = $("#v" + sufix, $container)[0];
+ // changed
+ scrollTop = vwp.scrollTop;
+ var scrollLeft = vwp.scrollLeft;
+
var scrollDist = Math.abs(scrollTop - prevScrollTop);
- if (scrollLeft !== prevScrollLeft) {
- prevScrollLeft = scrollLeft;
- $headerScroller[0].scrollLeft = scrollLeft;
- $secondaryHeaderScroller[0].scrollLeft = scrollLeft;
- }
+ $("#hs" + sufix, $container)[0].scrollLeft = scrollLeft;
+ $("#shs" + sufix, $container)[0].scrollLeft = scrollLeft;
if (!scrollDist) return;
@@ -1540,6 +1814,11 @@ if (!jQuery.fn.drag) {
removeAllRows();
}
+ // appended
+ if (options.frozenColumn > -1 ){
+ viewp0.scrollTop = scrollTop;
+ }
+
if (h_render)
clearTimeout(h_render);
@@ -1559,7 +1838,11 @@ if (!jQuery.fn.drag) {
var rowNode = rowsCache[row];
if (!rowNode || postProcessedRows[row] || row>=gridDataGetLength()) { continue; }
- var d = gridDataGetItem(row), cellNodes = rowNode.childNodes;
+ // modified
+ // @author DB
+ //var d = gridDataGetItem(row), cellNodes = rowNode.childNodes;
+ var d = gridDataGetItem(row), cellNodes = $(rowNode).children();
+
for (var i=0, j=0, l=columns.length; i<l; ++i) {
var m = columns[i];
if (m.asyncPostRender) { m.asyncPostRender(cellNodes[j], postProcessFromRow, d, m); }
@@ -2190,6 +2473,11 @@ if (!jQuery.fn.drag) {
var rowAtTop = row * options.rowHeight;
var rowAtBottom = (row + 1) * options.rowHeight - viewportH + (viewportHasHScroll?scrollbarDimensions.height:0);
+ var sufix = ((options.frozenColumn > -1 ) ? "1" : "") + uis;
+ var vwp = $("#v" + sufix, $container)[0];
+ // changed
+ scrollTop = vwp.scrollTop;
+
// need to page down?
if ((row + 1) * options.rowHeight > scrollTop + viewportH + offset) {
scrollTo(doPaging ? rowAtTop : rowAtBottom);
--
1.7.6.msysgit.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment