如何使用DataView.RowFilter实现多输入XOR?

时间:2014-05-02 22:22:34

标签: c# dataview

我知道2输入XOR可以通过使用它们的NAND和NOR等效来完成,但是当可能的输入数量未知时,这种方法很快就会变得复杂。有更简单的方法吗?

一个例子是有3个条件,每个条件都应用于DataView的不同列。如何在只有奇数个条件为真的行中过滤DataView?

1 个答案:

答案 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')