gridFilter提供了defaultValue属性设置默认值,当选择数据为空时,用默认值过滤;与内置gridSelect组件的defaultLabel属性配合使用。

当内置gridSelect组件的multiselect属性为true是设置的默认值在第一次下拉时是没有被勾选的如果要默认勾选可以在内置gridSelect组件的onShowOption事件上实现

默认值应该在第一次下拉时默认勾选,当在下拉中自己手动选择值后应该默认勾选的是手动选择的,因此需要在model的构造函数中定义一个实例变量,this.first如

	var Model = function() {
		this.callParent();
		this.first = true;
	};

然后在onShowOption中通过判断和修改变量的值控制默认值的勾选,具体实现需要区分单值和多值

本案例中下拉区域展现的是option-data中sName的值,代码中需要用到这个关系,自己的关系需要修改代码的关系名

option

当默认值设置分为单值时:

gridFilter的defaultValue的设置如下:
single1
内置gridSelect的defaultLabel的设置如下:
single2
onShowOption事件中的实现如下:

	Model.prototype.gridSelect1ShowOption = function(event) {
		if(this.first){
			var defaultLabel = event.source._getDefaultLabel();//获取设置的默认值
			var optionData = event.source._getOptionData();//获取内置gridSelect下拉展示数据区域option设置的data
			var grid = event.source.grid;//获取内置gridSelect中的grid
			var rows = optionData.find([ 'sName' ], [defaultLabel]);//在optionData中查找关系sName的值为默认值的行
			if (rows.length > 0) {
				//遍历查找到的行,调用grid的setRowChecked方法设置多选选中
				for (var i = 0; i < rows.length; i++) {
					var rowid = rows[i].getID();
					setTimeout(function() {
						grid.setRowChecked(rowid, true);
					}, 5);
				}
			}	 
		}
		this.first = false;

	};

当默认值设置分为多值时:

gridFilter的defaultValue的设置如下:
mulit1
内置gridSelect的defaultLabel的设置如下:
mulit2
onShowOption事件中的实现如下:

	Model.prototype.gridSelect1ShowOption = function(event) {
		if(this.first){
			var defaultLabel = event.source._getDefaultLabel();//获取设置的默认值
			var optionData = event.source._getOptionData();//获取内置gridSelect下拉展示数据区域option设置的data
			var grid = event.source.grid;//获取内置gridSelect中的grid
			var defaultsLabel = defaultLabel.split(",");//分隔默认值获取设置的每一个值
			for(var i = 0;i<defaultsLabel.length;i++){
				 //遍历optionData查找关系sName的值为默认值每一个值的行,调用grid的setRowChecked方法设置多选选中
				 optionData.each(function(param){
				 if(param.row.val('sName') == defaultsLabel[i]){
					 var rowid = param.row.getID();
					setTimeout(function() {
						grid.setRowChecked(rowid, true);
					}, 5);
				 }
			 });
			 }
			 
		 }
		 this.first = false;

	};

设置多值时需要注意平台的默认过滤没有处理,因此需要自己在gridFilter的onFilter事件中拼接filter,具体实现如下:

	Model.prototype.gridFilter1Filter = function(event) {
		var gridFilter1 = event.source;
		var filterData = gridFilter1.getFilterData();//获取gridFilter过滤数据的data
		var relation = filterData.defCols[gridFilter1.filterCol].relation;//获取过滤数据中要过滤的列
		var values = gridFilter1.selectedValue.get() || gridFilter1.getDefaultValue();//获取选择的值或者默认值
		if (!values || $.trim(values) === "") {
			return "";
		}
		if (typeof (values) == "string") {
			values = values.split(",");
		}
		var filters = [];
		//遍历获取的值拼接列的过滤条件
		$.each(values, function(i, value) {
			value = value.replace(/'/g, "''");
			filters.push(relation + "='" + value + "'");
		});
		//给过滤数据设置filter
		filterData.setFilter("gridFilter1", "(" + filters.join(") OR (") + ")");
		if (gridFilter1.autoRefresh) {
			filterData.refreshData({
				"async" : true
			});
		}
	};