<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>jQuery Grid Plugin - jqGrid - Topic: Virtual scroll with dynamic row height</title>
	<link>http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height</link>
	<description><![CDATA[Grid plugin]]></description>
	<generator>Simple:Press Version 5.7.5.3</generator>
	<atom:link href="http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height/rss" rel="self" type="application/rss+xml" />
        <item>
        	<title>Frank on Virtual scroll with dynamic row height</title>
        	<link>http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p25702</link>
        	<category>Discussion</category>
        	<guid isPermaLink="true">http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p25702</guid>
        	        	<description><![CDATA[<p>Thank you for your patch.</p>
<p>I applied it against jqGrid 4.3.1, and it seems to work well (tested with a remote data source).</p>
]]></description>
        	        	<pubDate>Tue, 17 Jan 2012 20:24:58 +0200</pubDate>
        </item>
        <item>
        	<title>ericisko on Virtual scroll with dynamic row height</title>
        	<link>http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24718</link>
        	<category>Discussion</category>
        	<guid isPermaLink="true">http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24718</guid>
        	        	<description><![CDATA[<p>Hi,</p>
</p>
<p>there was an issue when the record count was exact multiply of rowNum. The fixed code below:</p>
</p>
<p><input type='button' class='sfcodeselect' name='sfselectit5285' value='Select Code' data-codeid='sfcode5285' /></p>
<div class='sfcode' id='sfcode5285'>--- jquery.jqGrid.src.js.orig&#160;&#160; &#160;2011-07-20 11:00:22.000000000 -0400<br />+++ jquery.jqGrid.src.js&#160;&#160; &#160;2011-09-22 11:22:47.684100300 -0400<br />@@ -782,26 +782,39 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!dh) { return; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var table = $(&#34;table:first&#34;, grid.bDiv);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rows, rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(table[0].rows.length) {<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;try {<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rows = table[0].rows[1];<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = rows ? $(rows).outerHeight() &#124;&#124; grid.prevRowHeight : grid.prevRowHeight;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} catch (pv) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (table[0].rows.length) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (table[0].rows.length &#62; 1) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;try {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = table.height() / (table[0].rows.length - 1);<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} catch (pv) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = grid.prevRowHeight;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!rh) { return; }<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevRowHeight = rh;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevRowHeight = grid.currRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevTableHeight = table.height();<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rn = p.rowNum;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var scrollTop = grid.scrollTop = grid.bDiv.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var ttop = Math.round(table.position().top) - scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var tbot = ttop + table.height();<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var div = rh * rn;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var page, npage, empty;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160; if ( tbot &#60; dh &#38;&#38; ttop &#60;= 0 &#38;&#38;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;(p.lastpage===undefined&#124;&#124;parseInt((tbot + scrollTop + div - 1) / div,10) &#60;= p.lastpage))<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;{<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;npage = parseInt((dh - tbot + div - 1) / div,10);<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff &#60; 0 &#38;&#38; ttop &#62; 0 &#38;&#38; ttop &#60; dh) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = ttop;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff &#62; 0 &#38;&#38; tbot &#62; 0 &#38;&#38; tbot &#60; dh)<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = tbot;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = 0;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (tbot &#60; dh &#38;&#38; ttop &#60;= 0 &#38;&#38;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;(p.lastpage === undefined &#124;&#124; parseInt((tbot + scrollTop + div - 1) / div, 10) &#60;= p.lastpage) ) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;npage = parseInt((dh - tbot + div - 1) / div, 10);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (tbot &#62;= 0 &#124;&#124; npage &#60; 2 &#124;&#124; p.scroll === true) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;page = Math.round((tbot + scrollTop) / div) + 1;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ttop = -1;<br />@@ -823,18 +836,21 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} else {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;p.page = page;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (empty) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevTableHeight = 0;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.selectionPreserver(table[0]);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.emptyRows(grid.bDiv,false, false);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.populate(npage);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = 0;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;},<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;scrollGrid: function( e ) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(p.scroll) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var scrollTop = grid.bDiv.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(grid.scrollTop === undefined) { grid.scrollTop = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (scrollTop != grid.scrollTop) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = scrollTop - grid.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.timer) { clearTimeout(grid.timer); }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);<br />@@ -1537,19 +1553,46 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var cp, last, base, from,to,tot,fmt, pgboxes = &#34;&#34;, sppg,<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;tspg = ts.p.pager ? &#34;_&#34;+$.jgrid.jqID(ts.p.pager.substr(1)) : &#34;&#34;,<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;tspg_t = ts.p.toppager ? &#34;_&#34;+ts.p.toppager.substr(1) : &#34;&#34;;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (ts.p.page == 0) { ts.p.page = 1; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = parseInt(ts.p.page,10)-1;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(base &#60; 0) { base = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = base*parseInt(ts.p.rowNum,10);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;to = base + ts.p.reccount;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (ts.p.scroll) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!grid.scrollDiff) { grid.scrollDiff = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rows = $(&#34;tbody:first &#62; tr:gt(0)&#34;, ts.grid.bDiv);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = to - rows.length;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.p.reccount = rows.length;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rh = rows.outerHeight() &#124;&#124; ts.grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var th = $(&#34;table:first&#34;, ts.grid.bDiv).height();<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rh = th / rows.length;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.currRowHeight = rh;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (rh) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var top = base * rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var height = parseInt(ts.p.records,10) * rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160; $(&#34;&#62;div:first&#34;,ts.grid.bDiv).css({height : height}).children(&#34;div:first&#34;).css({height:top,display:top?&#34;&#34;:&#34;none&#34;});<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var lpCnt = ts.p.records % ts.p.rowNum;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var pgCnt = ts.p.lastpage - ts.p.page - 1;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (lpCnt == 0) { pgCnt++; }<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (pgCnt &#60; 0) { pgCnt = lpCnt = 0; }<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var height = top + th + (pgCnt * ts.p.rowNum + lpCnt) * rh;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if ((top != 0 &#124;&#124; (grid.scrollDiff != 0 &#38;&#38; ts.p.page == 2)) &#38;&#38; grid.prevRowHeight &#38;&#38; grid.currRowHeight != grid.prevRowHeight) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.prevTableHeight) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = top + grid.prevTableHeight - grid.scrollDiff;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = top - grid.scrollDiff;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var cnt = (Math.floor(rows.length / ts.p.rowNum) - 1) * ts.p.rowNum;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (rows.length % ts.p.rowNum != 0) { cnt += ts.p.rowNum; }<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;for (var i = 0; i &#60; cnt; i++) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop += $(rows[i]).outerHeight();<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = grid.scrollTop * grid.currRowHeight / grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;$(&#34;&#62;div:first&#34;, ts.grid.bDiv).css({ height: height }).children(&#34;div:first&#34;).css({ height: top, display: top ? &#34;&#34; : &#34;none&#34; });<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.grid.bDiv.scrollTop = grid.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.grid.bDiv.scrollLeft = ts.grid.hDiv.scrollLeft;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}</div>
<p>Erik</p>
]]></description>
        	        	<pubDate>Thu, 22 Sep 2011 18:27:21 +0300</pubDate>
        </item>
        <item>
        	<title>ericisko on Virtual scroll with dynamic row height</title>
        	<link>http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24717</link>
        	<category>Discussion</category>
        	<guid isPermaLink="true">http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24717</guid>
        	        	<description><![CDATA[<p>Hi,</p>
</p>
<p>I resolved the issue with scrollTop and it seems to be working correctly. Bellow is the diff against jqGrid 4.1.2:</p>
</p>
<p><input type='button' class='sfcodeselect' name='sfselectit8744' value='Select Code' data-codeid='sfcode8744' /></p>
<div class='sfcode' id='sfcode8744'>--- jquery.jqGrid.src.js.orig&#160;&#160; &#160;2011-07-20 11:00:22.000000000 -0400<br />+++ jquery.jqGrid.src.js&#160;&#160; &#160;2011-09-22 09:47:03.965509200 -0400<br />@@ -782,26 +782,39 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!dh) { return; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var table = $(&#34;table:first&#34;, grid.bDiv);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rows, rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(table[0].rows.length) {<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;try {<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rows = table[0].rows[1];<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = rows ? $(rows).outerHeight() &#124;&#124; grid.prevRowHeight : grid.prevRowHeight;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} catch (pv) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (table[0].rows.length) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (table[0].rows.length &#62; 1) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;try {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = table.height() / (table[0].rows.length - 1);<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} catch (pv) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;rh = grid.prevRowHeight;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!rh) { return; }<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevRowHeight = rh;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevRowHeight = grid.currRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevTableHeight = table.height();<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rn = p.rowNum;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var scrollTop = grid.scrollTop = grid.bDiv.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var ttop = Math.round(table.position().top) - scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var tbot = ttop + table.height();<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var div = rh * rn;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var page, npage, empty;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160; if ( tbot &#60; dh &#38;&#38; ttop &#60;= 0 &#38;&#38;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;(p.lastpage===undefined&#124;&#124;parseInt((tbot + scrollTop + div - 1) / div,10) &#60;= p.lastpage))<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;{<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;npage = parseInt((dh - tbot + div - 1) / div,10);<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff &#60; 0 &#38;&#38; ttop &#62; 0 &#38;&#38; ttop &#60; dh) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = ttop;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff &#62; 0 &#38;&#38; tbot &#62; 0 &#38;&#38; tbot &#60; dh)<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = tbot;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = 0;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (tbot &#60; dh &#38;&#38; ttop &#60;= 0 &#38;&#38;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;(p.lastpage === undefined &#124;&#124; parseInt((tbot + scrollTop + div - 1) / div, 10) &#60;= p.lastpage) ) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;npage = parseInt((dh - tbot + div - 1) / div, 10);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (tbot &#62;= 0 &#124;&#124; npage &#60; 2 &#124;&#124; p.scroll === true) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;page = Math.round((tbot + scrollTop) / div) + 1;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ttop = -1;<br />@@ -823,18 +836,21 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;} else {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;p.page = page;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (empty) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.prevTableHeight = 0;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.selectionPreserver(table[0]);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.emptyRows(grid.bDiv,false, false);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.populate(npage);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = 0;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;},<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;scrollGrid: function( e ) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(p.scroll) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var scrollTop = grid.bDiv.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(grid.scrollTop === undefined) { grid.scrollTop = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (scrollTop != grid.scrollTop) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollDiff = scrollTop - grid.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.timer) { clearTimeout(grid.timer); }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);<br />@@ -1537,19 +1553,45 @@<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var cp, last, base, from,to,tot,fmt, pgboxes = &#34;&#34;, sppg,<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;tspg = ts.p.pager ? &#34;_&#34;+$.jgrid.jqID(ts.p.pager.substr(1)) : &#34;&#34;,<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;tspg_t = ts.p.toppager ? &#34;_&#34;+ts.p.toppager.substr(1) : &#34;&#34;;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (ts.p.page == 0) { ts.p.page = 1; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = parseInt(ts.p.page,10)-1;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if(base &#60; 0) { base = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = base*parseInt(ts.p.rowNum,10);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;to = base + ts.p.reccount;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (ts.p.scroll) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (!grid.scrollDiff) { grid.scrollDiff = 0; }<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rows = $(&#34;tbody:first &#62; tr:gt(0)&#34;, ts.grid.bDiv);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;base = to - rows.length;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.p.reccount = rows.length;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rh = rows.outerHeight() &#124;&#124; ts.grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var th = $(&#34;table:first&#34;, ts.grid.bDiv).height();<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var rh = th / rows.length;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.currRowHeight = rh;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (rh) {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var top = base * rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var height = parseInt(ts.p.records,10) * rh;<br />-&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160; $(&#34;&#62;div:first&#34;,ts.grid.bDiv).css({height : height}).children(&#34;div:first&#34;).css({height:top,display:top?&#34;&#34;:&#34;none&#34;});<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var lpCnt = ts.p.records % ts.p.rowNum;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var pgCnt = ts.p.lastpage - ts.p.page - 1;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (pgCnt &#60; 0) { pgCnt = lpCnt = 0; }<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var height = top + th + (pgCnt * ts.p.rowNum + lpCnt) * rh;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if ((top != 0 &#124;&#124; (grid.scrollDiff != 0 &#38;&#38; ts.p.page == 2)) &#38;&#38; grid.prevRowHeight &#38;&#38; grid.currRowHeight != grid.prevRowHeight) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.prevTableHeight) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = top + grid.prevTableHeight - grid.scrollDiff;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (grid.scrollDiff) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = top - grid.scrollDiff;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;var cnt = (Math.floor(rows.length / ts.p.rowNum) - 1) * ts.p.rowNum;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;if (rows.length % ts.p.rowNum != 0) { cnt += ts.p.rowNum; }<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;for (var i = 0; i &#60; cnt; i++) {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop += $(rows[i]).outerHeight();<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;else {<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;grid.scrollTop = ts.grid.bDiv.scrollTop * grid.currRowHeight / grid.prevRowHeight;<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;$(&#34;&#62;div:first&#34;, ts.grid.bDiv).css({ height: height }).children(&#34;div:first&#34;).css({ height: top, display: top ? &#34;&#34; : &#34;none&#34; });<br />+&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.grid.bDiv.scrollTop = grid.scrollTop;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;ts.grid.bDiv.scrollLeft = ts.grid.hDiv.scrollLeft;<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;}</div>
<p>Erik</p></p>
]]></description>
        	        	<pubDate>Thu, 22 Sep 2011 16:57:18 +0300</pubDate>
        </item>
        <item>
        	<title>ericisko on Virtual scroll with dynamic row height</title>
        	<link>http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24665</link>
        	<category>Discussion</category>
        	<guid isPermaLink="true">http://www.trirand.com/blog/?page_id=393/discussion/virtual-scroll-with-dynamic-row-height#p24665</guid>
        	        	<description><![CDATA[<p>Hi,</p>
</p>
<p>I am working on virtual scrolling with dynamic (changing) row height. I think I have it mostly working. This is how it works:</p>
<p>- calculate average row height from the currently displayed data: divide data table height with number of rows in the table</p>
<p>- use this row height in updatepager() to calculate total div height as well as &#39;top&#39; div height</p>
<p>- use the same row height for calculating next page to load in pageVisible()</p>
<p>- every time new/updated data is loaded, average row height along with total height and &#39;top&#39; div height is recalculated. This new row height is used for paging in pageVisible()</p>
<p>- scrollTop is adjusted in updatepager() to account for average row height change as data currently loaded/displayed is changed so the current row appears at the same location as before (this is not working 100% yet)</p>
</p>
<p>I tested it with local data only (loadonce is true).</p>
<p>Any comments on this approach? Where can I submit the code?</p>
</p>
<p>Thanks,</p>
<p>Erik</p></p>
]]></description>
        	        	<pubDate>Sat, 17 Sep 2011 17:44:28 +0300</pubDate>
        </item>
</channel>
</rss>