需求
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。我是為了方便(偷懶)。
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。