1.easyui中datagrid添加单元格编辑事件
这部分代码实现两个功能
(1)在进行选择行的时候在页脚统计已选数据需要计算字段的和
(2)有一个字段可以进行编辑,在编辑完成后也要在页脚完成对该字段的统计
根据昨天的内容,可以完成不编辑字段的统计,今天的重点是需要编辑字段的统计。
代码如下:
$('#whxdg').datagrid({
fit:true,
singleSelect:false,
toolbar: '#whxtb',
showFooter:'true',
url:getRootPath()+'/handverify/findDfInfo.do?customer='+code+'&pk_org='+pk_org+'&status=2',
columns:[[
{field:'ck',checkbox:true},
{field:'BILLNO',title:'单据号',width:200,align:'center'},
{field:'BILLTYPE',title:'单据类型',width:200,align:'center'},
{field:'JINE',title:'金额',width:200,align:'center'},
{field:'YHXJE',title:'已核销金额',width:200,align:'center'},
{field:'MONEY_CR',title:'未核销金额',width:200,align:'center'},
{field:'XGHXJE',title:'修改核销金额',width:200,align:'center',editor:{type:'numberbox',options:{precision:0},min:0}},
{field:'BILLDATE',title:'单据日期',width:200,align:'center'},
{field:'HEADID',title:'单据日期',width:200,align:'center',hidden:true},
{field:'BODYID',title:'单据日期',width:200,align:'center',hidden:true}
]],
//添加单击事件,
onClickCell: function(index,field,value){
if(field == 'XGHXJE'){
$(this).datagrid('beginEdit', index);
var ed = $(this).datagrid('getEditor', {index:index,field:'XGHXJE'});
$(ed.target).focus();
}else{
$(this).datagrid('endEdit', index);
}
},
onSelect:function (index,row){
$(this).datagrid('endEdit',index);
var rows = $('#whxdg').datagrid('getFooterRows'); //获取底部页脚信息
var foot_row = rows[0];
var XGHXJE = row.XGHXJE;
if(XGHXJE == ""){
XGHXJE = 0;
}
rows[0]['JINE'] = (parseFloat(row.JINE)+parseFloat(rows[0].JINE)).toFixed(2);
rows[0]['YHXJE'] = (parseFloat(row.YHXJE)+parseFloat(rows[0].YHXJE)).toFixed(2);
rows[0]['MONEY_CR'] = (parseFloat(row.MONEY_CR)+parseFloat(rows[0].MONEY_CR)).toFixed(2);
rows[0]['XGHXJE'] = (parseFloat(XGHXJE)+parseFloat(rows[0].XGHXJE)).toFixed(2);
$('#whxdg').datagrid('reloadFooter');
},
onUnselect:function (index,row){
var rows = $('#whxdg').datagrid('getFooterRows');
//alert(row.HXJETZ);
var row_XGHXJE = 0;
var foot_row = rows[0];
if(row.XGHXJE != ""){
row_XGHXJE = row.XGHXJE;
}
rows[0]['JINE'] = (parseFloat(rows[0].JINE) - parseFloat(row.JINE)).toFixed(2);
rows[0]['YHXJE'] = (parseFloat(rows[0].YHXJE) - parseFloat(row.YHXJE)).toFixed(2);
rows[0]['MONEY_CR'] = (parseFloat(rows[0].MONEY_CR) - parseFloat(row.MONEY_CR)).toFixed(2);
rows[0]['XGHXJE'] = (parseFloat(rows[0].XGHXJE) - parseFloat(row.XGHXJE)).toFixed(2);
$('#whxdg').datagrid('reloadFooter');
},
onSelectAll:function (rows){
var foot_JINE = 0;
var foot_YHXJE = 0;
var foot_MONEY_CR = 0;
var foot_XGHXJE = 0;
for(var i = 0;i < rows.length;i++){
var XGHXJE = rows[i].XGHXJE;
if(XGHXJE == ""){
XGHXJE = 0;
}
$(this).datagrid('endEdit', i);
foot_JINE = (parseFloat(foot_JINE) + parseFloat(rows[i].JINE)).toFixed(2);
foot_YHXJE = (parseFloat(foot_YHXJE) + parseFloat(rows[i].YHXJE)).toFixed(2);
foot_MONEY_CR = (parseFloat(foot_MONEY_CR) + parseFloat(rows[i].MONEY_CR)).toFixed(2);
foot_XGHXJE = (parseFloat(foot_XGHXJE) + parseFloat(XGHXJE)).toFixed(2);
}
var foot_rows = $('#whxdg').datagrid('getFooterRows');
foot_rows[0]['JINE'] = foot_JINE;
foot_rows[0]['YHXJE'] = foot_YHXJE;
foot_rows[0]['MONEY_CR'] = foot_MONEY_CR;
foot_rows[0]['XGHXJE'] = foot_XGHXJE;
$('#whxdg').datagrid('reloadFooter');
},
onUnselectAll:function (rows){
var foot_rows = $('#whxdg').datagrid('getFooterRows');
foot_rows[0]['JINE'] = "0";
foot_rows[0]['YHXJE'] = "0";
foot_rows[0]['MONEY_CR'] = "0";
foot_rows[0]['XGHXJE'] = "0";
$('#whxdg').datagrid('reloadFooter');
}
});
通过js加载datagrid代码如上所示,通过onSelect,onUnselect,onSelectAll和onUnselectAll四个方法完成对页脚数据的统计。方法中重要代码:
(1)var foot_rows = $('#whxdg').datagrid('getFooterRows'):获取底部页脚行信息;
(2)foot_rows[0]['JINE'] = foot_JINE;以该格式对不同的字段进行赋值
(3)$('#whxdg').datagrid('reloadFooter');重新加载页脚行数据
除此之外,通过单击事件获取需要编辑的字段:思路入下:
(1)只有单击需要编辑的字段时,该字段才进入编辑状态,同时,该行数据为onUnselect(取消选中)状态,这样做为了便于统计。主要代码:
$(this).datagrid('beginEdit', index);//开启该行数据的编辑状态
var ed = $(this).datagrid('getEditor', {index:index,field:'XGHXJE'});//获取需要编辑的字段
$(ed.target).focus();//设置该字段为焦点(即把光标移到该字段上)
(2)单击该行其他单元格时,该行退出编辑,同时,该行数据为onSelect(选中)状态,这样做同样是为了便于统计。
$(this).datagrid('endEdit', index);//结束该行数据编辑
(3)如果没有单击其他单元格,直接勾选行首的选中单元格或者进行全选操作,同样结束行数据的编辑状态,并进行统计。
$(this).datagrid('endEdit', index);//结束该行数据编辑,需要写入到onSelect和onSelectAll中。

