我知道2输入XOR可以通过使用它们的NAND和NOR等效来完成,但是当可能的输入数量未知时,这种方法很快就会变得复杂。有更简单的方法吗?
一个例子是有3个条件,每个条件都应用于DataView的不同列。如何在只有奇数个条件为真的行中过滤DataView?
答案 0 :(得分:0)
以下C#
演示代码演示了如何使用内置的 if-then-else Xor
函数实现三输入IIF()
:
private string xorViaIIF(string a, string b, string c)
{
return string.Format("IIF(IIF({0}, not ({1}), {1}), not ({2}), {2})", a, b, c);
}
private void filterDemo()
{
// http://stackoverflow.com/questions/5843537/filtering-datagridview-without-changing-datasource
DataView dv = (this.dataGridView1.DataSource as DataTable).DefaultView;
if (dv.RowFilter == "")
{
dv.RowFilter = xorViaIIF("[A] = 'A1'", "[B] = 'B2'", "[C] = 'C3'");
}
else
{
dv.RowFilter = "";
}
}
此示例的结果过滤器表达式看起来并不简单:
IIF(IIF([A] = 'A1', not ([B] = 'B2'), [B] = 'B2'), not ([C] = 'C3'), [C] = 'C3')