0

我正在尝试在 Janus GridEx 控件中实现自定义分组。我有一列包含 DateTime 数据,但是当我对该列进行分组时,我希望数据仅基于该数据的日期部分进行分组。

阅读 Janus 文档,看起来将 GroupComparer 添加到 Column 应该完成此操作:

' 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)。第一点,如果数据类型是“日期”,无论您用于显示该日期的格式掩码如何,都会自动进行排序。但是,如果列的数据类型是“字符串”,那么将使用字母比较进行排序。

第二点属性 GroupComparer 用于对组而不是项目进行排序。假设您有一个复杂的分组规则,其组标题与排序无关,那么您可以创建一个 GroupComparer 以按照您想要的方式进行排序。

也许您可以开始仔细检查列的数据类型吗?

希望这有助于塞尔

于 2012-12-06T23:36:22.490 回答
0

好吧,我花了比它应该花的时间更长的时间。事实证明,比较器工作得很好,但它并没有“粘”在柱子上。我发现如果我检查它是否存在于 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 回答