@Vamsi, with your initial test case from
the post #3 please try to add this script on the page.
<script>
Ext.grid.filters.filter.List.override({
enableEmptyOption: true,
emptyValue: "nullUndefinedEmptyString",
emptyText: "[Empty]",
getOptionsFromStore: function (store) {
var me = this,
options = me.callParent(arguments),
dataIndex = me.dataIndex,
labelIndex = me.labelIndex,
indexesToRemove = [],
i, len;
if (me.enableEmptyOption) {
// Clean up the options first
Ext.Array.each(options, function(option, index) {
if (Ext.isEmpty(option[0])) {
indexesToRemove.push(index);
}
});
for (i = indexesToRemove.length - 1; i > -1; i--) {
Ext.Array.removeAt(options, indexesToRemove[i]);
}
Ext.Array.insert(options, 0, [ [me.emptyValue, me.emptyText] ]);
}
return options;
},
getFilterConfig: function (config, key) {
var listFilter = this,
config = listFilter.callParent(arguments);
if (listFilter.enableEmptyOption) {
delete config.operator;
config.getFilterFn = function() {
return function (candidate) {
var v = this._filterValue;
if (Ext.Array.contains(v, listFilter.emptyValue)) {
v.push(null, undefined, "");
Ext.Array.remove(v, listFilter.emptyValue);
}
return Ext.Array.contains(v, this.getCandidateValue(candidate, v));
}
}
}
return config;
}
});
</script>