恢复数据

课后整理 2021-2-25

恢复数据是指在查询数据视图中,如果单击“取消”按钮,取消当前的修改操作,则应该把当前数据行内的表单域恢复成原来的数据显示样式,同时应该丢弃已经修改的数据,显示原来的数据,演示效果如图1所示。

图1 恢复数据

resettData()函数功能实现不是很难,只要知道当前数据行原来的数据即可,由于在执行修改操作之前,rowtoForm()函数已经保存了当前行的原始数据,并返回了这个数据集,因此我们只需要获取这个返回值即可。详细代码如下。

//===================================
//恢复表格行默认显示数据
//参数
//paraobj {
    //row:恢复值的行对象,DOM对象
    //table:恢复值的数据表,字符串
    //update:更新时间,可选
    //rowoldvalue:行默认值,数据集合对象,名称为字段名称field,值为单元格默认值,可选
//}
//返回值:无
var resettData = function(paraobj){
    var _paraobj = paraobj; 								//保存参数
    var paraobj = {};
    for(var name in _paraobj){
        paraobj[name] = _paraobj[name];
    }
    if(!paraobj.row){									//处理参数值
        alert("没有指明要恢复显示的行!");
        return false;
    }else
        var row = paraobj.row;
    if(!paraobj.table){
        alert("没有指明要恢复显示的数据表!");
        return false;
    }else
        var table = paraobj.table;
    var updatetime = paraobj.updatetime;
    var rowoldvalue = paraobj.rowoldvalue;    
    var childnodes = row.childNodes; 						//获取行内单元格
    for(var j=0;j<childnodes.length;j++){					//遍历行内单元格,恢复默认显示效果
        var cell = childnodes[j]; 							//获取单元格
        cell.style.padding = "2px";						//恢复补白
        var field = cell.className; 						//获取类名
        if(!field) 									//如果不存在类名,跳过该单元格
            continue;
        //恢复显示可编辑(表单)的单元格数据,同时考虑如果没有传递要具体恢复的默认值    
        if((fieldobj[field][2] != "no") && !rowoldvalue){
            if(cell.firstChild) 							//如果单元格包含子元素
                var value = cell.firstChild.value || cell.firstChild.data ; 		//获取表单的值
            else 									//否则恢复默认值为空
                var value = "";
            var value = formatData(value, {					//格式化值
                field:    field,
                table:    table
            });    
            if(field == "class" && !value){					//如果是分类单元格
                //查询对应分类表中该值对应的标签名称
                var sql = "select * from "+ tableobj[table][2] +"  where id = "+ value ;
                var rs = requeryrs(sql);
                cell.innerHTML = String(rs("title"));
                closers(rs); 							//清除记录集
            }else{									//不是分类单元格,则直接显示值
                cell.innerHTML = value;
            }
        }
        //如果参数中设置了恢复的默认值,则使用指定的值进行恢复显示
        else if(rowoldvalue){
            cell.innerHTML = rowoldvalue[field];
        }
        //当不是取消操作时,修改完成后应该显示更新的时间
        else if(field == "update" && !!updatetime){
            cell.innerHTML = updatetime;
        }
    }
}