grid_complexheader_content
Setting complex content to header
Complex objects to use in grid header can be created in invisible container and attached to div elements in grid header after grid loaded.
Or they can be created with script on the fly
<div style="display:none">
<div id="title_flt_box"><input type="100%" style="border:1px solid gray;" onclick="(arguments[0]||window.event).cancelBubble=true;" onkeyup="filterBy()"></div>
<div id="author_flt_box"><select style="width:100%" onclick="(arguments[0]||window.event).cancelBubble=true;" onchange="filterBy()"></select></div>
</div>
<script>
mygrid = new dhtmlXGridObject('gridbox');
...
mygrid.loadXML("grid.xml", function(){
mygrid.attachHeader("#rspan,<div id='title_flt'></div>,<div id='author_flt'></div>,#rspan,#rspan,#rspan,#rspan,#rspan");
document.getElementById("title_flt").appendChild(document.getElementById("title_flt_box").childNodes[0])
var authFlt = document.getElementById("author_flt").appendChild(document.getElementById("author_flt_box").childNodes[0]);
populateSelectWithAuthors(authFlt);
mygrid.setSizes();
}); </script>
Example of functions which can be usefull for filtering grid content (used in current sample):
function filterBy(){
var tVal = document.getElementById("title_flt").childNodes[0].value.toLowerCase();
var aVal = document.getElementById("author_flt").childNodes[0].value.toLowerCase();
for(var i=0; i< mygrid.getRowsNum();i++){
var tStr = mygrid.cells2(i,1).getValue().toString().toLowerCase();
var aStr = mygrid.cells2(i,2).getValue().toString().toLowerCase();
if((tVal=="" || tStr.indexOf(tVal)==0) && (aVal=="" || aStr.indexOf(aVal)==0))
mygrid.setRowHidden(mygrid.getRowId(i),false)
else
mygrid.setRowHidden(mygrid.getRowId(i),true)
}
}
function populateSelectWithAuthors(selObj){
selObj.options.add(new Option("All Authors",""))
var usedAuthAr = new dhtmlxArray();
for(var i=0;i<mygrid.getRowsNum();i++){
var authNm = mygrid.cells2(i,2).getValue();
if(usedAuthAr._dhx_find(authNm)==-1){
selObj.options.add(new Option(authNm,authNm))
usedAuthAr[usedAuthAr.length] = authNm;
}
}
}