EasyUI —— datagrid进阶使用,编辑表格

/ EasyUI / 198浏览

绑定编辑表格

编辑表格,需要指定列editor的属性,定义是什么样的编辑控件,如:

editor:'text',代表文本框
editor:'datebox',代表日期控件
editor:{type:'combobox'},代表combobox控件

用例代码:

$(function(){
    var url = "/listdata";
    $("#dg").datagrid({
        method:'post',
        url:url,
        autoRowHeight:false,
        fit:true,
        remoteSort:true,
        border:true,
        pagination:true,
        fitColumns:true,
        singleSelect:false,
        multiSort:true,
        onClickRow:RowClick,
        pageSize:10,
        pageList:[10,20,50],
        columns:[[
            {field:'cb',checkbox:true},
            {field:'userId',title:'userId',width:70},
            {field:'userName',title:'用户名',editor:'text',width:80},
            {field:'cat',title:'宠物',editor:{type:'combobox'},width:60},
            {field:'cat_child',title:'小宠物',editor:'combobox',width:80},
            {field:'h',title:'身高(cm)',editor:'text',width:60},
            {field:'w',title:'标准体重([身高-100]×0.9)',editor:'text',width:120},
            {field:'birthday',title:'生日',editor:'datebox',width:80},
            {field:'id',hidden:true}
        ]]
    });
});

绑定列组件JS事件

代码中,分别使用了文本框,combobox以及datebox,为了在编辑表格中应用combobox级联的能力,使用了宠物的场景,选择宠物列后,动态的绑定小宠物的combobox数据。
也应用了文本框的输入keyup事件,输入身高来计算标准体重的用例。
用例代码:

var lastIndex;
function RowClick(rowIndex){
    //单击进行修改
    $("#dg").datagrid('unselectAll');
    $("#dg").datagrid('selectRow',rowIndex);
    if (lastIndex != rowIndex){
        $('#dg').datagrid('endEdit', lastIndex);
        $('#dg').datagrid('beginEdit', rowIndex);

        //绑定编辑表格列事件
        var editors = $("#dg").datagrid('getEditors', rowIndex);

        //级联用例
        var catEditor = editors[1];
        var childCatEditor = editors[2];
        catEditor.target.combobox({
            url:'/combox/data',
            valueField:'id',
            textField:'text',
            onSelect:function (data){
                //级联绑定
                url = "/combox/datachild/"+data.id;
                childCatEditor.target.combobox({
                    url:url,
                    valueField:'id',
                    textField:'text',
                    onLoadSuccess:function(data){
                        $(this).combobox("select", data[0].id);
                    }
                });
            }
        })

        //自动计算用例
        var heightEditor = editors[3];
        var weightEditor = editors[4];

        heightEditor.target.bind('keyup',function () {
            var h = heightEditor.target.val();
            var w = getWeight(h);
            weightEditor.target.val(w.toFixed(2)+" kg");
        });

    }
    lastIndex = rowIndex;
}

//停止编辑
function stopEditRow(){
    $('#dg').datagrid('endEdit', lastIndex);
    lastIndex=undefined;
}

//根据身高计算标准体重
function getWeight(v){
    var w = 0;
    if(v=="") {
        w = 0;
    }else if(!validInteger(v)){
        alert("身高 请输入数字哦!");
    }else{
        w = parseFloat(v-100)*0.9;
    }
    return w;
}

验证是否为整数
function validInteger(value){
    return /^\d+(\.\d+)?$/i.test(value);
}

编辑表格中级联应用的效果图(选择宠物后,加载小宠物列): alt 编辑表格中文本事件的效果图(输入身高,自动计算了标准体重): alt

编辑表格的数据保存

数据保存,分为删除数据、变更数据、新增数据三类,所以每次保存前先要获取这三类数据,传入后台去更新数据库。
用例代码:

HTML按钮:


<a href="#" class="easyui-linkbutton" onclick="insertRow();return false;">insert</a>
<a href="#" class="easyui-linkbutton" onclick="saveAll();return false;">save</a>
<a href="#" class="easyui-linkbutton" onclick="deleteSelect();return false;">delete</a>

JS代码:

//获得所有修改的数据
function saveAll() {
    var dg = $("#dg");
    var delRow=JSON.stringify(dg.datagrid('getChanges','deleted'));
    var newRow=JSON.stringify(dg.datagrid('getChanges','inserted'));
    var editRow=JSON.stringify(dg.datagrid('getChanges','updated'));
    $("#info").append("<li>"+new Date()+"</li>");
}

//删除选中行
function deleteSelect() {
    stopEditRow();
    var rows = $('#dg').datagrid('getSelections');
    if (!rows || rows.length == 0) {
        $.messager.alert('提示', '请选择要删除的数据!', 'info');
        return;
    }
    $.messager.confirm('Confirm','您确定要删除选中记录吗?',function(r){if (r){
        var dg=$('#dg');
        $.each(rows, function (i, row) {
            var index=dg.datagrid('getRowIndex',row);
            dg.datagrid('deleteRow',index);
        });
    }});
}

//插入新行
function insertRow(){
    stopEditRow();
    var i=$('#dg').datagrid('getData').rows.length;
    $('#dg').datagrid('insertRow',{index:i,row:{}});
}

经过操作后,点击保存按钮后,获取删除、变更、新增的数据输入截图(打印到了ul标签内): alt