Попытка реализовать пользовательскую группировку в элементе управления Janus GridEx

Я пытаюсь реализовать пользовательскую группировку в элементе управления Janus GridEx. У меня есть столбец с данными DateTime, но когда я группирую этот столбец, я хочу, чтобы данные группировались на основе только части даты этих данных.

Читая документацию 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?


person Derek Tomes    schedule 06.12.2012    source источник


Ответы (2)


Я использую Janus уже некоторое время (думаю, 10 лет...), но мне никогда не приходилось использовать этот метод для сортировки столбца даты (я использую формат дд/мм/гггг). Во-первых, если тип данных «Дата», сортировка будет выполняться автоматически независимо от маски формата, которую вы используете для отображения этой даты. Однако если тип данных столбца — «String», то сортировка будет производиться с использованием сравнения по алфавиту.

Во-вторых, свойство GroupComparer используется для сортировки групп, а не элементов. Предположим, у вас есть сложное правило группировки с заголовком группы, который не имеет отношения к сортировке, тогда вы можете создать GroupComparer для сортировки нужным вам образом.

Может быть, вы можете начать двойную проверку типа данных вашего столбца?

Надеюсь, это поможет Сергею

person Serge Bollaerts    schedule 06.12.2012
comment
Привет Сережа, колонка однозначно свидание. Он сортируется правильно, просто когда я группирую по этому столбцу, он группируется на основе точной даты и времени, и я хочу, чтобы все элементы одного и того же дня группировались вместе. - person Derek Tomes; 07.12.2012

Хорошо, это заняло у меня больше времени, чем должно было. Оказывается, 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
person Derek Tomes    schedule 10.12.2012