私はWPFで小さなアプリケーションを開発しています。プロパティが に設定されているListBox
名前NameListBox
があるため、顧客名のリストが表示されます。名前は、、の 3 つの部分で構成されます。リストに顧客のフルネームを表示するためにコンバーターを使用しました。すべてが正常に機能します (全体像を把握するには、このレベルの詳細で十分だと思います)。ItemsSource
DataView
FirstName
MiddleName
LastName
ここで、リストが、 namedに入力されたテキストを含む顧客名のみを表示するように、 でフィルタリングを有効にしたいと考えています。NameListBox
TextBox
CustomerNameSearchBox
インターネットで検索して、 ~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
. しかし、最初の行のコメントを外す (そして 2 番目の行をコメント アウトする) と、機能しません!!!! 実行時にその行で例外がスローされ、"The expression contains undefined function call COALESCE()."
!!!!
現時点ISNULL
では目的を果たしていますが、この例外が発生する理由を知りたいと思っています。しかも、こんな簡単なことでも
(...).RowFilter = @"COALESCE(FirstName,'')";
うまくいかないようです!!!! (これは単なる構文上の問題以上のものを意味します)
誰でもこの動作について説明できますか?? 前もって感謝します。
タグ : WPF SQL COALESCE ISNULL RowFilter