尝试在Janus GridEx控件中实现自定义分组

时间:2012-12-06 20:35:41

标签: .net vb.net interface janus gridex

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

阅读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控件的这个功能?

2 个答案:

答案 0 :(得分:0)

我现在已经使用了Janus一段时间(我认为10年......)但是我从来没有使用该方法来排序日期列(我使用格式dd / MM / yyyy)。第一点,如果数据类型为&#34;日期&#34;,无论您用于显示该日期的格式掩码,都将自动进行排序。但是,如果列的数据类型为&#34; String&#34;,则将使用字母比较进行排序。

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

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

希望这会有所帮助 谢尔文

答案 1 :(得分: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