0

JanusGridExコントロールにカスタムグループ化を実装しようとしています。DateTimeのデータを含む列がありますが、その列でグループ化する場合、そのデータのDate部分のみに基づいてデータをグループ化する必要があります。

Janusのドキュメントを読むと、GroupComparerを列に追加すると次のようになります。

' Code that sets up my Janus GridEx
...
...
grdResults.RootTable.Columns("DateDue").GroupComparer = New GroupByDateComparer()
...
...

私のIComparerクラス...

Public Class GroupByDateComparer
    Implements IComparer
    Public Function Compare(a As Object, b As Object) As Integer _
                                      Implements IComparer.Compare
        Select Case DateDiff(DateInterval.Day, a.Date, b.Date)
            Case Is < 0
                Return -1
            Case 0
                Return 0
            Case Is > 0
                Return 1
        End Select
        Return 0
    End Function
End Class

私のコードはビルドされます。GroupComparerに新しいインスタンスを割り当てるコード行が実行されます。ただし、Compare()関数が呼び出されることはありません。

Janus GridExコントロールのこの機能を実装できた人はいますか?

4

2 に答える 2

0

私はしばらくの間 Janus を使用してきました (10 年だと思います...) が、日付列をソートするためにその方法を使用する必要はありませんでした (私は dd/MM/yyyy の形式を使用しています)。最初のポイントは、データ型が「日付」の場合、その日付を表示するために使用する書式マスクに関係なく、並べ替えが自動的に行われることです。ただし、列のデータ型が「文字列」の場合は、アルファベット順の比較でソートされます。

2 番目のポイントは、プロパティ GroupComparer を使用して、項目ではなくグループを並べ替えることです。並べ替えに関係のないグループ キャプションを含む複雑なグループ化ルールがあると仮定すると、GroupComparer を作成して、必要な方法で並べ替えることができます。

列のデータ型を再確認してみてはいかがでしょうか?

これがセルジュに役立つことを願っています

于 2012-12-06T23:36:22.490 に答える
0

さて、必要以上に時間がかかりました。Comparer は完全に機能していたことがわかりましたが、列に「固着」していませんでした。RootTableChanged イベントに存在するかどうかを確認し、存在しない場合は再接続すると、すべて正常に動作することがわかりました...

Private Sub grdResults_RootTableChanged(sender As Object, e As EventArgs) _ 
                                        Handles grdResults.RootTableChanged

    If grdResults.RootTable.Columns.Contains("DateDue") AndAlso _ 
           grdResults.RootTable.Columns("DateDue").GroupComparer Is Nothing Then
        grdResults.RootTable.Columns("DateDue").GroupComparer = New GroupByDateComparer()
    End If
End Sub
于 2012-12-10T23:49:48.003 に答える