dorado过滤栏扩展

来源:互联网 发布:网络弊大于利攻辩问题 编辑:程序博客网 时间:2024/06/07 08:20

前阵子由于业务需要,要对过滤栏进行一些操作,但是由于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();
   }
 }

原创粉丝点击