First create solution

This commit is contained in:
2017-03-08 11:21:27 +01:00
commit a2fb86bacf
5508 changed files with 1082238 additions and 0 deletions
@@ -0,0 +1,109 @@
' Developer Express Code Central Example:
' How to populate a List View with data from a LINQ query
'
' See the http://www.devexpress.com/scid=K18107 KB Article for more information.
'
' You can find sample updates and versions for different programming languages here:
' http://www.devexpress.com/example=E859
' Developer Express Code Central Example:
' How to populate the list view with data from a LINQ query
'
' See the http://www.devexpress.com/scid=K18107 KB Article for more information.
'
' You can find sample updates and versions for different programming languages here:
' http://www.devexpress.com/example=E859
Imports Microsoft.VisualBasic
Imports System
Imports System.Linq
Imports DevExpress.Xpo
Imports System.Reflection
Imports DevExpress.ExpressApp
Imports System.Collections.Generic
Imports Nuvolar.Module.Dennis.Linq
Public NotInheritable Class LinqCollectionSourceHelper
Private Sub New()
End Sub
Public Shared Sub CreateCustomCollectionSource(ByVal sender As Object, ByVal e As CreateCustomCollectionSourceEventArgs)
Dim listViewInfo As IModelListViewLinq = TryCast((CType(sender, XafApplication)).FindModelView(e.ListViewID), IModelListViewLinq)
If listViewInfo Is Nothing Then
Return
End If
If String.IsNullOrEmpty(listViewInfo.XPQueryMethod) Then
Return
End If
Dim query As IQueryable = LinqCollectionSourceHelper.InvokeMethod(e.ObjectType, listViewInfo.XPQueryMethod, (CType(e.ObjectSpace, Xpo.XPObjectSpace)).Session)
If query Is Nothing Then
Return
End If
e.CollectionSource = New LinqCollectionSource(e.ObjectSpace, e.ObjectType, query)
End Sub
Public Shared Function GetXPQueryMethods(ByVal type As Type) As String()
Dim names As New List(Of String)()
Dim methods() As MethodInfo = type.GetMethods(System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Static)
For Each mi As MethodInfo In methods
If IsCompatibleMethod(mi) Then
names.Add(mi.Name)
End If
Next mi
Return names.ToArray()
End Function
Public Shared Function IsCompatibleMethod(ByVal mi As MethodInfo) As Boolean
Dim pis() As ParameterInfo = mi.GetParameters()
Return mi.ReturnType IsNot Nothing AndAlso GetType(IQueryable).IsAssignableFrom(mi.ReturnType) AndAlso pis.Length = 1 AndAlso pis(0).ParameterType.IsAssignableFrom(GetType(Session))
End Function
Public Shared Function InvokeMethod(ByVal type As Type, ByVal name As String, ByVal session As Session) As IQueryable
Dim method As MethodInfo = FindMethod(type, name)
If method Is Nothing Then
Return Nothing
End If
Return CType(method.Invoke(Nothing, New Object() {session}), IQueryable)
End Function
Private Shared Function FindMethod(ByVal type As Type, ByVal name As String) As MethodInfo
Dim methods() As MethodInfo = type.GetMethods(System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Static)
For Each mi As MethodInfo In methods
If mi.Name = name AndAlso IsCompatibleMethod(mi) Then
Return mi
End If
Next mi
Return Nothing
End Function
Public Shared Function GetDisplayableProperties(ByVal type As Type, ByVal name As String) As String()
Dim method As MethodInfo = FindMethod(type, name)
If method Is Nothing Then
Return Nothing
End If
For Each attribute As CustomQueryPropertiesAttribute In method.GetCustomAttributes(GetType(CustomQueryPropertiesAttribute), False)
If attribute.Name = "DisplayableProperties" Then
Return attribute.Value.Split(";"c)
End If
Next attribute
Return Nothing
End Function
End Class
<AttributeUsage(AttributeTargets.Method)> _
Public NotInheritable Class CustomQueryPropertiesAttribute
Inherits Attribute
Private theName As String
Private theValue As String
Public ReadOnly Property Name() As String
Get
Return theName
End Get
End Property
Public ReadOnly Property Value() As String
Get
Return theValue
End Get
End Property
Public Sub New(ByVal theName As String, ByVal theValue As String)
Me.theName = theName
Me.theValue = theValue
End Sub
End Class