编辑时为选中状态

表格字段编辑状态
2.通过js和html共同完成上述功能
(1)html代码
data-options="iconCls:'icon-edit'"
toolbar="#yhxtb"fit="true" showFooter="true">
主键本方单据号本方单据类型对方单据号对方单据类型核销金额应核销金额总核销金额未核销金额核销金额调整
(2)js代码
$(function(){
$('#yhxdg').datagrid({
//添加单击事件,
onClickCell: function(index,field,value){
if(field == 'HXJETZ'){
$(this).datagrid('beginEdit', index);
var ed = $(this).datagrid('getEditor', {index:index,field:'HXJETZ'});
$(ed.target).focus();
}else{
$(this).datagrid('endEdit', index);
}
},
//核销明细选择事件
onCheck:function (index,row){
$(this).datagrid('endEdit',index);
var rows = $('#yhxdg').datagrid('getFooterRows');
//alert(row.HXJETZ);
var row_HXJETZ = 0;
var foot_row = rows[0];
if(row.HXJETZ != ""){
row_HXJETZ = row.HXJETZ;
}
rows[0]['YHXJE'] = (parseFloat(row.YHXJE)+parseFloat(rows[0].YHXJE)).toFixed(2);
rows[0]['HXJE'] = (parseFloat(row.HXJE)+parseFloat(rows[0].HXJE)).toFixed(2);
rows[0]['ZHXJE'] = (parseFloat(row.ZHXJE)+parseFloat(rows[0].ZHXJE)).toFixed(2);
rows[0]['ZWHXJE'] = (parseFloat(row.ZWHXJE)+parseFloat(rows[0].ZWHXJE)).toFixed(2);
rows[0]['HXJETZ'] = (parseFloat(row_HXJETZ)+parseFloat(rows[0].HXJETZ)).toFixed(2);
//rows[0]['salary'] = 60000;
$('#yhxdg').datagrid('reloadFooter');
},
onUncheck:function (index,row){
var rows = $('#yhxdg').datagrid('getFooterRows');
//alert(row.HXJETZ);
var row_HXJETZ = 0;
var foot_row = rows[0];
if(row.HXJETZ != ""){
row_HXJETZ = row.HXJETZ;
}
rows[0]['YHXJE'] = (parseFloat(rows[0].YHXJE) - parseFloat(row.YHXJE)).toFixed(2);
rows[0]['HXJE'] = (parseFloat(rows[0].HXJE) - parseFloat(row.HXJE)).toFixed(2);
rows[0]['ZHXJE'] = (parseFloat(rows[0].ZHXJE) - parseFloat(row.ZHXJE)).toFixed(2);
rows[0]['ZWHXJE'] = (parseFloat(rows[0].ZWHXJE) - parseFloat(row.ZWHXJE)).toFixed(2);
rows[0]['HXJETZ'] = (parseFloat(rows[0].HXJETZ) - parseFloat(row_HXJETZ)).toFixed(2);
//rows[0]['salary'] = 60000;
$('#yhxdg').datagrid('reloadFooter');
},
onCheckAll:function (rows){
var foot_YHXJE = 0;
var foot_HXJE = 0;
var foot_ZHXJE = 0;
var foot_ZWHXJE = 0;
var foot_HXJETZ = 0;
for(var i = 0;i < rows.length;i++){
var HXJETZ = 0;
if(rows[i].HXJETZ != ""){
HXJETZ = rows[i].HXJETZ;
}
$(this).datagrid('endEdit',i);
foot_YHXJE = (parseFloat(foot_YHXJE) + parseFloat(rows[i].YHXJE)).toFixed(2);
foot_HXJE = (parseFloat(foot_HXJE) + parseFloat(rows[i].HXJE)).toFixed(2);
foot_ZHXJE = (parseFloat(foot_ZHXJE) + parseFloat(rows[i].ZHXJE)).toFixed(2);
foot_ZWHXJE = (parseFloat(foot_ZWHXJE) + parseFloat(rows[i].ZWHXJE)).toFixed(2);
foot_HXJETZ = (parseFloat(foot_HXJETZ) + parseFloat(HXJETZ)).toFixed(2);
}
var foot_rows = $('#yhxdg').datagrid('getFooterRows');
foot_rows[0]['YHXJE'] = foot_YHXJE;
foot_rows[0]['HXJE'] = foot_HXJE;
foot_rows[0]['ZHXJE'] = foot_ZHXJE;
foot_rows[0]['ZWHXJE'] = foot_ZWHXJE;
foot_rows[0]['HXJETZ'] = foot_HXJETZ;
//rows[0]['salary'] = 60000;
$('#yhxdg').datagrid('reloadFooter');
},
onUncheckAll:function (rows){
var foot_rows = $('#yhxdg').datagrid('getFooterRows');
foot_rows[0]['YHXJE'] = "0";
foot_rows[0]['HXJE'] = "0";
foot_rows[0]['ZHXJE'] = "0";
foot_rows[0]['ZWHXJE'] = "0";
foot_rows[0]['HXJETZ'] = "0";
//rows[0]['salary'] = 60000;
$('#yhxdg').datagrid('reloadFooter');
}
});
})
功能和主要实现代码如上。
前端相关文章链接:
easyui中datagrid页脚数据动态刷新以及JS获取项目的绝对路径
Oracle相关文章链接
Oracle学习日记——高级查找
Oracle查询基础
Oracle学习日记——时间日期范围处理
MySQL相关文章链接
MySQL学习系列之十——联结
MySQL学习系列之十二——组合查询
MySQL学习系列之八——分组数据