Google が検索で行うようなことをしたい: ユーザーが - または * のような特別な文字を書くと、結果がフィルタリングされます。
私が今持っているもの: オブジェクトのName
プロパティをContains
メソッドでフィルタリングするフィルターと、2 つの特殊文字:
入力したテキストを含まない名前のみを残すため -
オブジェクトの別のプロパティを検索するため (私の場合は
Units
) *
わかりました、必要なのは上記のロジックを組み合わせて、最初に「-」または「*」でフィルタリングし、次に入力して残りの結果をフィルタリングし続けることができるようにすることです。
それはすべて私が考えるロジックですが、複雑になってきており、少し助けが必要になるかもしれません.
item.View.Filter = delegate(object o)
{
//Lógica de filtrado
if ((item.FilterText.Length > 0) && ((item.FilterText[0] == '*') || (item.FilterText[0] == '-')))
{
//If the first char is *
if ((item.FilterText[0] == '*')
&& (((MyObject)o).Units[0].ToString().ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))
|| ((MyObject)o).Units[1].ToString().ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))))
{
return true;
}
//If the first char is -
if ((item.FilterText[0] == '-')
&& (!((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))
|| !((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))))
{
return true;
}
}
else
{
if (((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture)))
{
return true;
}
}
return false;
};