我正在 WPF 中开发一个小型应用程序。我有一个ListBox
名称NameListBox
,其ItemsSource
属性设置为 a DataView
,因此显示客户名称列表。名称由 3 部分组成:FirstName
、MiddleName
和LastName
。我使用转换器在列表中显示客户的全名。一切正常(我认为这种细节水平足以了解整体情况)。
现在我想启用过滤,NameListBox
这样列表应该只显示那些包含在TextBox
命名中输入的文本的客户名称CustomerNameSearchBox
。
通过在 Internet 上搜索,我发现了 - 的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