DataView DV = DataTable.AsDataView();
for(int i=0; i<ConditonQueue.Count; i++)
{
DV.RowFilter = ConditonQueue.ElementAt(i);
}
此后循环DV
仅针对ConditionQueue
中的最后一个元素进行过滤。如何在应用队列的所有过滤条件时获得DV
?
ConditonQueue.ElementAt(i)
返回一个字符串,它是RowFilter
的有效表达式。
合并所有ConditonQueue.ElementAt(i)
在我的方案中无济于事。我想每次都申请RowFilter
。
因为我需要在每个RowFilter
后进行一些计算。 AND
所有条件都无济于事。
每次在循环中应用DV
时,还有其他方法可以重新创建RowFilter
吗?
答案 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语法的示例。