18 May 2010

DatagridView : Sort Generic List on any property (minimal code)

Had been wrecking my head with this for a few hours but got a good solution (with very little code).
Okay so it using reflection and mightn't have order log n speed, but so what if you are sorting collections with normally less than 50 items.

I handle the Column Header Mouse Click
Get the data property name.
Then use some reflection to sort the generic list.  (before this I had to use select case, and sort by knowing the property name in code, but when I add new properties this was a pain to maintain).


    Private Sub SelectionsCollectionsDataGridView_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles SelectionsCollectionsDataGridView.ColumnHeaderMouseClick
        Try
            Dim col = Me.SelectionsCollectionsDataGridView.Columns(e.ColumnIndex)
            Me.selectedMarket.SelectionsCollections.Sort(Function(p1, p2) p1.GetType.GetProperty(col.DataPropertyName).GetValue(p1, Nothing).CompareTo(p2.GetType.GetProperty(col.DataPropertyName).GetValue(p2, Nothing)))
            Me.SelectionsCollectionsBindingSource.CurrencyManager.Refresh()
        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.Critical)
        End Try
    End Sub

No comments:

Post a Comment