easyui中datagrid 中添加编辑行的实现
需求
1)动态添加可编辑行
2)行中某些列是下拉框
3)编辑后可以保存
html代码:
<table id="dgitem" style="width: 100%; height: 100%;" title="申请项" pagination="true" singleSelect="true" rownumbers="true"></table>
js代码:
1)初始化datagrid:
$("#dgitem").datagrid({
title: '',
toolbar: '#tb',
url: '',
singleSelect: true,
fitColumns: false,
pagination: true,
rownumbers: true,
loadMsg: "正在加载数据...",
columns: [[
{ field: 'ID', align: 'center', hidden: true },
{
field: 'depName', title: '部门', width: 220, align: 'center',editor: {
type: 'combobox',
options: {
valueField: 'name',
textField: 'name',
data: unitdatas,
required: true//是必填项
}
}
},
{
field: 'post', title: '职务', width: 230, align: 'center',
editor: {
type: 'combobox',
options: {
valueField: 'name',
textField: 'name',
data: datas,
required: true,//是必填项
onSelect: function (row) {
// var varSelect = $(this).combobox('getText');
//alert(userdatas);
}
}
}
},
{
field: 'fullName', title: '姓名', width: 180, align: 'center', editor: {
type: 'combobox',
options: {
valueField: 'name',
textField: 'name',
data: userdatas,
required: true//是必填项
}
}
},
{ field: 'remark', title: '备注', width: 280, align: 'center', editor: 'text' },
{
field: 'operate', title: '操作', align: 'center', width: 100,
formatter: function (value, row, index) {
var str = '<img src="/Themes/easyui/icons/filesave.png" title="双击行进行编辑\n在编辑状态下保存" alt="保存" onclick="saveItem()">';
return str;
}
}
]],
onDblClickRow: function (index, field, value) {
//双击编辑
$(this).datagrid('beginEdit', index);
editRow = index;
},
onAfterEdit: function (index, row) {
row.editing = false;
addItem(row);
},
toolbar: '#tb'
});
2)动态添加编辑行
var editRow = undefined; //添加方法行 function Add() { //depName、post、fullName、remark对应datagrid的字段,这里可以自己设置 var index = $('#dgitem').datagrid('appendRow', { depName: '', post: '计量岗', fullName: '系统管理员', remark: '' }).datagrid('getRows').length - 1; $('#dgitem').datagrid('beginEdit', index) editRow = index; }
3)每一行动态编辑列有一个保存按钮
//结束编辑,并调用保存 function saveItem() { $('#dgitem').datagrid('endEdit', editRow); }
4)在onAfterEdit事件中真正调用后台方法进行保存,上边的saveItem()方法实际是结束编辑,并触发onAfterEdit事件。

//添加单项方法 function addItem(row) { var SerialNumber = $('#txtCode').val();//流水号 var ID = row.ID;//用于编辑单项 var depName = row.depName; var post = row.post; var fullName = row.fullName; var remark = row.remark; var json = '[{"SerialNumber":"' + SerialNumber + '",' + '"depName":"' + depName + '",' + '"post":"' + post + '",' + '"fullName":"' + fullName + '",' + '"ID":"' + ID + '",' + '"remark":"' + remark + '"}]'; $.ajax({ type: "POST", dataType: "json", url: "Labor.ashx?Method=SetSafety_RevisionEnclosure_add", async: true, data: { json: json }, success: function (data) { if (data.Flag[0].Status == 1) { // layer.msg('保存成功!', { icon: 1 }); } else { layer.msg('保存失败!', { icon: 0 }); OpenClose(); } }, error: function (data) { layer.msg('服务器错误!', { icon: 2 }); OpenClose(); } }); }
5)利用在onDblClickRow事件实现双击行开启编辑行
onDblClickRow: function (index, field, value) { //双击编辑 $(this).datagrid('beginEdit', index); editRow = index; },
注意:editRow 是全局变量,否则不好使
代码中的 unitdatas、datas、userdatas都是各个对应combobox的数据。

valueField 这里对应的是js中的文本,因为我这里直接保存是是文字,如果自己需要保存的ID,可以把valueField 换成id。我是为了方便(偷懒)。

浙公网安备 33010602011771号