2016-06-28 28 views
0

ユーザーが入力したフィルタのリストがあり、DataGridViewに適用したいと思います。 DataGridViewにすべてのフィルタを適用する最良の方法は何ですか? ColumnFiltersの私のリストは基本的に、Column name, operand (=, >, < etc.)とユーザ入力の値に分割された文字列のリストです。C#データグリッドビューに複数のフィルタを適用する

public void ApplyFilters(List<ColumnFilter> filters) 
{ 
    if (filters.Count > 0)) 
    { 
     foreach (ColumnFilter filter in filters) 
     { 
      BindingSource bs = (BindingSource)dataGridView1.DataSource; 
      bs.Filter = string.Format("{0} {1} '{2}'", filter.ColumnName, filter.Operand, filter.Value); 
      dataGridView1.DataSource = bs; 
     } 
    } 
} 

答えて

1

のBindingSource FilterANDをサポートしていますので、フィルターのようなものと組み合わせることができる:

bs.Filter = string.Join(" AND ", filters.Select(filter=>string.Format("{0} {1} '{2}'", filter.ColumnName, filter.Operand, filter.Value).ToArray()); 

(注:上記を使用したときのforeachが必要とされていない)

+0

同じことができます1つのフィルターで作業するようにしましたか?それ以外の場合は、単純なチェックを入れても構いませんが、すべてのロジックが1行に収まっていれば素晴らしいでしょう。 – Iason

+0

実際に.NET 3.5を使用しているため、このコンパイルで問題が発生する可能性があります。 – Iason

+0

これは1つのフィルタでのみ動作します。それはstring.joinの美しさです。列挙に項目が1つしかない場合は、区切り文字(AND)は追加されません。 –

関連する問題