現在、ユーザは、datagridviewの値をフィルタリングすることができます。カラム名、オペランド、および値を選択できます。DataGridviewのフィルタの既存のリストに "Contains"フィルタを追加します。
カラム名、オペランドおよび値は、ColumnFilterインスタンスに保存されます。ユーザは、複数のフィルタをグリッドに設定することもできます。実際のフィルタリングは次のように機能します。
public void ApplyFilters(List<ColumnFilter> filters)
{
BindingSource bs = (BindingSource)dataGridView1.DataSource;
bs.Filter = string.Join(" AND ", filters.Select(filter=>string.Format("{0} {1} '{2}'", filter.ColumnName, filter.Operand, filter.Value)).ToArray());
dataGridView1.DataSource = bs;
}
これは、適用したいフィルタの数に限りません。利用可能なオペランドの現在のリストは{=、>、<、> =、< =、<>}です。しかし、私はもう一つのオペランド、Containsを追加したいと思います。したがって、誰かが文字列を検索したい場合は、このオペランドを使って検索できます。含まれてためにフィルタリングする
1つの簡単な方法は、次のとおりです。
var dt = (DataTable)dataGridView1.DataSource;
dt.DefaultView.RowFilter = string.Format("Column like '%{0}%'", txtBoxSearch.Text.Trim().Replace("'", "''"));
dataGridView1.DataSource = dt;
これは一例です。 Containsオペランドを満たすために、私のApplyFilters関数を十分に汎用的にするにはどうすればよいですか?
の内側にその式を入れて、あなたは、データソースとして代わりに 'DataTable'のオブジェクトの厳密に型指定されたコレクションを使用することができます?その後、LINQを使用してフィルタリングすることができます。 –