2017-10-19 105 views
1

所以我有一个TelerikUigrid和即时尝试使用serverside过滤,我有一个非常奇怪的问题。无法循环过滤器描述符正确TelerikUi

所以,当我筛选1网格的一个单一的一切按预期工作,但当我同时过滤2列或更多的列时,我遇到它不起作用。

问题发生的原因是我的2个过滤列都保存在一个单独的对象,这是不可循环的,所以在下面的例子中,如果我过滤2列过滤器将有2的计数,但不是可循环的,所以我不能“拆分”对象。

因此,当过滤器中有一个对象时它工作正常,因为只有1个可供选择,但是当有2个或更多Visual Studio不知道应该选择哪一个时,我的变量会重新发送空值。

if (request.filter != null && request.filter.Any()) 
{ 
    foreach(var filter in request.filter) 
    { 
     var filterDescriptor = filter as FilterDescriptor; 
     if (filterDescriptor.Value != null) 
     { 
     //Code 

     } 
} 

回答

1

如果你有两个过滤器,然后在过滤器就会出现,称为CompositeFilterDescriptor的对象。

你需要这样的事:

for (var i = 0; i < filters.Count; i++) 
{ 
    if (filters[i] is CompositeFilterDescriptor) 
    { 
     var outerCompositeFilter = (CompositeFilterDescriptor)filters[i]; 

     for (var j = 0; j < outerCompositeFilter.FilterDescriptors.Count; j++) 
     { 
      if (outerCompositeFilter.FilterDescriptors[j] is FilterDescriptor) 
      { 
       // Do something with this filter 
      } 
     } 
    } 

    if (filters[i] is FilterDescriptor) 
    { 
     // Only 1 filter - do something with it 
    } 
} 
+0

它的工作! ty非常。但我不得不改变if((outerCompositeFilter.FilterDescriptors [j]是FilterDescriptor)== false) { //用这个过滤器做些什么 } 为true而不是false来让它工作 –