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