setValue method
dynamic
setValue(
- dynamic name,
- dynamic colId,
- dynamic originalId,
- dynamic value,
- dynamic context,
Implementation
setValue(name, colId, originalId, value, context) {
if (isNull(originalId)) {
originalId = _mFocusNode[gId] ?? '';
}
myLogAll('setValue');
/*
找到修改值,
如果找到,比较是否相同,
如果相同,退出
否则找原值
如果找到原值,并相同,删除修改值,退出
否则,更新修改值,退出
未找到修改值
找原值如果相等, 退出
添加修改值
*/
dynamic item;
dynamic owner;
var typeOwner = gForm;
if (_tableList[name] != null) {
typeOwner = gTable;
}
if (typeOwner == gTable) {
item = getTableCol(name, colId);
owner = _tableList[name];
} else if (typeOwner == gForm) {
item = _formLists[name]![gItems][colId];
owner = _formLists[name];
}
bool isItemValid = isItemValueValid(item, value);
if (isNull(owner[gDataModified])) {
owner[gDataModified] = {};
}
if (isNull(owner[gDataModifiedInvalid])) {
owner[gDataModifiedInvalid] = {};
}
Map dataModified = owner[gDataModified];
Map dataModifiedInvalid = owner[gDataModifiedInvalid];
dynamic mValue;
bool isValidZone = true;
var id = originalId ?? gFakeId;
if (dataModified.containsKey(id)) {
mValue = dataModified[id];
} else if (dataModifiedInvalid.containsKey(id)) {
mValue = dataModifiedInvalid[id];
isValidZone = false;
}
dynamic originalValue = getValueOriginal(name, colId, id);
//找到修改值
if (!isNull(mValue) && !isNull(mValue[colId])) {
//修改值未改变,退出
if (mValue[colId] == value) {
return;
}
//新值与原值相同,删除修改值,退出
if (!isNull(originalValue) && !isNull(value) && originalValue == value) {
mValue.remove(colId);
if (mValue.length < 1) {
dataModified.remove(id);
}
return;
}
//更新
mValue[colId] = value;
if (isItemValid) {
//如值值合法,却在非法区,移到合法区
if (!isValidZone) {
moveItemBetweenMaps(id, dataModifiedInvalid, dataModified);
}
} else {
//如值值非法,却在合法区,移到非法区
if (isValidZone) {
moveItemBetweenMaps(id, dataModified, dataModifiedInvalid);
}
}
} else {
//修改值与源值同,退出
if (!isNull(originalValue) && !isNull(value) && originalValue == value) {
return;
}
//添加修改值
if (isItemValid) {
if (isNull(dataModified[id])) {
dataModified[id] = {};
}
dataModified[id][colId] = value;
} else {
if (isNull(dataModifiedInvalid[id])) {
dataModifiedInvalid[id] = {};
}
dataModifiedInvalid[id][colId] = value;
}
}
//if is valid
//setFocus(name, colId, null, true, context, -1);
}