2009-09-05 77 views
0

我正在WPF中开发一个小应用程序。我有一个名为NameListBoxListBox,其ItemsSource属性设置为DataView,因此显示客户名称列表。名称由3部分组成:FirstName,MiddleNameLastName。我已使用转换器在列表中显示客户的全名。一切工作正常(我认为这个级别的细节足以获得整体图片)。为什么COALESCE不能使用RowFilter?

现在,我想在这样的NameListBox使过滤该列表应该只displat包含在名为CustomerNameSearchBoxTextBox输入文本的客户名称。

通过在互联网上搜索我遇到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。但是,当我取消注释第一行(并注释掉第二行)时,它不起作用! 它在运行时抛出一个异常,说"The expression contains undefined function call COALESCE()." !!!!

虽然ISNULL服务我的目的在这一刻,我真的很想知道为什么会发生这种异常。此外,即使是一件简单的事情,如

(...).RowFilter = @"COALESCE(FirstName,'')"; 

似乎并没有工作! (这意味着它不仅仅是一个语法问题)

任何人都可以解释我的这种行为? 在此先感谢。

标签:WPF SQL COALESCE ISNULL的RowFilter

+0

是表由什么列一个有限的范围内? – 2009-09-05 18:01:50

回答