前阵子由于业务需要,要对过滤栏进行一些操作,但是由于datatable对其封装了,所以很郁闷*****
后来问了frankzhang之后,然后自己进行了一些试验后,终于解决了对过滤栏的扩展操作
其实datatable的过滤栏也跟一个dataset绑定,为了便于描述,我们将过滤栏绑定的datase美其名曰"过滤栏dataset",datatable绑定的dataset称为"源dataset"
"过滤栏dataset"与"源dataset"在结构上是一致的.
能过如下方法可以获得"过滤栏dataset",
//通过"源dataset"中的一个唯一的字段名(区别于同一个view中的其它dataset)来得到过滤栏dataset
function getQDataset(field){
var array = listDatasets();
for(var i = 0,j = array.length;i < j;i++){
if(/^__control_/.test(array[i])){
var dataset = getDataset(array[i]);
if(dataset.getField(field)){
return dataset;
}
}
}
return null;
}
以下方法是我改写的,可以直接调用这个方法,就可以调用过滤栏上按回车的方法。
//执行过滤的方法,field是dataset中唯一所有的字段名,dataset是源dataset名,fieltNames是要过滤的字段名的集合
function doFilterBarQuery(field,dataset,fieltNames){
var params = dataset.parameters();
var conditionDataset = getQDataset(field);
if(conditionDataset){
var fieldCount = conditionDataset.getFieldCount();
for(var i = 0;i < fieldCount;i++){
var field = conditionDataset.getField(i);
var fieldName = field.getName();
var value = conditionDataset.getValue(fieldName);
//如果这个字段要求过滤,则传入一个参数,参数名与字段名相同,后台要对这些参数进行处理(进行sql条件的拼接)。
if(fieltNames.indexOf(fieldName)>=0){
params.setValue(fieldName,value);
}
}
dataset.flushData();
}
}