Mache doch einfach noch eine Abfrage und setzte dann die DataSource der Abfrage. Die Frage: Wie sieht deine Datenquelle aus? Ich nehme für solche Zwecke immer eine Klasse und nutze die Generics: In einem aktuellen Fall habe ich folgendes gemacht:
Gegeben:
public class DbFeld
{
public string Name { get; private set; }
public string Beschreibung { get; private set; }
public string Bereich { get; private set; }
public string Mapping { get; set; }
public Produkt Produkt { get; set; }
}Über ein Repository, dass mir die Daten aus einer XML einliest habe ich dann eine List von Felder, also List<DbField>.
Auf diese Datenquelle führe ich dann den Filter per LINQ durch und setze die Datenquelle neu.
Mein Initilaisierungscode zum Laden der Datenquelle sieht initial so aus:
public ConverterForm (FieldRepository<DbField> repository)
{
InitializeComponent ();
InitGrid ( dataGridView );
_dbFelder = repository.Load();
dataGridView.DataSource = _dbFelder;
}Und zum Filtern in deinem ClickEventHanlder dann folgender Code:
Filter( x => x.Name == txtName.Text );
der dann diese ausführt:
protected void Filter(Predicate<DbField> predicate )
{
dataGridView.DataSource = from feld in _dbFelder
where predicate(feld)
select feld;
}Bei einem Reset des Filters kannst du dann einfach die alte Datenquelle wieder herstellen:
dataGridView.DataSource = __dbFelder
Wenn du das ganze noch schöner machen willst kannst du dir dafür einen Controller bauen den du generisch für jedes Grid und jede Datenquelle einsetzen kannst, die IEnumerable<T> unterstützt.
der ungefähr so aussiet:
public class DataGridViewFilterController<TDataRow>
{
DataGridView dataGridView;
IEnumerable<TDataRow> dataSource;
public DataGridViewFilterController ( DataGridView dataGridView, IEnumerable<TDataRow> dataSource )
{
this.dataSource = dataSource;
this.dataGridView = dataGridView;
}
public void Filter ( Predicate<TDataRow> predicate )
{
dataGridView.DataSource = from dataRow in dataSource
where predicate ( dataRow )
select dataRow;
}
public void Reset ()
{
dataGridView.DataSource = dataSource;
}
}