Ein Windows.Forms-Formular zur Demonstration
der Nutzung eines Custom-Comparers im Grid
Public Class frmDGVSortComparerDemo
Dim dgv As New DataGridView With
{.Parent = Me, .Size = New Size(300, 400)}
Dim WithEvents btnSort As New Button With
{.Parent = Me, .Top = 420, .Text = "Sort"}
Dim comparerlist As New List(Of String)
Private Sub frmDGVSortComparerDemo_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Width = 320
Me.Height = 500
'Vorgabeliste für Sortierreihenfolge
With comparerlist
.AddRange({"Boot", "Motorrad", "Auto", "Zug", "Laufen"})
End With
'Testdaten ins Grid eintragen
Dim rndm As New Random(1234)
dgv.Columns.Add("Mobilität", "Mobilität")
For i As Integer = 0 To 100
dgv.Rows.Add(comparerlist(rndm.Next(comparerlist.Count)))
Next i
End Sub
Private Sub btnSort_Click(sender As Object,
e As EventArgs) Handles btnSort.Click
'Comparer erstellen und anwenden
dgv.Sort(New ComparerByList With
{.sortorderlist = comparerlist.ToArray,
.sortcolumn = "Mobilität"})
End Sub
Private Class ComparerByList
Implements System.Collections.IComparer
'Ein DatagridviewComparer für Stringspalten
'nach einem Array dessen Einträge die Reihenfolge vorgeben
Private _sortorderlist As Array
Private _sortColumn As String
Public Property sortorderlist As Array
Set(value As Array)
_sortorderlist = value
End Set
Get
Return _sortorderlist
End Get
End Property
Public Property sortcolumn As String
Set(value As String)
_sortColumn = value
End Set
Get
Return _sortColumn
End Get
End Property
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
'Rows casten
Dim row_x As DataGridViewRow = DirectCast(x, DataGridViewRow)
Dim row_y As DataGridViewRow = DirectCast(y, DataGridViewRow)
'Werte aus der gewünschten Sortierspalte auslesen
Dim val_x As String = row_x.Cells(_sortColumn).Value.ToString
Dim val_y As String = row_y.Cells(_sortColumn).Value.ToString
'Indices der Werte in der Vorgabeliste suchen
Dim index_x As Integer = Array.IndexOf(_sortorderlist, val_x)
Dim index_y As Integer = Array.IndexOf(_sortorderlist, val_y)
'Arrayindices vergleichen
Return index_x.CompareTo(index_y)
End Function
End Class
End Class
Beitrag wurde zuletzt am 21.03.19 um 09:42:59 editiert. |