Я использую приведенный ниже код, чтобы позволить пользователю фильтровать DataTable
путем поиска конкретной строки, которая может находиться в любом столбце или любой строке. Код должен удалить строки, где значение не существует, так как DataTable
экспортируется после операции.
Проблема с этим кодом состоит из двух частей: 1) он очень медленный для больших таблиц и 2) он может найти только полное содержимое ячейки (т. Е. Если в столбце «Имя» есть строка, в которой находится значение Если «Andrew», то пользователь должен иметь возможность искать «drew» или «and» и получать этот результат; сейчас он вернет эту строку, если будет искать «Andrew»).
if(!String.IsNullOrEmpty(combo1Text) || !String.IsNullOrEmpty(combo2Text)
&& !String.IsNullOrEmpty(search1Text) && !search1Text.Contains("Type your search for" + comboText + "here"))
{
for (int i = tab1table.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = tab1table.Rows[i];
if (!dr.ItemArray.Contains(search1Text))
{
dr.Delete();
tab1table.AcceptChanges();
}
percentprogress++;
worker.ReportProgress(percentprogress);
}
}
Каков наилучший способ сделать фильтрацию, которую я хочу (и сделать это эффективно, чтобы она не просто проходила через все)?