Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)

时间:2022-07-06 09:06:11

项目中有个datagrid需要编辑行时,用到Editor的属性,那么如何添加一个事件

问题:同一个编辑行中的某个单元格值改变时,修改其他单元格的值

页面用到的datagrid

   <table id="list" data-bind="datagrid:grid">
           <thead>
               <tr>
                   <th field="ck" checkbox="false"></th>
                   <th field="Uid" hidden="true"></th>
                   <th field="OptimisticLockField" hidden="true"></th>
                   <th field="ProjectId" hidden="true"></th>
                   <th field="ProjectCode"      sortable="true" align="center" width="120">检查项编号</th>
                   <th field="ProjectName"      sortable="true" align="center" width="150">检查项名称</th>
                   <th field="ProjectResult"    sortable="true" align="center" width="150"      editor="{type:'numberbox',options:{required:true,min:0,precision:2}}" >检查项结果</th>
                   <th field="CheckState"       sortable="true" align="center" width="100"      editor="{type:'combobox',options:{data:data.dataSource.CheckStates,required:true}}"  styler="showStateColor">检查状态</th>
                   <th field="ReferenceValue"   sortable="true" align="center" width="150">参考值</th>
                   <th field="ProjectUnitName"  sortable="true" align="center" width="100">项目单位</th>            
               </tr>
           </thead>
       </table>

如上所示,我编辑行时,只要修改检查项和检查结果两个列,是检查项结果值改变,带出检查状态

js中如何实现

            //grid的单击事件
            this.grid.onClickRow = function(rowIndex,rowData)
            {  
                //单击时触发编辑行事件
                $('#list').datagrid('beginEdit',rowIndex);
                //获取当前修改行编辑器的数据
                var editors = $('#list').datagrid('getEditors', rowIndex);                 
                //获取行编辑器第一个对象
                var editor1 = editors[0];
                var editor2 = editors[1];
                //console.log(rowData);
                //为对象的数字框添加onChange事件
                editor1.target.numberbox({
                    onChange:function(newValue,oldValue){
                        if(newValue > 0)
                        {
                            //获取检查项的最小值和最大值
                            var minValue = parseFloat(rowData.MinValue);
                            var maxValue = parseFloat(rowData.MaxValue);
       
                            if(newValue > maxValue){
                                //设置combobox的值为偏高(2)
                                editor2.target.combobox('setValue',2);
                            }
                            else if(newValue < minValue){
                                //设置combobox的值为偏低(1)
                                editor2.target.combobox('setValue',1);
                            }
                            else{
                                //设置combobox的值正常(0)
                                editor2.target.combobox('setValue',0);
                            } 
                 ////传递检查项结果data数据
                            //var dts={"ItemId": rowData.Uid,"ProjectId":rowData.ProjectId,"ProjectResult":newValue};  
                            ////请求计算结果(正常(0)、偏低(1)、偏高(2))
                            //com.ajax({
                            //    type: 'POST',
                            //    url: '/api/bpum/PumPrenatalInspect/GetProjectState/' + rowData.Uid,
                            //    data: JSON.stringify(dts),
                            //    success: function (str)
                            //    {
                            //        //设置combobox的值
                            //        editor2.target.combobox('setValue',str);
                            //    },
                            //    error: function (e) {
                            //        com.message('error', e.responseText);
                            //    }
                            //});
} } }); }

图片实例:

Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)

Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)

实现原理:

通过行单击事件中rowIndex获取行的编辑器对象editors,由于我们只有两个列编辑的,所以editors[0]就获取第一列检查项结果编辑的对象,

editors[1]获取检查状态的对象,由于第一个单元格是numberBox,第二个combobox,我们给numberBox绑定一个onChage()事件,判断当第一个单元格

值改变时,修改第二个单元格的值。其他类型也可以修改,改成对应类型就可以了(修改数值也可以用ajax请求后修改,但是会出现刷新问题)

参考网址:

https://www.cnblogs.com/linvan/p/6607465.html