2009-09-05 76 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

回答