0

私はWPFで小さなアプリケーションを開発しています。プロパティが に設定されているListBox名前NameListBoxがあるため、顧客名のリストが表示されます。名前は、、の 3 つの部分で構成されます。リストに顧客のフルネームを表示するためにコンバーターを使用しました。すべてが正常に機能します (全体像を把握するには、このレベルの詳細で十分だと思います)。ItemsSourceDataViewFirstNameMiddleNameLastName

ここで、リストが、 namedに入力されたテキストを含む顧客名のみを表示するように、 でフィルタリングを有効にしたいと考えています。NameListBoxTextBoxCustomerNameSearchBox

インターネットで検索して、 ~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

4

1 に答える 1

1

Rowfilter は SQL そのものではなく、機能の範囲が限られています。

MSDN: 式の構文

于 2010-03-11T16:43:57.537 に答える