easyui的datagrid中行內編輯使用數據聯動。即:當編輯產品編號時,該行的產品名稱自動根據產品編號顯示出來。
在編輯中獲取當前行的索引
function getRowIndex(target) { var tr = $(target).closest('tr.datagrid-row'); return parseInt(tr.attr('datagrid-row-index')); }
在編輯中獲取當前行的值
var editor = $('#tt').datagrid('getEditors', rowIndex); return $(editor[0].target).numberbox('getValue');
jQuery EasyUI 1.4.1.x
<link href="~/Content/bootstrap.css?v=2" rel="stylesheet" /> <link href="~/Content/themes/default/easyui.css" rel="stylesheet" /> <link href="~/Content/themes/icon.css" rel="stylesheet" /> <link href="~/Content/Site.css" rel="stylesheet" /> <script src="~/Scripts/jquery-3.2.1.min.js?v=2"></script> <script src="~/Scripts/jquery.easyui.min.js?v=2"></script> <script src="~/Scripts/easyui-lang-zh_CN.js"></script> <script src="~/Scripts/My97DatePicker/WdatePicker.js"></script> <script src="~/Scripts/bootstrap.min.js"></script> <div style="padding-top:20px;width:860px; margin:auto;"> <div class="row"> <div style="margin:10px 0"> <a href="#" onclick="insert()" class="easyui-linkbutton c1" iconCls="icon-add">添加</a> </div> <table id="tt"></table> </div> </div>
<script type="text/javascript"> var jsondata = @Html.Raw(ViewBag.jsondata); var pc = @Html.Raw(ViewBag.pc); $(function () { $('#tt').datagrid({ title: '倉庫賬務庫存', iconCls: 'icon-edit', width: 800, height: 300, singleSelect: true, columns: [[ { field: 'productid', title: '產品編碼', width: 80, align: 'right' , editor: { type: 'numberbox', options: { required: true, onChange: function () {//輸入產品編碼,產品名稱和批次聯動 changeproduct(this); } } } }, { field: 'productname', title: '產品名稱', width: 200 , editor: { type: 'text'//產品名稱這里先設置為text,然后再設置為只讀。如果沒有type就獲取不到,無法js更新值 } }, { field: 'pc', title: '批次', width: 150, align: 'left' , editor: { type: 'combobox' , options: { valueField: 'label', textField: 'value', data: pc, onChange: function () {//combobox下拉框選擇更改,數量聯動 changepc(this); } } } }, { field: 'ztsl', title: '整托數量', width: 80, align: 'right', editor: 'text' }, { field: 'zjsl', title: '整件數量', width: 80, align: 'right',editor: 'text' }, { field: 'hwh', title: '貨位號', width: 80,align: 'right', editor: 'text' }, { field: 'action', title: '', width: 80, align: 'center', formatter: function (value, row, index) { if (row.editing) { var s = '<a href="#" onclick="saverow(this)" iconCls="icon-save">保存</a> '; var c = '<a href="#" onclick="cancelrow(this)" iconCls="icon-cancel">取消</a>'; return s + c; } else { var e = '<a href="#" onclick="editrow(this)" iconCls="icon-edit">修改</a> '; var d = '<a href="#" onclick="deleterow(this)" iconCls="icon-remove">刪除</a>'; return e + d; } } } ]], onBeforeEdit: function (index, row) { row.editing = true; updateActions(index); }, onAfterEdit: function (index, row) { row.editing = false; updateActions(index); }, onCancelEdit: function (index, row) { row.editing = false; updateActions(index); } }); }); function updateActions(index) { $('#tt').datagrid('updateRow', { index: index, row: {} }); } //獲取當前行的索引 function getRowIndex(target) { var tr = $(target).closest('tr.datagrid-row'); return parseInt(tr.attr('datagrid-row-index')); } //批次combobox下拉框選擇更改,數量聯動 function changepc(r){ var rowindex = getRowIndex(r); var editor = $('#tt').datagrid('getEditors', rowindex); var productid=$(editor[0].target).numberbox('getValue'); var pctemp=$(editor[2].target).numberbox('getValue'); for(var i=0;i<jsondata.length;i++){ if(jsondata[i].productid == productid && jsondata[i].pc == pctemp){ $(editor[3].target).val(jsondata[i].ztsl); $(editor[4].target).val(jsondata[i].zjsl); $(editor[5].target).val(jsondata[i].hwh); } } } //產品編碼textbox更改,批次下拉框聯動 function changeproduct(r){ var rowindex = getRowIndex(r); var editor = $('#tt').datagrid('getEditors', rowindex); var productid=$(editor[0].target).numberbox('getValue'); var temppc = new Array(); var rownum = (rowindex + 1).toString(); for(var i=0;i<jsondata.length;i++){ if(jsondata[i].productid == productid){ var tpc = { "label":jsondata[i].pc,"value":jsondata[i].pc }; temppc.push(tpc); $(editor[1].target).val(jsondata[i].productname); } } $(editor[2].target).combobox({ data : temppc}); } //編輯 function editrow(target) { var rowIndex = getRowIndex(target); $('#tt').datagrid('beginEdit', getRowIndex(target)); initrow(rowIndex); } //刪除一行 function deleterow(target) { $('#tt').datagrid('deleteRow', getRowIndex(target)); } //保存編輯 function saverow(target) { $('#tt').datagrid('endEdit', getRowIndex(target)); } //取消編輯 function cancelrow(target) { $('#tt').datagrid('cancelEdit', getRowIndex(target)); } //新增一行 function insert() { var rowcount = $('#tt').datagrid('getRows').length; $('#tt').datagrid('insertRow', { index: rowcount, row: { } }); $('#tt').datagrid('selectRow', rowcount); $('#tt').datagrid('beginEdit', rowcount); initrow(rowcount); } //新增或編輯行時,先初始化行內的編輯器 function initrow(rowIndex) { var editor = $('#tt').datagrid('getEditors', rowIndex); var productid = editor[0]; $(productid.target).focus(); //設置產品名稱、數量等只讀 $(editor[1].target).attr("disabled", true); $(editor[3].target).attr("disabled", true); $(editor[4].target).attr("disabled", true); $(editor[5].target).attr("disabled", true); $(editor[0].target).css("text-align", "right"); $(editor[3].target).css("text-align", "right"); $(editor[4].target).css("text-align", "right"); $(editor[5].target).css("text-align", "right"); } </script>