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;
}
}
]
});