Imports System.Data.Objects.DataClasses Imports System.Data.Objects Imports DevExpress.Xpf.Grid Imports System.Data.Entity Imports System.Data.Entity.Infrastructure Imports System.Data Imports System.IO Imports System.Data.Entity.Core.Objects.DataClasses Imports System.Data.Entity.Core.Objects Imports System.Data.Entity.Core Imports tsWPFCore.tsControles Imports System.Data.Entity.Core.Common.Utils Imports Microsoft.EntityFrameworkCore Public Module modExtensiones Public Function ObtieneHijoDeTipo(Of T As DependencyObject)(depObj As DependencyObject) As T If depObj Is Nothing Then Return Nothing End If For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1 Dim child = VisualTreeHelper.GetChild(depObj, i) Dim result = If(TryCast(child, T), ObtieneHijoDeTipo(Of T)(child)) If result IsNot Nothing Then Return result End If Next Return Nothing End Function Public Sub ObtieneHijosDeTipo(Of T As DependencyObject)(depObj As DependencyObject, ByRef lista As List(Of T)) If depObj IsNot Nothing Then If lista Is Nothing Then lista = New List(Of T) For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1 Dim child = VisualTreeHelper.GetChild(depObj, i) Dim hijo = TryCast(child, T) If hijo IsNot Nothing Then lista.Add(hijo) Else ObtieneHijosDeTipo(Of T)(child, lista) End If Next End If End Sub Public Function ObtienePadreDeTipo(Of T As DependencyObject)(depObj As DependencyObject) As T If depObj Is Nothing Then Return Nothing End If Dim parent As DependencyObject Do parent = VisualTreeHelper.GetParent(depObj) If Not parent Is Nothing Then Dim result = If(TryCast(parent, T), ObtienePadreDeTipo(Of T)(parent)) If result IsNot Nothing Then Return result End If End If Loop Until parent Is Nothing Return Nothing End Function ' 'Public Function ObtieneContexto(Entidad As IEntityWithRelationships) As ObjectContext ' If Entidad Is Nothing Then Throw New ArgumentNullException ' Dim relationshipmanager = Entidad.RelationshipManager ' Dim relatedend = relationshipmanager.GetAllRelatedEnds.FirstOrDefault ' If relatedend Is Nothing Then Throw New Exception("No relationships found") ' Dim query As ObjectQuery = relatedend.CreateSourceQuery ' If query Is Nothing Then Throw New Exception("The Entity is Detached") ' Return query.Context 'End Function Public Function GetDataRowHandles(grid As GridControl) As List(Of Integer) Dim rowHandles As New List(Of Integer)() For i As Integer = 0 To grid.VisibleRowCount - 1 Dim rowHandle As Integer = grid.GetRowHandleByVisibleIndex(i) If grid.IsGroupRowHandle(rowHandle) Then If Not grid.IsGroupRowExpanded(rowHandle) Then rowHandles.AddRange(GetDataRowHandlesInGroup(grid, rowHandle)) End If Else rowHandles.Add(rowHandle) End If Next Return rowHandles End Function Private Function GetDataRowHandlesInGroup(grid As GridControl, groupRowHandle As Integer) As List(Of Integer) Dim rowHandles As New List(Of Integer)() For i As Integer = 0 To grid.GetChildRowCount(groupRowHandle) - 1 Dim rowHandle As Integer = grid.GetChildRowHandle(groupRowHandle, i) If grid.IsGroupRowHandle(rowHandle) Then rowHandles.AddRange(GetDataRowHandlesInGroup(grid, rowHandle)) Else rowHandles.Add(rowHandle) End If Next Return rowHandles End Function Public Function ObtieneCampos(T As Type) As List(Of String) Dim lp As New List(Of String) Dim propiedades = T.GetProperties For Each propiedad In propiedades.Where(Function(x) Not (x.PropertyType.Name.Contains("EntityReference") OrElse x.PropertyType.Name.Contains("EntityCollection") OrElse x.PropertyType.Name.Contains("EntityState") OrElse x.PropertyType.Name.Contains("EntityKey") OrElse (x.PropertyType.BaseType Is Nothing OrElse x.PropertyType.BaseType.Name = "EntityObject"))) lp.Add(propiedad.Name) Next Return lp End Function Public Sub AgregaTodosCampos(tsgrid As tsGridControl, T As Type, Visible As Boolean, Optional SoloLectura As Boolean = True) Try Dim lp = ObtieneCampos(T) For Each p In lp If Not tsgrid.Columns.Any(Function(x) x.FieldName = p) And p.ToLower <> "seleccionar" Then Dim gc As New tsGridColumn gc.FieldName = p gc.IsSmart = True gc.Visible = Visible gc.ReadOnly = SoloLectura tsgrid.Columns.Add(gc) End If Next Catch ex As Exception Throw New Exception(ex.Message, ex) End Try End Sub Public Function ObtieneImagen(ByVal source As UIElement, ByVal scale As Double, ByVal quality As Integer) As Byte() Dim actualHeight As Double = source.RenderSize.Height Dim actualWidth As Double = source.RenderSize.Width Dim renderHeight As Double = actualHeight * scale Dim renderWidth As Double = actualWidth * scale Dim renderTarget As RenderTargetBitmap = New RenderTargetBitmap(CInt(renderWidth), CInt(renderHeight), 96, 96, PixelFormats.Pbgra32) Dim sourceBrush As VisualBrush = New VisualBrush(source) Dim drawingVisual As DrawingVisual = New DrawingVisual() Dim drawingContext As DrawingContext = drawingVisual.RenderOpen() Using drawingContext drawingContext.PushTransform(New ScaleTransform(scale, scale)) drawingContext.DrawRectangle(Brushes.White, Nothing, New Rect(New Point(0, 0), New Point(actualWidth, actualHeight))) drawingContext.DrawRectangle(sourceBrush, Nothing, New Rect(New Point(0, 0), New Point(actualWidth, actualHeight))) End Using renderTarget.Render(drawingVisual) Dim jpgEncoder As JpegBitmapEncoder = New JpegBitmapEncoder() jpgEncoder.QualityLevel = quality jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget)) Dim _imageArray As Byte() Using outputStream As MemoryStream = New MemoryStream() jpgEncoder.Save(outputStream) _imageArray = outputStream.ToArray() End Using Return _imageArray End Function '#Region "dbContext" ' ' Public Function GetEntityKey(Of T As Class)(ByVal context As DbContext, ByVal entity As T) As EntityKey ' Dim oc = (CType(context, IObjectContextAdapter)).ObjectContext ' Dim ose As ObjectStateEntry = Nothing ' If entity IsNot Nothing AndAlso oc.ObjectStateManager.TryGetObjectStateEntry(entity, ose) Then ' Return ose.EntityKey ' End If ' Return Nothing ' End Function ' ' Public Function GetEntityKey(Of T As Class)(ByVal context As DbContext, ByVal dbEntityEntry As DbEntityEntry(Of T)) As EntityKey ' If dbEntityEntry IsNot Nothing Then ' Return GetEntityKey(context, dbEntityEntry.Entity) ' End If ' Return Nothing ' End Function '#End Region End Module