201 lines
8.4 KiB
VB.net
201 lines
8.4 KiB
VB.net
Imports DevExpress.XtraGrid
|
|
Imports DevExpress.XtraGrid.Views.Base
|
|
Imports DevExpress.XtraGrid.Views.Grid
|
|
Imports DigitalData.GUIs.ClientSuite.ClassLayout
|
|
|
|
Public Class UserControlAssignment
|
|
Private _DragDropManager As ClassDragDrop
|
|
|
|
Private _ParentIdColumn As String
|
|
Private _ChildIdColumn As String
|
|
|
|
Private _ParentList As DataTable
|
|
Private _ChildList As DataTable
|
|
Private _AssignmentList As DataTable
|
|
|
|
Private _ParentRecordId As Integer
|
|
|
|
Public Property TextParentList As String
|
|
Public Property TextAssignedToParent As String
|
|
Public Property TextNotAssignedToParent As String
|
|
|
|
Public Event ChildRemoved(ParentId As Integer, ChildId As Integer, RelationRecordId As Integer)
|
|
Public Event ChildAdded(ParentId As Integer, ChildId As Integer, RelationRecordId As Integer)
|
|
|
|
Private Sub UserControlAssignment_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
_DragDropManager = New ClassDragDrop()
|
|
_DragDropManager.AddGridView(ViewAssignedToParent)
|
|
_DragDropManager.AddGridView(ViewNotAssignedToParent)
|
|
|
|
' Load text customizations
|
|
labelAssignedToParent.Text = TextAssignedToParent
|
|
labelNotAssignedToParent.Text = TextNotAssignedToParent
|
|
labelParentList.Text = TextParentList
|
|
|
|
' Load grid customizations
|
|
Dim oGridPatcher = New ClassControlPatcher(Of GridControl)(Me)
|
|
oGridPatcher.
|
|
ProcessContainer(AddressOf ClassGridControl.DefaultGridSettings).
|
|
ProcessContainer(AddressOf ClassGridControl.ReadOnlyGridSettings).
|
|
ProcessControl(AddressOf ClassGridControl.CheckboxSelectGridSettings, GridNotAssignedToParent).
|
|
ProcessControl(AddressOf ClassGridControl.CheckboxSelectGridSettings, GridAssignedToParent)
|
|
|
|
' Load view layouts
|
|
Try
|
|
Dim ViewParentListPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewParentList.Name)
|
|
Dim ViewAssignedPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewAssignedToParent.Name)
|
|
Dim ViewNotAssignedPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewNotAssignedToParent.Name)
|
|
|
|
If IO.File.Exists(ViewParentListPath) Then
|
|
ViewParentList.RestoreLayoutFromXml(ViewParentListPath)
|
|
End If
|
|
If IO.File.Exists(ViewAssignedPath) Then
|
|
ViewAssignedToParent.RestoreLayoutFromXml(ViewAssignedPath)
|
|
End If
|
|
If IO.File.Exists(ViewNotAssignedPath) Then
|
|
ViewNotAssignedToParent.RestoreLayoutFromXml(ViewNotAssignedPath)
|
|
End If
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Private Function MaybeCopyToDataTable(RowCollection As EnumerableRowCollection(Of DataRow)) As DataTable
|
|
If RowCollection.Count > 0 Then
|
|
Return RowCollection.CopyToDataTable()
|
|
Else
|
|
Return New DataTable()
|
|
End If
|
|
End Function
|
|
|
|
Public Sub Init(ParentList As DataTable, ChildrenList As DataTable, AssignmentList As DataTable, ParentIdColumn As String, ChildIdColumn As String)
|
|
_ParentList = ParentList
|
|
_ChildList = ChildrenList
|
|
_AssignmentList = AssignmentList
|
|
|
|
_ParentIdColumn = ParentIdColumn
|
|
_ChildIdColumn = ChildIdColumn
|
|
|
|
' This will trigger FocusedRowChanged, needs to be last!!
|
|
GridParentList.DataSource = ParentList
|
|
End Sub
|
|
|
|
Public Sub UpdateData(ParentList As DataTable, ChildrenList As DataTable, AssignmentList As DataTable)
|
|
_ParentList = ParentList
|
|
_ChildList = ChildrenList
|
|
_AssignmentList = AssignmentList
|
|
|
|
Dim oFocusedParentRow = ViewParentList.FocusedRowHandle
|
|
|
|
ViewParentList.BeginDataUpdate()
|
|
GridParentList.DataSource = ParentList
|
|
ViewParentList.EndDataUpdate()
|
|
|
|
ViewParentList.FocusedRowHandle = oFocusedParentRow
|
|
End Sub
|
|
|
|
Private Function GetIdsFromDataRows(Rows As List(Of DataRow)) As List(Of Integer)
|
|
Dim oIds As New List(Of Integer)
|
|
|
|
For Each oRow As DataRow In Rows
|
|
oIds.Add(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN))
|
|
Next
|
|
|
|
Return oIds
|
|
End Function
|
|
|
|
Private Function GetModifiedRows(Grid As GridControl, Data As IDataObject) As List(Of DataRow)
|
|
Dim oTable As DataTable = Grid.DataSource
|
|
Dim oModifiedRows As New List(Of DataRow)
|
|
Dim oPrimaryKeys As New List(Of Integer)
|
|
|
|
For Each oRow As DataRow In oTable.Rows
|
|
oPrimaryKeys.Add(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN))
|
|
Next
|
|
|
|
If Data.GetDataPresent(GetType(GridView)) Then
|
|
Dim oView As GridView = Data.GetData(GetType(GridView))
|
|
Dim oSelectedRows() As Integer = oView.GetSelectedRows()
|
|
|
|
If oSelectedRows.Length = 0 Then
|
|
Return oModifiedRows
|
|
End If
|
|
|
|
' Die ausgewählten Rows auslesen und gridUsersAssigned hinzufügen
|
|
For Each oRowIndex As Integer In oView.GetSelectedRows()
|
|
Dim oRowView As DataRowView = oView.GetRow(oRowIndex)
|
|
Dim oRow As DataRow = oRowView.Row
|
|
|
|
If Not oPrimaryKeys.Contains(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN)) Then
|
|
oModifiedRows.Add(oRow)
|
|
End If
|
|
Next
|
|
|
|
ElseIf Data.GetDataPresent(GetType(DataRow)) Then
|
|
Dim oRow As DataRow = Data.GetData(GetType(DataRow))
|
|
|
|
If Not oPrimaryKeys.Contains(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN)) Then
|
|
oModifiedRows.Add(oRow)
|
|
End If
|
|
End If
|
|
|
|
Return oModifiedRows
|
|
End Function
|
|
|
|
Private Function GetAssignmentRecord(ParentId As Integer, ChildId As Integer)
|
|
Dim oRows = _AssignmentList.Select($"{_ParentIdColumn} = {ParentId} And {_ChildIdColumn} = {ChildId}").ToList()
|
|
|
|
If oRows.Count = 0 Then
|
|
Return Nothing
|
|
Else
|
|
Return oRows.First().Item(ClassConstants.ATTRIBUTE_ID_COLUMN)
|
|
End If
|
|
End Function
|
|
|
|
Private Sub GridNotAssignedToParent_DragDrop(sender As Object, e As DragEventArgs) Handles GridNotAssignedToParent.DragDrop
|
|
Dim oGrid As GridControl = sender
|
|
Dim oChildIds = GetIdsFromDataRows(GetModifiedRows(oGrid, e.Data))
|
|
|
|
For Each oChildId In oChildIds
|
|
Dim oRelationRecordId = GetAssignmentRecord(_ParentRecordId, oChildId)
|
|
|
|
RaiseEvent ChildAdded(_ParentRecordId, oChildId, oRelationRecordId)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub GridAssignedToParent_DragDrop(sender As Object, e As DragEventArgs) Handles GridAssignedToParent.DragDrop
|
|
Dim oGrid As GridControl = sender
|
|
Dim oChildIds = GetIdsFromDataRows(GetModifiedRows(oGrid, e.Data))
|
|
|
|
For Each oChildId In oChildIds
|
|
Dim oRelationRecordId = GetAssignmentRecord(_ParentRecordId, oChildId)
|
|
|
|
RaiseEvent ChildRemoved(_ParentRecordId, oChildId, oRelationRecordId)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub ViewParentList_FocusedRowObjectChanged(sender As Object, e As FocusedRowObjectChangedEventArgs) Handles ViewParentList.FocusedRowObjectChanged
|
|
Dim oRowHandle = e.FocusedRowHandle
|
|
_ParentRecordId = ViewParentList.GetRowCellValue(oRowHandle, ClassConstants.ATTRIBUTE_ID_COLUMN)
|
|
|
|
Dim oAssignedChildIds = From oRow In _AssignmentList.AsEnumerable()
|
|
Where oRow.Item(_ParentIdColumn) = _ParentRecordId
|
|
Select oRow.Item(_ChildIdColumn)
|
|
|
|
Dim oAssignedChildren As EnumerableRowCollection(Of DataRow) = From oRow In _ChildList.AsEnumerable()
|
|
Where oAssignedChildIds.Contains(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN))
|
|
|
|
Dim oNotAssignedChildren As EnumerableRowCollection(Of DataRow) = From oRow In _ChildList.AsEnumerable()
|
|
Where Not oAssignedChildIds.Contains(oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN))
|
|
|
|
GridAssignedToParent.DataSource = MaybeCopyToDataTable(oAssignedChildren)
|
|
GridNotAssignedToParent.DataSource = MaybeCopyToDataTable(oNotAssignedChildren)
|
|
End Sub
|
|
|
|
Private Sub View_LayoutChanged(sender As Object, e As EventArgs) Handles ViewNotAssignedToParent.Layout, ViewAssignedToParent.Layout, ViewParentList.Layout
|
|
Dim oView As BaseView = sender
|
|
Dim oLayoutPath = GetLayoutPath(GroupName.LayoutUserManager, Name, oView.Name)
|
|
oView.SaveLayoutToXml(oLayoutPath)
|
|
End Sub
|
|
End Class
|