我正在WPF中开发一个小应用程序。我有一个名为ListBox的NameListBox,它的ItemsSource属性被设置为DataView,因此显示了一个客户名称列表。名称由三个部分组成:FirstName、MiddleName和LastName。我使用了一个转换器来显示列表中客户的全名。一切都很好(我认为这一级别的细节足以得到总体情况)。
现在,我希望在上启用NameListBox过滤,这样列表应该只显示那些包含在名为CustomerNameSearchBox的TextBox中输入的文本的客户名称。
通过在互联网上搜索,我偶然发现了RowFilter属性的DataView -并且也玩了一点。现在当我试着
private void CustomerNameSearchBox_TextChanged(object sender, TextChangedEventArgs e)
{
  //((DataView)NameListBox.ItemsSource).RowFilter = @"COALESCE(FirstName+' '+MiddleName+' '+LastName, COALESCE(FirstName+' '+LastName, COALESCE(FirstName, LastName))) LIKE '%" + CustomerNameSearchBox.Text + @"%'";
    ((DataView)NameListBox.ItemsSource).RowFilter = @"ISNULL(FirstName+' '+MiddleName+' '+LastName, ISNULL(FirstName+' '+LastName, ISNULL(FirstName, LastName))) LIKE '%" + CustomerNameSearchBox.Text + @"%'";
}给了我预期的结果,。但是等等..。这里有奇怪的东西!
正如您所看到的,这两行的结构都是相同的--只有COALESCE而不是ISNULL。但是,当我取消注释第一行(并注释掉第二行)时,它不起作用!,它在运行时抛出一个异常,在运行时说是
虽然ISNULL在这一刻达到了我的目的,但我真的很想知道为什么会发生这种异常。而且,即使是一件简单的事情
(...).RowFilter = @"COALESCE(FirstName,'')";似乎不起作用!(这意味着它不仅仅是一个句法问题)
有人能解释一下我的这种行为吗?提前谢谢。
标签: WPF ISNULL RowFilter
发布于 2010-03-11 16:43:57
Rowfilter本身不是SQL,功能范围有限
MSDN:表达式语法
https://stackoverflow.com/questions/1383871
复制相似问题