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;
}
}