我正在使用下面的代码,允许用户通过搜索可能在任何列或任何行中的特定字符串来过滤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);
}
}
进行我想要的过滤的最佳方法是什么(并高效地进行过滤,以使它不仅遍历所有内容)?
答案 0 :(得分:2)
要搜索单元格内容是否包含搜索到的文本,请尝试以下代码:
for (int i = tab1table.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = tab1table.Rows[i];
if (!dr.ItemArray.Any(x=>(x as string).Contains(search1Text)))
{
dr.Delete();
}
percentprogress++;
worker.ReportProgress(percentprogress);
}
tab1table.AcceptChanges();
如果您有任何非字符串类型的列,则应将(x as string)
替换为x.ToString()