BindingSource.Sort для структур в VB.NET - PullRequest
0 голосов
/ 02 октября 2018

У меня есть Structure с двумя Dates и Sub New, а также Function ToString().У меня также есть DataGridView, связанный с BindingSource, связанный с DataTable containing objects of my structure.Сейчас я использую BindingSource.Sort для заказа моего DataGridView.Как BindingSource упорядочивает мои объекты Structure (выглядит как String?) И как я могу это настроить?Нужно ли корректировать структуру, наследовать BindingSource-Class или как мне начать?

пс.Эта структура является лишь примером.У меня могут быть более сложные в будущем.

Public Structure dateRange
    Public date1 As Date
    Public date2 As Date
    Sub New(newdt1 As Date, newdt2 As Date)
        date1=newdt1
        date2=newdt2
    End Sub
    Public Overrides Function ToString() As String
        Return date1.ToString & " - " & date2.ToString
    End Function
End Structure

1 Ответ

0 голосов
/ 02 октября 2018

Если вы хотите, чтобы тип имел режим сортировки по умолчанию, вам необходимо реализовать интерфейсы IComparable и / или IComparable(Of T).Это считается хорошей практикой для реализации обоих.Например,

Public Structure DateRange
    Implements IComparable, IComparable(Of DateRange)

    Public ReadOnly Property StartDate As Date
    Public ReadOnly Property EndDate As Date

    Public Sub New(startDate As Date, endDate As Date)
        Me.StartDate = startDate
        Me.EndDate = endDate
    End Sub

    Public Overrides Function ToString() As String
        Return $"{StartDate} - {EndDate}"
    End Function

    Public Function CompareTo(obj As Object) As Integer Implements IComparable.CompareTo
        Return CompareTo(DirectCast(obj, DateRange))
    End Function

    Public Function CompareTo(other As DateRange) As Integer Implements IComparable(Of DateRange).CompareTo
        'Sort by start date by default.
        Dim result = StartDate.CompareTo(other.StartDate)

        If result = 0 Then
            'Start dates are the same so sort by end date.
            result = EndDate.CompareTo(other.EndDate)
        End If

        Return result
    End Function

End Structure

Обратите внимание, что эта реализация использует реализацию, предоставляемую типом Date, для выполнения тяжелой работы.

Подробнее о сортировке списков можно прочитать здесь .

...