|
版本: |
|
小版本号: |
|
|
|
数据库: |
|
服务器操作系统: |
|
应用服务器: |
|
客户端操作系统: |
|
浏览器: |
|
|
|
因为原来5.2.7中有分享了怎么在JS中动态生成树形编码,但在5.3.6中那方法就用不了了。看了好多贴子,要嘛就是在后台处理的,要嘛就是没怎么说清楚。研究了段时间,走了不少弯路,但好在终于弄出来了,下面是我具体代码实现,大家可参考:
1、先定义几个全局字段用于存放值
var bfID, bpID, bcode,bname = "";
var afID, apID = "";
2、data新增前事件:
// 新增前获取当前行FID
bfID = event.source.getCurrentRowID();
// 当值等于UNDFIND的时候赋值为空
if (!bfID)
bfID = "";
// 新增前获取当前行父ID
bpID = event.source.getValueByID("XPIDS", bfID);
if (!bpID)
bpID = "";
// 新增前获取当前行编码
bcode = event.source.getValueByID("CodeRL", bfID);
if (!bcode)
bcode = "";
bname = event.source.getValueByID("NameRL", bfID);
if (!bcode)
bname = "";
3、自定义一个方法根据参数值返回编码:
Model.prototype.getNodeMaxCode = function(parentID) {
var maxCode = "";
var mainData = this.comp('PConRecListData');
// 定义一个数组用于存取每行FID
var rows = new Array();
// 循环遍历DATA,取得每行的FID
mainData.each(function(param) {
// 取得每行FID
var fid = param.row.val('PConRecList');
// 根据每行FID得到该行的父ID
var xpids = mainData.getValueByID('XPIDS', fid);
if (!xpids)
xpids = "";
if (parentID == xpids && fid != afID) {
rows.push(fid);
}
});
if (rows) {
if (rows.length == 0) {
maxCode = bcode + "01";
} else {
for (var int = 0; int < rows.length; int++) {
if (maxCode < this.comp('PConRecListData').getValueByID("CodeRL", rows[int])) {
maxCode = this.comp('PConRecListData').getValueByID("CodeRL", rows[int]);
}
}
// 4
var len = maxCode.length;
// 01
var maxCodeLeft = maxCode.substr(0, len - 2);
// 04
var maxCodeRight = maxCode.substr(len - 2, 2);
// 05
maxCodeRight = justep.String.zeros(justep.String.toInt(maxCodeRight, 0) + 1, 2);
// 0105
maxCode = maxCodeLeft + maxCodeRight;
}
}
return maxCode;
};
4、新增后事件:
// 新增后获取当前行fID
afID = event.source.getCurrentRowID();
// 新增后获取当前行父ID
apID = event.source.getValueByID("XPIDS", afID);
// 当父ID等于UNDIFIN的时候赋值为空
if (!apID)
apID = "";
var bizData1 = this.comp('PConRecListData');
var maxCode = "";
if (apID == "") {// 新建根
maxCode = this.getNodeMaxCode("");
} else if (bpID == apID) {// 当当前行父ID等于上行父ID的时候-新增同级
maxCode = this.getNodeMaxCode(apID);
} else if (bfID == apID) {// 当当前行父ID等于上行FID的时候新增子级
maxCode = this.getNodeMaxCode(apID);
}
event.source.setValueByID('CodeRL', maxCode, afID);
var PConRecListData = this.comp('PConRecListData');
var CodeRL = event.source.getValueByID("CodeRL", apID);
var NameRL = event.source.getValueByID("NameRL", apID);
event.source.setValueByID('XPCO', CodeRL, afID);
event.source.setValueByID('XPNA', NameRL, afID);
5、如果你先要树形级次汇总的话,那么就需要在值改变事件中写道:
var bizData1 = this.comp('PConRecListData');
var PConRecInforData = this.comp('PConRecInforData');
var fid = bizData1.getCurrentRowID();
var XPID = bizData1.getValueByID('XPIDS', fid);
if(XPID == undefined){}else{
var MonRL = 0;
var Num = 0;
var pir = 0;
bizData1.each(function(param) {
// 取得每行FID
var fid = param.row.val('PConRecList');
var AMonRL = bizData1.getValueByID('AMonRL', fid);
var NumRL = bizData1.getValueByID('NumRL', fid);
var ApirRL = bizData1.getValueByID('ApirRL', fid);
// 根据每行FID得到该行的父ID
var xpids = bizData1.getValueByID('XPIDS', fid);
if (!xpids)
xpids = "";
if (xpids == XPID) {
MonRL += AMonRL * 1;
Num += NumRL * 1;
pir += ApirRL * 1;
}
});
this.comp('PConRecListData').to(XPID);
this.comp('PConRecListData').setValueByID('AMonRL', MonRL, XPID);
this.comp('PConRecListData').setValueByID('NumRL', Num, XPID);
this.comp('PConRecListData').setValueByID('ApirRL', pir, XPID);
var MonCI = this.comp('PConRecListData').sum('AMonRL');
PConRecInforData.setValue('ConMonRI', MonCI);
基本上就是这些,大家若有更好的方法可以提出来大家分享下
|
|