2017-10-19 5 views
1

TelerikUigridとimはserversideフィルタリングを使用しようとしています。私は非常に奇妙な問題があります。filterDescriptorsを適切にループできませんTelerikUi

グリッドの1つの列をフィルタリングすると、すべてが意図した通りに動作しますが、同時に2つ以上の列をフィルタリングすると、動作しません。

問題が発生します。私の2つのフィルタリングされた列は両方ともループバックできない単一のオブジェクトに保存されるため、次の例では2つの列のフィルタが2のカウントを持ちますがループできないため、オブジェクトを「分割」する。

フィルタに1つのオブジェクトがある場合は、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

フィルタが2つある場合、フィルタは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に変更して動作させる必要がありました –

関連する問題