private void FilterGrid(string filter)
{
var wingrid = this.Grid as DataGridView;
if (wingrid == null) return;
if (wingrid.Rows.Count == 0) return;
wingrid.CurrentCell = null;
var parts = filter.Split(new char[] { ' ' });
this.SetAlternatingStyle(wingrid, null);
var somethingHidden = false;
var somethingVisible = false;
var searchColumns = GetSearchColumnIndexes(wingrid);
var searchCells = new List<string>();
var subTable = this._originalView.Table.Clone();
foreach (DataRow row in this._originalView.Table.Rows)
{
this.DoEvents();
if (this._cancelCurrentFilter)
break;
var hits = 0;
foreach (var part in parts)
{
searchCells.Clear();
foreach (var i in searchColumns)
{
var cell = row[i];
var v = cell as String;
if (v == null || v.Length == 0) continue;
searchCells.Add(v);
}
var searchRow = String.Join("\n", searchCells);
if (searchRow.ToLower().Contains(part))
hits++;
}
if (hits == parts.Length)
{
subTable.ImportRow(row);
somethingVisible = true;
}
else
somethingHidden = true;
}
this.SetNewDataSource(subTable, wingrid);
this.SetupFilteredAlternatingRowColors(wingrid, somethingVisible, somethingHidden);
}