我正在WPF中开发一个小应用程序。我有一个名为NameListBox
的ListBox
,其ItemsSource
属性设置为DataView
,因此显示客户名称列表。名称由3部分组成:FirstName
,MiddleName
和LastName
。我已使用转换器在列表中显示客户的全名。一切工作正常(我认为这个级别的细节足以获得整体图片)。为什么COALESCE不能使用RowFilter?
现在,我想在这样的NameListBox
使过滤该列表应该只displat包含在名为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
。但是,当我取消注释第一行(并注释掉第二行)时,它不起作用! 它在运行时抛出一个异常,说"The expression contains undefined function call COALESCE()."
!!!!
虽然ISNULL
服务我的目的在这一刻,我真的很想知道为什么会发生这种异常。此外,即使是一件简单的事情,如
(...).RowFilter = @"COALESCE(FirstName,'')";
似乎并没有工作! (这意味着它不仅仅是一个语法问题)
任何人都可以解释我的这种行为? 在此先感谢。
标签:WPF SQL COALESCE ISNULL的RowFilter
是表由什么列一个有限的范围内? – 2009-09-05 18:01:50