1、datacell的整体架构 datacell的外观其实就是一个table,由行rows和列cells组成,其对应的数据实质上是一个list,由一行一行的entity拼装而成,在保存的时候会形成增、删、改三个list(dataset),datacell的每个cell一般都对应有一个editor,用户点击某个cell的时候,显示该editor,用户离开该editor时,隐藏该editor,editor显示前会从table或entity中去取数据,然后把数据显示到editor的编辑框中,editor隐藏前会把当前编辑框中的数据写回到table和entity中去。 2、获得datacell的引用 document.all.定义datacell的id值,如 var myDatacell = document.all.eosLogicTable; 如果是跨frame,例如要取iframe里面的datacell,可以用 var myDatacell = window.frames("result").document.all.eosLogicTable; 在打开的模态窗口中取其打开者窗口中的datacell可以用 var myDatacell = window.dialogArguments.document.all.eosLogicTable; 其他类似,如parent、opener等都可以用。 3、获得datacell的引用是为了获得以下的引用 1)获得当前选中的行的引用 var myRow = myDatacell.cur_row; 2)获得第一行的引用 var myRow = myDatacell.selectFirstRow; 3)获得最后一行的引用 var myRow = myDatacell.selectLastRow; 4)获得任意一行的引用 var myRow = myDatacell.rows(i),i可以从1到n,如第一行也可用var myRow = myDatacell.rows(1)取到,第二行可以用var myRow = myDatacell.rows(2)取到 ,循环取得所有行可以这样来 for(var i=1; i <myDatacell.length; i++){ var myRow = myDatacell.rows(i); } 4、获得了行之后就可以获得entity和cell的引用了 1)获得entity的引用 myRow.entity 2)获得cell的引用 var myCell = myRow.cells(i),i从0到n 5、获得entity就可以用getProperty和setProperty去取得或设置数据了,如 entity.getProperty("JG"); entity.setProperty("JG"); 6、获得cell就可以用以下方式设置或获得页面的显示了 1)设置 myCell.innerHTML = "系统管理员"; myCell.value = "sysadmin"; //排序用的一个属性 2)获得 var myName = cell.innerHTML; var myID = cell.value; 7、以上是从datacell往下找,找到cell,从cell或cell中的元素往上找一般可以用parentNode属性,如 var myRow = cell.parentNode; 8、往datacell中增加一行可以用 myDatacell.addrow(); 9、某一行的数据修改了,要执行 if(myRow.entity.status != Entity.STATUS_NEW) myRow.entity.status = Entity.STATUS_MODIFIED; 以表示该行数据修改了,datacell保存的时候会把该entity放到modefied的那个list中去 10、addrow()时会调用datacell的onrefresh事件,可以在该事件中指定这一行的格式,如 function cellRefresh_toadd (cell, fieldName, entity ){ switch( fieldName ){ case "selectM" : { cell.innerHTML = " <input type=button value='选择材料' οnclick=/"javascript:selectCL(this);/" >"; break; } case "SUBJECT_CODE" : { var myInnerStr = " <select name="mySelect" > <option value="1" >一 </option > <option value="2" >二 </option > </select >"; cell.innerHTML = myInnerStr; break; } default: break; } } |