1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| Private _dicFilter As Dictionary(Of Filter, Decimal)
Private Enum Filter As Integer
Department = 1
Demo = 2
Percent = 3
End Enum
Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click
_dicFilter = New Dictionary(Of Filter, Decimal)
If ckbDepartment.Checked Then
_dicFilter.Add(Filter.Department, CShort(cbDepartment.SelectedValue))
End If
If ckbConcession.Checked Then
_dicFilter.Add(Filter.Demo, CInt(cbConcession.SelectedValue))
End If
If ckbPercent.Checked Then
_dicFilter.Add(Filter.Percent, nudPercent.Value)
End If
FilterAndSortData(_dicFilter)
End Sub
Private Sub FilterAndSortData(filters As Dictionary(Of Filter, Decimal), Optional ByVal PropertyToSort As String = Nothing, Optional ByVal sortorder As SortOrder = Nothing)
Dim data = (From d In Promo.DTO.DetailsDemo
Select Id = d.Id, Department = d.CodeDemo.Department, CodeDemo = d.CodeDemo, Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType).Concat(
From d In Promo.DTO.DetailsDepartment
Select Id = d.Id, Department = d.Department, CodeDemo = CType(Nothing, PROMO_DTO.CodeDemo), Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType)
If Not IsNothing(filters) Then
For Each key As Filter In filters.Keys
Select Case key
Case Filter.Department
data = (From d In data
Where d.Department.Id = _dicFilter(key)
Select d)
Case Filter.Demo
data = (From d In data
Where d.CodeDemo.Id = _dicFilter(key)
Select d)
Case Filter.Percent
data = (From d In data
Where d.Percentage = _dicFilter(key)
Select d)
End Select
Next
End If
If Not IsNothing(PropertyToSort) Then
If sortorder = Windows.Forms.SortOrder.Ascending Then
Select Case PropertyToSort
Case "Department"
data = data.OrderBy(Function(x) x.Department.Code)
Case "CodeDemo"
data = data.OrderBy(Function(x) x.CodeDemo.Code)
Case "Percentage"
data = data.OrderBy(Function(x) x.Percentage)
Case "Description"
data = data.OrderBy(Function(x) x.Description)
Case "Note"
data = data.OrderBy(Function(x) x.Note)
Case "ListType"
data = data.OrderBy(Function(x) x.ListType)
End Select
ElseIf sortorder = Windows.Forms.SortOrder.Descending Then
Select Case PropertyToSort
Case "Department"
data = data.OrderByDescending(Function(x) x.Department.Code)
Case "CodeDemo"
data = data.OrderByDescending(Function(x) x.CodeDemo.Code)
Case "Percentage"
data = data.OrderByDescending(Function(x) x.Percentage)
Case "Description"
data = data.OrderByDescending(Function(x) x.Description)
Case "Note"
data = data.OrderByDescending(Function(x) x.Note)
Case "ListType"
data = data.OrderByDescending(Function(x) x.ListType)
End Select
End If
End If
dgvDemo.DataSource = data.ToList
End Sub
Private Sub dgvDemo_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvDemo.ColumnHeaderMouseClick
Dim order As SortOrder = dgvDemo.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection
If order = SortOrder.None OrElse order = SortOrder.Descending Then
FilterAndSortData(_dicFilter, dgvDemo.Columns(e.ColumnIndex).DataPropertyName, SortOrder.Ascending)
dgvDemo.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Ascending
Else
FilterAndSortData(_dicFilter, dgvDemo.Columns(e.ColumnIndex).DataPropertyName, SortOrder.Descending)
dgvDemo.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Descending
End If
End Sub |
Partager