This should be fixed in IE7 :-)
Seriously, the technique referred by Jack works, but it requires some adjustment. The original method is intended for static layout so everything is fine
until you scroll the div containing the select box. Then again it will appear above everything including the iframe (WTF!!!).
So the solution is to repaint iframe in onscroll event handler :-(
Here is the patch for v. 1.0 which adds iframe below column headers
<style>
.active-select-fix {
position: absolute;
width: 100%;
height: 20px;
border: none;
z-index: 1;
filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);
}
</style>
<script>
Active.Controls.Grid.patch = function(){
var obj = this.prototype;
var iframe = new Active.System.HTML();
iframe.setTag("iframe");
iframe.setAttribute("src", "javascript:'';");
iframe.setAttribute("frameborder", "0")
iframe.setAttribute("scrolling", "no")
iframe.setClass("select", "fix");
if (!obj.$browser) {
var scroll = obj.getTemplate("layout").getContent("scrollbars").getEvent("onscroll");
obj.getTemplate("layout").getContent("scrollbars").setEvent("onscroll", function(){
scroll.call(this);
this.$owner.getContent("iframe").refreshClasses();
});
obj.setContent("iframe", iframe);
}
};
Active.Controls.Grid.patch();
</script>
And here is the complete example -
<html>
<head>
<title>ActiveWidgets Grid :: Examples</title>
<link href="../../runtime/styles/classic/grid.css" rel="stylesheet" type="text/css" ></link>
<script src="../../runtime/lib/grid.js"></script>
<style>
.active-controls-grid {height: 100%; font: menu; border: 1px solid #ccc;}
.active-select-fix {
position: absolute;
width: 100%;
height: 20px;
border: none;
z-index: 1;
filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);
}
</style>
<script>
var myData = [
["MSFT","<select><option>1</option></select>", "314,571.156", "32,187.000", "55000"],
["ORCL", "Oracle Corporation", "62,615.266", "9,519.000", "40650"],
["SAP", "SAP AG (ADR)", "40,986.328", "8,296.420", "28961"],
["CA", "Computer Associates Inter", "15,606.335", "3,164.000", "16000"],
["ERTS", "Electronic Arts Inc.", "14,490.895", "2,503.727", "4000"],
["SFTBF", "Softbank Corp. (ADR)", "14,485.840", ".000", "6865"],
["VRTS", "Veritas Software Corp.", "14,444.272", "1,578.658", "5647"],
["SYMC", "Symantec Corporation", "9,932.483", "1,482.029", "4300"],
["INFY", "Infosys Technologies Ltd.", "9,763.851", "830.748", "15400"],
["INTU", "Intuit Inc.", "9,702.477", "1,650.743", "6700"],
["ADBE", "Adobe Systems Incorporate", "9,533.050", "1,230.817", "3341"],
["PSFT", "PeopleSoft, Inc.", "8,246.467", "1,941.167", "8180"],
["SEBL", "Siebel Systems, Inc.", "5,434.649", "1,417.952", "5909"],
["BEAS", "BEA Systems, Inc.", "5,111.813", "965.694", "3063"],
["SNPS", "Synopsys, Inc.", "4,482.535", "1,169.786", "4254"],
["CHKP", "Check Point Software Tech", "4,396.853", "424.769", "1203"],
["MERQ", "Mercury Interactive Corp.", "4,325.488", "444.063", "1822"],
["DOX", "Amdocs Limited", "4,288.017", "1,427.088", "9400"],
["CTXS", "Citrix Systems, Inc.", "3,946.485", "554.222", "1670"],
["KNM", "Konami Corporation (ADR)", "3,710.784", ".000", "4313"]
];
var myColumns = [
"Ticker", "Company Name", "Market Cap.", "$ Sales", "Employees"
];
</script>
<script>
Active.Controls.Grid.patch = function(){
var obj = this.prototype;
var iframe = new Active.System.HTML();
iframe.setTag("iframe");
iframe.setAttribute("src", "javascript:'';");
iframe.setAttribute("frameborder", "0")
iframe.setAttribute("scrolling", "no")
iframe.setClass("select", "fix");
if (!obj.$browser) {
var scroll = obj.getTemplate("layout").getContent("scrollbars").getEvent("onscroll");
obj.getTemplate("layout").getContent("scrollbars").setEvent("onscroll", function(){
scroll.call(this);
this.$owner.getContent("iframe").refreshClasses();
});
obj.setContent("iframe", iframe);
}
};
Active.Controls.Grid.patch();
</script>
</head>
<body>
<script>
var obj = new Active.Controls.Grid;
obj.setRowProperty("count", 20);
obj.setColumnProperty("count", 5);
obj.setDataProperty("text", function(i, j){return myData[i][j]});
obj.setColumnProperty("text", function(i){return myColumns[i]});
obj.setRowHeaderWidth("0");
obj.setColumnHeaderHeight("20px");
obj.setAction("click", function(src){window.status = src.getItemProperty("text")});
document.write(obj);
</script>
</body>
</html>