This repository has been archived by the owner on Sep 11, 2023. It is now read-only.
/
FilterHelper.vb
58 lines (52 loc) · 1.65 KB
/
FilterHelper.vb
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
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports DevExpress.XtraGrid.Views.Grid
Imports System.Data
Namespace FilteringRepeatRows
Public Class FilterHelper
Private _view As GridView
Private _fields As List(Of String)
Public Property Fields() As List(Of String)
Get
Return _fields
End Get
Set(ByVal value As List(Of String))
If value Is _fields Then
Return
End If
_fields = value
_view.RefreshData()
End Set
End Property
Public Sub New(ByVal view As GridView)
_view = view
AddHandler _view.CustomRowFilter, AddressOf _view_CustomRowFilter
End Sub
Private Sub _view_CustomRowFilter(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.RowFilterEventArgs)
Dim view As GridView = TryCast(sender, GridView)
Dim source As DataView = CType(view.DataSource, DataView)
e.Visible = Not ContainsRow(source, e.ListSourceRow)
e.Handled = True
End Sub
Private Function ContainsRow(ByVal source As DataView, ByVal listSourceRow As Integer) As Boolean
For i As Integer = 0 To listSourceRow - 1
Dim equal As Boolean = True
For Each column As DataColumn In source.Table.Columns
If CheckField(column.ColumnName) AndAlso (Not source.Table.Rows(listSourceRow)(column).Equals(source.Table.Rows(i)(column))) Then
equal = False
Exit For
End If
Next column
If equal Then
Return True
End If
Next i
Return False
End Function
Private Function CheckField(ByVal columnName As String) As Boolean
Return _fields Is Nothing OrElse _fields.Contains(columnName)
End Function
End Class
End Namespace