whole_func_string: function(field) {
  		if (!field.isValid()) return;
  		var me = this,
  			grid = me.grid,
  			column = me.columns.get(field.dataIndex),
  			newVal = (grid.store.remoteFilter ? field.getSubmitValue() : field.getValue());
  
  		if (Ext.isArray(newVal) && newVal.length == 0) {
  			newVal = '';
  		}
  		var myIndex = -1;
  		Ext.each(me.filterArray, function(item2, index, allItems) {
  			if(item2.property === column.dataIndex) {
  				myIndex = index;
  			}
  		});
  		if(myIndex != -1) {
  			me.filterArray.splice(myIndex, 1);
  		}
  		if(!Ext.isEmpty(newVal)) {
  			if (!grid.store.remoteFilter) {
  				var operator = field.operator || column.filter.operator,
  					filterFn;
  				switch(operator) {
  					case 'eq':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() == Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) == (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'gte':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() >= Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) >= (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'lte':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() <= Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) <= (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'ne':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() != Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) != (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'like':
  						filterFn = function(item) {
  							var re = new RegExp(newVal, 'i');
  							return re.test(item.get(column.dataIndex));
  						};
  						break;
  					case 'in':
  						filterFn = function(item) {
  							var re = new RegExp('^' + newVal.join('|') + '$', 'i');
  							return re.test((Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)));
  						};
  						break;
  				}
  				me.filterArray.push(Ext.create('Ext.util.Filter', {
  					property: column.dataIndex,
  					filterFn: filterFn,
  					me: me
  				}));
  			} else {
  				me.filterArray.push(Ext.create('Ext.util.Filter', {
  					property: column.dataIndex,
  					value: newVal,
  					type: column.filter.type,
  					operator: (field.operator || column.filter.operator)
  				}));
  			}
  			if(!column.getEl().hasCls(me.columnFilteredCls)) {
  				column.getEl().addCls(me.columnFilteredCls);
  			}
  		} else {
  			if(column.getEl().hasCls(me.columnFilteredCls)) {
  				column.getEl().removeCls(me.columnFilteredCls);
  			}
  		}
  		grid.store.currentPage = 1;
  		if(me.filterArray.length > 0) {
  			if (!grid.store.remoteFilter) grid.store.clearFilter();
  			grid.store.filters.clear();
  			grid.store.filter(me.filterArray);
  			if (me.clearAllEl) {
  				me.clearAllEl.show({duration: 1000});
  			}
  		} else {
  			grid.store.clearFilter();
  			if (me.clearAllEl) {
  				me.clearAllEl.hide({duration: 1000});
  			}
  		}
  		if (!grid.store.remoteFilter && me.autoUpdateAutoStores) {
  			me.fillAutoStores();
  		}
  		me.fireEvent('filterupdated', me.filterArray);
  	}
func_code_string: function(field) {
  		if (!field.isValid()) return;
  		var me = this,
  			grid = me.grid,
  			column = me.columns.get(field.dataIndex),
  			newVal = (grid.store.remoteFilter ? field.getSubmitValue() : field.getValue());
  
  		if (Ext.isArray(newVal) && newVal.length == 0) {
  			newVal = '';
  		}
  		var myIndex = -1;
  		Ext.each(me.filterArray, function(item2, index, allItems) {
  			if(item2.property === column.dataIndex) {
  				myIndex = index;
  			}
  		});
  		if(myIndex != -1) {
  			me.filterArray.splice(myIndex, 1);
  		}
  		if(!Ext.isEmpty(newVal)) {
  			if (!grid.store.remoteFilter) {
  				var operator = field.operator || column.filter.operator,
  					filterFn;
  				switch(operator) {
  					case 'eq':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() == Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) == (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'gte':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() >= Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) >= (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'lte':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() <= Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) <= (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'ne':
  						filterFn = function(item) {
  							if (column.filter.type == 'date') {
  								return Ext.Date.clearTime(item.get(column.dataIndex), true).getTime() != Ext.Date.clearTime(newVal, true).getTime();
  							} else {
  								return (Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)) != (Ext.isEmpty(newVal) ? me.autoStoresNullValue : newVal);
  							}
  						};
  						break;
  					case 'like':
  						filterFn = function(item) {
  							var re = new RegExp(newVal, 'i');
  							return re.test(item.get(column.dataIndex));
  						};
  						break;
  					case 'in':
  						filterFn = function(item) {
  							var re = new RegExp('^' + newVal.join('|') + '$', 'i');
  							return re.test((Ext.isEmpty(item.get(column.dataIndex)) ? me.autoStoresNullValue : item.get(column.dataIndex)));
  						};
  						break;
  				}
  				me.filterArray.push(Ext.create('Ext.util.Filter', {
  					property: column.dataIndex,
  					filterFn: filterFn,
  					me: me
  				}));
  			} else {
  				me.filterArray.push(Ext.create('Ext.util.Filter', {
  					property: column.dataIndex,
  					value: newVal,
  					type: column.filter.type,
  					operator: (field.operator || column.filter.operator)
  				}));
  			}
  			if(!column.getEl().hasCls(me.columnFilteredCls)) {
  				column.getEl().addCls(me.columnFilteredCls);
  			}
  		} else {
  			if(column.getEl().hasCls(me.columnFilteredCls)) {
  				column.getEl().removeCls(me.columnFilteredCls);
  			}
  		}
  		grid.store.currentPage = 1;
  		if(me.filterArray.length > 0) {
  			if (!grid.store.remoteFilter) grid.store.clearFilter();
  			grid.store.filters.clear();
  			grid.store.filter(me.filterArray);
  			if (me.clearAllEl) {
  				me.clearAllEl.show({duration: 1000});
  			}
  		} else {
  			grid.store.clearFilter();
  			if (me.clearAllEl) {
  				me.clearAllEl.hide({duration: 1000});
  			}
  		}
  		if (!grid.store.remoteFilter && me.autoUpdateAutoStores) {
  			me.fillAutoStores();
  		}
  		me.fireEvent('filterupdated', me.filterArray);
  	}
func_documentation_string: private