GanttView for WPF
カスタムフィルター処理

ツールバーにあるデフォルトのフィルターオプションのほかに、GanttView コントローラーでは、ビジネスニーズに合わせてカスタムフィルタを作成することもできます。そのために、このコントロールには[高度なフィルター]フィルターダイアログが用意されています。これには、ツールバーの[フィルター]ボタンからアクセスできます。[フィールド名]でフィールドを指定し、[テスト]フィールでテスト条件を指定して、独自のフィルターを作成できます。

次の図に、[高度なフィルター]フィルターダイアログを示します。

コードによるカスタムフィルタの作成

C1GanttView クラスライブラリには、コードでカスタムフィルターを作成する場合に使用できるさまざまなクラスがあります。たとえば、LateTasksFilter クラスを使用して、遅延中のタスクをフィルター処理できます。また、ConditionTasksFilter クラスと AdvancedFilter クラスを使用して、特定の日付範囲内にスケジュールされたタスクをフィルター処理できます。このようなフィルターをコードで作成するには、次の手順を実行します。次のコード例では、「クイックスタート」セクションで作成したサンプルを使用します。

  1. XAML ビューで、MainWindow に配置された GanttView コントロールをサイズ変更し、フォームに 2 つの標準ボタンコントロールを配置します。

    デザイナ

  2. XAML でボタンの基本的なプロパティを設定します。
    XAML
    コードのコピー
    <Button Content="Filter Tasks by Date" Width="110" />
    <Button Content="Filter Late Tasks" Width="114"/>
    
  3. XAML ビューで、2 つのボタンの Click イベントをサブスクライブします。
    XAML
    コードのコピー
    <Button Content="Filter Tasks by Date" Width="110" Click="Button1_Click" />
    <Button Content="Filter Late Tasks" Width="114" Click=Button2_Click"/>
    
  4. MainPage.xaml.cs ファイルで、Button1_Click イベントのハンドラに次のコードを追加します。
    Private Sub Button1_Click(sender As Object, e As RoutedEventArgs)
        Dim filter As New AdvancedFilter()
        ' 2016年4月8日から始めるタスクをフィルタリングします
        Dim startCondition As New ConditionTaskFilter()
        startCondition.FilterField = FilterField.Start
        startCondition.TestOperator = TestOperators.IsGreaterThanOrEqualTo
        startCondition.FilterValue = New DateTime(2016, 4, 8)
        filter.Conditions.Add(startCondition)
    
        ' 2016年5月10日前または5月10日に終了するタスクをフィルタリングします
        Dim finishCondition As New ConditionTaskFilter()
        finishCondition.FilterField = FilterField.Finish
        finishCondition.TestOperator = TestOperators.IsLessThanOrEqualTo
        finishCondition.FilterValue = New DateTime(2016, 5, 10)
        filter.Conditions.Add(finishCondition)
        gv.ApplyFilter(filter)
    End Sub
    
    private void Button1_Click(object sender, RoutedEventArgs e)
    {
        AdvancedFilter filter = new AdvancedFilter();
        // 2016年4月8日から始めるタスクをフィルタリングします
        ConditionTaskFilter startCondition = new ConditionTaskFilter();
        startCondition.FilterField = FilterField.Start;
        startCondition.TestOperator = TestOperators.IsGreaterThanOrEqualTo;
        startCondition.FilterValue = new DateTime(2016, 4, 8);
        filter.Conditions.Add(startCondition);
    
        // 2016年5月10日前または5月10日に終了するタスクをフィルタリングします
        ConditionTaskFilter finishCondition = new ConditionTaskFilter();
        finishCondition.FilterField = FilterField.Finish;
        finishCondition.TestOperator = TestOperators.IsLessThanOrEqualTo;
        finishCondition.FilterValue = new DateTime(2016, 5, 10);
        filter.Conditions.Add(finishCondition);
        gv.ApplyFilter(filter);
    }
    

    上のコードは、2016 年 4 月 8 日に開始され、2016 年 5 月 10 日またはそれ以前に終了するタスクをフィルター処理します。

  5. MainPage.xaml.cs ファイルで、Button2_Click イベントのハンドラに次のコードを追加します。
    Private Sub Button2_Click(sender As Object, e As RoutedEventArgs)
        Dim filter As New LateTasksFilter(New DateTime(2016, 5, 10))
        gv.ApplyFilter(filter)
    End Sub
    
    private void Button2_Click(object sender, RoutedEventArgs e)
    {
        LateTasksFilter filter = new LateTasksFilter(new DateTime(2016, 5, 10));
        gv.ApplyFilter(filter);
    }
    

    上のコードは、開始日が 2016 年 5 月 10 日またはそれ以降のタスクをフィルター処理します。

  6. [F5]キーを押してアプリケーションを実行し、カスタムフィルターボタンがどのように表示されるかを確認します。

日でタスクをフィルターする]ボタンをクリックすると、GanttView には、2016 年 4 月 8 日に開始され、2016 年 5 月 10 日またはそれ以前に終了するタスクが表示されます。[遅れたタスクをフィルターする]をクリックすると、開始日が 2016 年 5 月 10 日またはそれ以降のタスクが表示されます。