簡體   English   中英

VB.NET中結構上的BindingSource.Sort

[英]BindingSource.Sort on Structures in VB.NET

我有一個帶有兩個DatesStructure ,一個Sub New和一個Function ToString() 我還有一個DataGridView ,綁定到BindingSource ,綁定到綁定到DataTable containing objects of my structure綁定源。 我現在正在使用BindingSource.Sort來訂購我的DataGridView。 BindingSource如何排序我的Structure對象(看起來像String?),如何調整它? 我是否需要調整結構,繼承BindingSource-Class或如何開始?

PS。 該結構僅是示例。 我將來可能會更復雜。

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

如果要讓類型具有默認的排序模式,則需要實現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類型提供的實現來完成繁重的工作。

您可以在此處閱讀有關排序列表的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM