我正在WPF中开发一个小应用程序。我有ListBox
名为NameListBox
,其ItemsSource
属性设置为DataView
,因此会显示客户名称列表。该名称由3部分组成:FirstName
,MiddleName
和LastName
。我使用转换器在列表中显示客户的全名。一切正常(我认为这个细节水平足以得到整体情况)。
现在,我想在NameListBox
上启用过滤,以便列表只应取消包含TextBox
中CustomerNameSearchBox
中输入的文字的客户名称}。
通过在互联网上搜索,我遇到了RowFilter
DataView
的{{1}}财产 - 并且还玩了一点。现在我尝试了
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