2017-10-19 15 views
1

그래서 TelerikUigrid를 사용하고 있으며 서버 측 필터링을 사용하려고하는데 매우 이상한 문제가 있습니다.filterDescriptors를 올바르게 루프 할 수 없습니다. TelerikUi

그리드의 1 열을 필터 할 때 의도 한대로 모든 것이 작동하지만 동시에 2 개 이상의 열을 필터링 할 때 작동하지 않습니다.

내 2 필터링 된 열 둘 다 루프가 가능하지 않은 단일 개체에 저장되기 때문에이 문제가 발생합니다. 아래 예제에서는 필터를 2 열로 설정하면 필터가 2로 계산되지만 반복 가능하지 않으므로 수정할 수 없습니다. 객체를 "분할"합니다.

필터에 하나의 개체가있는 경우 선택할 수있는 개체가 1 개이기 때문에 잘 작동하지만 둘 이상의 개체가있을 때 Visual Studio에서 어느 개체를 선택해야할지 모르기 때문에 변수가 null을 대신합니다.

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

을! 아주 많이. 하지만 나는 (outerCompositeFilter.FilterDescriptors [j]가 FilterDescriptor 인 경우) == false) { // } } 을 false 대신 true로 변경해야 작동합니다. –