easyUI datagrid 实现高级查询 不同字段实现不同的editor


easyUI datagrid 实现高级查询 不同字段实现不同的editoreasyUI datagrid 实现高级查询 不同字段实现不同的editor

easyUI datagrid 实现高级查询 不同字段实现不同的editor

easyUI datagrid 实现高级查询 不同字段实现不同的editor

            var _defaultFieldName="emp_no";
            //可查询的字段
            var _columns=_gridEmployee.datagrid("getColumnFieldInfos");
            //格式化字段显示的标题
            var _fieldnameFormater=function(value,row){
                var rets="";
                for (vari=0;i<_columns.length;i++){
                    if (_columns[i].id==value){
                        rets=_columns[i].text;
                        break;
                    }
                }
                return rets;
            };
            //比较符
            var _compareTer = [
                {id:'eq',text:'等于'},
                {id:'noteq',text:'不等于'},
                {id:'lt',text:'小于'},
                {id:'lteq',text:'小于或等于'},
                {id:'gt',text:'大于'},
                {id:'gteq',text:'大于或等于'},
                {id:'like',text:'包含'},
                {id:'notlike',text:'不包含'}
            ];
            //格式化比较符显示
            var _compareFormater=function(value,row){
                var rets="";
                for (vari=0;i<_compareTer.length;i++){
                    if (_compareTer[i].id==value){
                        rets=_compareTer[i].text;
                        break;
                    }
                }
                return rets;
            };
            //逻辑关系
            var _whereRelation=[{id:"and",text:"并且"},{id:"or",text:"或者"}];
            var _relationFormater=function(value,row){
                var rets="";
                for (vari=0;i<_whereRelation.length;i++){
                    if (_whereRelation[i].id==value){
                        rets=_whereRelation[i].text;
                        break;
                    }
                }
                return rets;
            };
            //当字段combobox改变值时,动态创建值列的editor
            var _onChangeValueEditor=function()
            {
                //技巧:必须退出edit状态才可以改变editor
                var tg=_queryGrid.datagrid("getEditor",{index:_currentEditIndex,field:"fieldname"}).target;
                //取出字段
                var nvalue=tg.combobox("getValue");
                //根据字段生成editor
                var aeditor=_getColumEditor(nvalue);
                //改变列的editor,并重新开放edit状态
                _queryGrid.datagrid("endEdit",_currentEditIndex).datagrid("removeEditor","value").datagrid("addEditor",[{field:'value',editor:aeditor}]).datagrid("beginEdit",_currentEditIndex);

            };
            //根据字段生成editor
            var _getColumEditor=function(fieldname){
                var datatype="string";
                for (vari=0;i<_columns.length;i++){
                    if (_columns[i].id==fieldname){
                        datatype=_columns[i].datatype;
                        break;
                    }
                }
                var retEditor={};
                switch (datatype)
                {
                    case "int":retEditor={type:"numberspinner",options:{required:false}};break;
                    case "bool":retEditor={type:"checkbox",options:{required:false}};break;
                    case "date":retEditor={type:"datebox",options:{required:false}};break;
                    default:retEditor={type:"textbox",options:{required:false}};
                }
                return retEditor;

            };
            _currentEditIndex=-1;
            _queryGrid.datagrid({
                border:false,
                fit:true,
                singleSelect:true,
                fitColumns: true,   
                columns:[[{field:'lbrackets',title:'左括号',width:80,halign:'center',editor:'text'},
                    {field:'fieldname',title:'字段',width:80,halign:'center',formatter:_fieldnameFormater,editor:{type:'combobox',options:{limitToList:'true',valueField:'id',textField:'text',
                        panelHeight:'auto',data:_columns,required:true,onHidePanel:_onChangeValueEditor}}},
                    {field:'compare',title:'比较符',width:80,halign:'center',formatter:_compareFormater,editor:{type:'combobox',options:{limitToList:'true',valueField:'id',textField:'text',data:_compareTer,panelHeight:'auto',required:true}}},
                    {field:'value',title:'值',width:80,halign:'center',editor:'text'},
                    {field:'rbrackets',title:'右括号',width:80,halign:'center',editor:'text'},
                    {field:'relation',title:'逻辑关系',width:80,halign:'center',formatter:_relationFormater,editor:{type:'combobox',options:{valueField:'id',textField:'text',panelHeight:'auto',data:_whereRelation}}},
                ]],
                onBeginEdit:function(index,row){

                },
                onClickRow:function(rowIndex){
                    if (rowIndex!==_currentEditIndex){
                        _queryGrid.datagrid("endEdit",_currentEditIndex);
                        var arow=_queryGrid.datagrid("getSelected");
                        if (arow)
                        {
                            _queryGrid.datagrid("removeEditor","value");
                            var aeditor=_getColumEditor(arow.fieldname);
                            _queryGrid.datagrid("addEditor",[{field:'value',editor:aeditor}]);
                        }
                        _queryGrid.datagrid("beginEdit",rowIndex).datagrid("selectRow",rowIndex);
                    }
                    _currentEditIndex=rowIndex;
                },
                toolbar:[
                    {text:'增加条件',iconCls:'icon-add',
                        handler:function(){
                            if (_currentEditIndex>=0){_queryGrid.datagrid("endEdit",_currentEditIndex);}
                             _queryGrid.datagrid("appendRow",{fieldname:_defaultFieldName,compare:'eq'});
                             _currentEditIndex=_queryGrid.datagrid("getRows").length-1;
                             var aeditor=_getColumEditor(_defaultFieldName);
                             _queryGrid.datagrid("addEditor",[{field:'value',editor:aeditor}]).datagrid("beginEdit",_currentEditIndex).datagrid("selectRow",_currentEditIndex);
                        }
                    },
                    {text:'插入条件',iconCls:'icon-insert',
                        handler:function(){
                            if (_currentEditIndex>=0){_queryGrid.datagrid("endEdit",_currentEditIndex);}
                            _currentEditIndex=_currentEditIndex>=0?_currentEditIndex:0;
                            _queryGrid.datagrid("insertRow",{index:_currentEditIndex,row:{fieldname:_defaultFieldName,compare:'eq'}});
                            var aeditor=_getColumEditor(_defaultFieldName);
                            _queryGrid.datagrid("addEditor",[{field:'value',editor:aeditor}]).datagrid("beginEdit",_currentEditIndex).datagrid("selectRow",_currentEditIndex);
                        }
                    },
                    {text:'删除条件',iconCls:'icon-remove',
                        handler:function(){
                            if (_currentEditIndex>=0){
                                _queryGrid.datagrid("endEdit",_currentEditIndex);
                                _queryGrid.datagrid("deleteRow",_currentEditIndex);
                                var rowcount=_queryGrid.datagrid("getRows").length;
                                if (rowcount>0){
                                    _currentEditIndex=_currentEditIndex<rowcount?_currentEditIndex:_currentEditIndex-1;
                                    _queryGrid.datagrid("beginEdit",_currentEditIndex).datagrid("selectRow",_currentEditIndex);
//删除后要重新设置editor,否则字段值不同时,显示的还是上一次的editor
                                    _onChangeValueEditor();

                                }
                                else
                                {
                                    _currentEditIndex=-1;   
                                }   
                            }
                        }
                    },
                    {text:'清空条件',iconCls:'icon-clear',
                        handler:function(){
                            var rowcount=_queryGrid.datagrid("getRows").length;
                            for (vari=rowcount-1;i>=0;i--){
                                _queryGrid.datagrid('deleteRow',i); 
                            }
                            _currentEditIndex=-1;
                        }
                    }
                ]               
            });