DataView.Rowfilter在Loop中有多个过滤器

时间:2012-10-25 07:34:46

标签: c# wpf dataview rowfilter

DataView DV = DataTable.AsDataView();
for(int i=0; i<ConditonQueue.Count; i++)
{
     DV.RowFilter = ConditonQueue.ElementAt(i);
}

此后循环DV仅针对ConditionQueue中的最后一个元素进行过滤。如何在应用队列的所有过滤条件时获得DVConditonQueue.ElementAt(i)返回一个字符串,它是RowFilter的有效表达式。

合并所有ConditonQueue.ElementAt(i)在我的方案中无济于事。我想每次都申请RowFilter

因为我需要在每个RowFilter后进行一些计算。 AND所有条件都无济于事。

每次在循环中应用DV时,还有其他方法可以重新创建RowFilter吗?

2 个答案:

答案 0 :(得分:2)

很多假设,因为你的问题不明确。试试这个

DataView DV = DataTable.AsDataView();

string[] filter = new string[ConditonQueue.Count];
for(int i=0; i<ConditonQueue.Count; i++)
{
     filter[i] =  ConditonQueue.ElementAt(i).ToString();
}

DV.RowFilter = String.Join(" AND ", filter); // filter1 AND filter2 AND ... AND filterN

我不喜欢你的做法,很遗憾地说,但我认为你必须更新DV,以便将新过滤器应用于已经过滤的视图

for(int i=0; i<ConditonQueue.Count; i++)
{
     DV.RowFilter = ConditonQueue.ElementAt(i);
     DV = DV.ToTable().AsDataView();
}

答案 1 :(得分:1)

RowFilter会自动应用于数据视图中的所有行。正确的用法是将队列的所有条件组合成适当的字符串表达式,并将该表达式传递给RowFilter属性。

另请参阅http://www.csharp-examples.net/dataview-rowfilter/以获取RowFilter语法的示例。