Modules/LookupGrid/LookupGridView.vb
2018-10-30 15:59:32 +01:00

57 lines
2.7 KiB
VB.net

Imports DevExpress.Data.Helpers
Imports DevExpress.Data.Filtering
Imports DevExpress.XtraGrid.Views.Base
Imports System.Reflection
Namespace LookupGrid
Public Class LookupGridView
Inherits DevExpress.XtraGrid.Views.Grid.GridView
Private _simpleSearch As Boolean
Public Sub New()
Me.New(Nothing)
End Sub
Public Property SimpleSearch() As Boolean
Get
Return _simpleSearch
End Get
Set(ByVal value As Boolean)
_simpleSearch = value
End Set
End Property
Public Sub New(ByVal grid As DevExpress.XtraGrid.GridControl)
MyBase.New(grid)
' put your initialization code here
End Sub
Protected Overrides ReadOnly Property ViewName() As String
Get
Return "LookupGridView"
End Get
End Property
Protected Overrides Function ConvertGridFilterToDataFilter(ByVal criteria As CriteriaOperator) As CriteriaOperator
Dim originalFindFilterText As String = Convert.ToString(GetType(ColumnView).InvokeMember("findFilterText", BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.GetField, Nothing, Me, New Object() {}))
If SimpleSearch Then
If Not (String.IsNullOrEmpty(originalFindFilterText)) Then
GetType(ColumnView).InvokeMember("findFilterText", BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.SetField, Nothing, Me, New Object() {String.Concat("""", originalFindFilterText, """")})
End If
Dim findCriteria As CriteriaOperator = Nothing
Dim _lastParserResults As FindSearchParserResults = Nothing
If Not (String.IsNullOrEmpty(FindFilterText)) Then
_lastParserResults = (New FindSearchParser()).Parse(FindFilterText, GetFindToColumnsCollection())
GetType(ColumnView).GetField("lastParserResults", BindingFlags.NonPublic Or BindingFlags.Instance).SetValue(Me, _lastParserResults)
If Not IsServerMode Then
_lastParserResults.AppendColumnFieldPrefixes()
End If
findCriteria = DxFtsContainsHelperAlt.Create(_lastParserResults, FilterCondition.Contains, IsServerMode)
End If
GetType(ColumnView).InvokeMember("findFilterText", BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.SetField, Nothing, Me, New Object() {originalFindFilterText})
Return criteria And findCriteria
End If
Return MyBase.ConvertGridFilterToDataFilter(criteria)
End Function
End Class
End Namespace