このトピックでは、カスタマイズする方法を示しFullTextSearchアクションの行動を。このアクションは、その収集データソースのための基準を設定することにより、現在のリストビューをフィルタリングします。基準によると、オブジェクトのプロパティは、エンドユーザーが入力した単語の組み合わせから個々の単語が含まれている必要があります。で、アクションの動作を変更する方法についてのいくつかの技術参照FilterController.FullTextFilterActionのメンバーの説明を。ここでは、これらの技術のいずれかを使用する方法について説明します。私たちは、現在のリスト表示のためのフィルタ基準を生成するために使用されるプロパティのカスタムリストを指定します。
このトピックのショーはどのようにフルテキスト検索操作の動作をカスタマイズします。これは、データ・ソースのセットのための条件を設定することにより、現在のリストビューをフィルタリングするように動作します。条件によっては、オブジェクトの属性は、エンドユーザーが単語の組み合わせを入力した単一の単語が含まれている必要があります。.FullTextFilterAction部材において、フィルタコントローラを記載した操作の動作を変更する方法についてのいくつかの技術を引用しました。ここでは、これらの技術のいずれかを使用する方法について説明します。私たちは、現在の属性のフィルタ条件のリストビューのカスタムリストを生成するために使用される指定します。
ヒントヒント
完全なサンプルプロジェクトは、DevExpress社のコード例のデータベースで利用可能でhttp://www.devexpress.com/example=E231
完全なサンプルプロジェクトは、コードサンプルデータベースDevExpress社で見つけることができますhttp://www.devexpress.com/example=E231
。
検索に使用されるプロパティのカスタムリストを指定するには、含まれているフィルターコントローラ、FullTextSearchアクションは、公開されFilterController.CustomGetFullTextSearchPropertiesのイベントを。このイベントを処理するために、我々は、新しい追加するビューコントローラを、そしてそのに加入Controller.Activatedのイベント。
カスタムリストの検索で使用する属性を指定するには、コントローラは、フィルタコントローラにフィルタ「全文検索」操作を含みが開示されています。このイベントを処理するために、我々は、新しいビューコントローラを追加し、そのコントローラに加入します。アクティブにイベントを。
でCustomGetFullTextSearchPropertiesのイベントハンドラに必要なプロパティのリストを割り当てるCustomGetFullTextSearchPropertiesEventArgs.Propertiesのパラメータ。また、設定CustomGetFullTextSearchPropertiesEventArgs.Handledにパラメータを真の他のプロパティがリストに追加されてはならないことを示すために、。この例では、Personクラスの唯一の「姓」プロパティを追加します。そこで、我々は唯一の人物リストビューのための私達のコントローラーがアクティブになります。MyFilterControllerを以下に示します。
「カスタム全文検索のプロパティ」イベントハンドラでは、任意の必要な属性のリストは、「カスタム全文検索属性イベント」パラメータに割り当てられました。また、真のパラメータセット「イベントのカスタム全文検索プロパティ」には、そのリストに追加のプロパティを追加しません示します。この例では、我々は唯一のPersonクラスの「名前」属性に追加されます。したがって、我々は人々のビューコントローラのリストを活性化させるだけだろう。「私のフィルターコントローラー」として、次のとおりです。
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してDevExpress.ExpressAppを。 使用してDevExpress.ExpressApp.SystemModuleを。 // ... 公共の 部分 クラスMyFilterController:のViewController { 公共MyFilterController(){ InitializeComponentの(); RegisterActions(部品) この .TargetObjectType = typeof演算(DevExpress.Persistent.BaseImpl.Person)。 } プライベート ボイド MyFilterController_Activated(オブジェクト送信者、のEventArgs電子){ FilterController standardFilterController= Frame.GetController <FilterController> (); もし(!standardFilterController = ヌル){ standardFilterController.CustomGetFullTextSearchProperties + = 新しい EventHandlerの <CustomGetFullTextSearchPropertiesEventArgs> (standardFilterController_CustomGetFullTextSearchProperties)。 } } ボイド standardFilterController_CustomGetFullTextSearchProperties(オブジェクト送信者、 CustomGetFullTextSearchPropertiesEventArgs E){ foreachの(文字列プロパティにGetFullTextSearchProperties()){ e.Properties.Add(プロパティ); } e.Handled = 真; } プライベートリスト< ストリング > GetFullTextSearchProperties(){ リスト < ストリング > searchProperties = 新しいリスト< ストリング > (); searchProperties.Add(" 姓" ); リターンsearchProperties。 } }
以下の画像は、ことを示しているMyFilterControllerが動作します。
次の図は、「マイフィルタコントローラ」の原則を示しています。
一つ以上のプロパティが特定の型である場合には濾過が不可能であってもよいです。例えば、でサーバモードの特性によってフィルタリングのDateTimeの列としてデータベースに格納されているタイプ、日時、日付型、例外を引き起こす可能性があります。それらを避けるために、inputedテキストは、対応する型に変換することができ、この変換された値が許容範囲内であることを確認し、必要に応じて、デフォルトのフィルタリストからプロパティを除外する。次のコードは、コントローラは、このロジックを実装する実証します。
特定のタイプの1つまたは複数の属性場合、フィルタは可能ではないかもしれません。例えば、サーバモードでは、フィルタープレスDateTimetype特性は、例外を引き起こし得る(データベースに格納された日付列型の日付などの属性)。それらを回避するために、必要に応じて特性を排除するフィルタの既定のリストから、テキスト入力は、対応する型に変換することができ、この変換値が許容範囲内であり、そしてあることを確認してください。次のコードは、このロジック・コントローラを示しています。
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してDevExpress.ExpressAppを。 使用してDevExpress.ExpressApp.SystemModuleを。 使用してDevExpress.ExpressApp.DCを。 使用してDevExpress.Data.Summaryを。 使用してSystem.Data.SqlTypesを。 // ... パブリック クラス MyFilterController:のViewController <ListViewコントロール> { プライベート 静的な 読み取り専用のDateTime MinDateプロパティ。 プライベート 静的な 読み取り専用のDateTime maxDateの。 静的MyFilterController(){ MinDateプロパティ =(日時)SqlDateTime.MinValue。 maxDateの = (日時)SqlDateTime.MaxValue。 } プライベートブールCanFilter(文字列プロパティ名、列filterText){ IMemberInfoのMemberInfo = View.ObjectTypeInfo.FindMember(プロパティ名)。 もし(SummaryItemTypeHelper.IsDateTime(memberInfo.MemberType)){ 日時?convertedFilter = nullを。 試す{ convertedFilter = Convert.ChangeType(filterText、typeof演算(日時))などのDateTime?; } キャッチ{ 戻り 偽。 } であれば(convertedFilter.HasValue){ もし、((convertedFilter.Value <MinDateプロパティ)||(convertedFilter.Value> maxDateの)){ 戻り 偽。 } } } 戻り 真。 } プライベートいるICollection < ストリング > GetProcessedRequiredProperties(ICollectionを< ストリング > searchProperties、 ストリングfilterText){ リスト <文字列 >結果=新しいリスト< 文字列 > (); foreachの(文字列プロパティ名でsearchProperties){ 場合(CanFilter(propertyNameの、filterText)){ result.Add(プロパティ名)。 } } 戻り値の結果; } プライベート ボイド FilterController_CustomGetFullTextSearchProperties(オブジェクト送信者、 CustomGetFullTextSearchPropertiesEventArgs E){ ストリング filterText =((FilterController)送信者).FullTextFilterAction.Value として ストリング。 もし(!ストリング.IsNullOrEmpty(filterText)){ いるICollection < ストリング > searchProperties = GetProcessedRequiredProperties(((FilterController)送信者).GetFullTextSearchProperties()、filterText)。 e.Properties.AddRange(searchProperties)。 e.Handled = 真; } } 保護 オーバーライド ボイドOnActivated(){ 塩基.OnActivated()。 FilterController filterController = Frame.GetController <FilterController> (); もし(filterController!= nullを){ filterController.CustomGetFullTextSearchProperties + = FilterController_CustomGetFullTextSearchProperties。 } } 保護 オーバーライド ボイドOnDeactivated(){ FilterController filterController = Frame.GetController <FilterController> (); もし(!filterController = ヌル){ filterController.CustomGetFullTextSearchProperties - = FilterController_CustomGetFullTextSearchProperties。 } 基部.OnDeactivated()。 } }