move clientsuite to GUIs.ClientSuite folder

This commit is contained in:
Jonathan Jenne
2019-04-15 14:30:00 +02:00
parent b4151e8b81
commit ddec69bc05
124 changed files with 8 additions and 6 deletions

View File

@@ -0,0 +1,237 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class UserControlAssignment
Inherits System.Windows.Forms.UserControl
'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.SplitterMain = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridNotAssignedToParent = New DevExpress.XtraGrid.GridControl()
Me.ViewNotAssignedToParent = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.PanelControl2 = New DevExpress.XtraEditors.PanelControl()
Me.labelNotAssignedToParent = New System.Windows.Forms.Label()
Me.SplitterInner = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridParentList = New DevExpress.XtraGrid.GridControl()
Me.ViewParentList = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.PanelControl1 = New DevExpress.XtraEditors.PanelControl()
Me.labelParentList = New System.Windows.Forms.Label()
Me.GridAssignedToParent = New DevExpress.XtraGrid.GridControl()
Me.ViewAssignedToParent = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.PanelControl3 = New DevExpress.XtraEditors.PanelControl()
Me.labelAssignedToParent = New System.Windows.Forms.Label()
CType(Me.SplitterMain, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitterMain.SuspendLayout()
CType(Me.GridNotAssignedToParent, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewNotAssignedToParent, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PanelControl2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.PanelControl2.SuspendLayout()
CType(Me.SplitterInner, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitterInner.SuspendLayout()
CType(Me.GridParentList, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewParentList, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.PanelControl1.SuspendLayout()
CType(Me.GridAssignedToParent, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ViewAssignedToParent, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PanelControl3, System.ComponentModel.ISupportInitialize).BeginInit()
Me.PanelControl3.SuspendLayout()
Me.SuspendLayout()
'
'SplitterMain
'
Me.SplitterMain.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitterMain.Location = New System.Drawing.Point(0, 0)
Me.SplitterMain.Name = "SplitterMain"
Me.SplitterMain.Panel1.Controls.Add(Me.GridNotAssignedToParent)
Me.SplitterMain.Panel1.Controls.Add(Me.PanelControl2)
Me.SplitterMain.Panel1.Text = "Panel1"
Me.SplitterMain.Panel2.Controls.Add(Me.SplitterInner)
Me.SplitterMain.Panel2.Text = "Panel2"
Me.SplitterMain.Size = New System.Drawing.Size(892, 447)
Me.SplitterMain.SplitterPosition = 284
Me.SplitterMain.TabIndex = 0
Me.SplitterMain.Text = "SplitContainerControl1"
'
'GridNotAssignedToParent
'
Me.GridNotAssignedToParent.AllowDrop = True
Me.GridNotAssignedToParent.Dock = System.Windows.Forms.DockStyle.Fill
Me.GridNotAssignedToParent.Location = New System.Drawing.Point(0, 41)
Me.GridNotAssignedToParent.MainView = Me.ViewNotAssignedToParent
Me.GridNotAssignedToParent.Name = "GridNotAssignedToParent"
Me.GridNotAssignedToParent.Size = New System.Drawing.Size(284, 406)
Me.GridNotAssignedToParent.TabIndex = 2
Me.GridNotAssignedToParent.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.ViewNotAssignedToParent})
'
'ViewNotAssignedToParent
'
Me.ViewNotAssignedToParent.GridControl = Me.GridNotAssignedToParent
Me.ViewNotAssignedToParent.Name = "ViewNotAssignedToParent"
'
'PanelControl2
'
Me.PanelControl2.Controls.Add(Me.labelNotAssignedToParent)
Me.PanelControl2.Dock = System.Windows.Forms.DockStyle.Top
Me.PanelControl2.Location = New System.Drawing.Point(0, 0)
Me.PanelControl2.Name = "PanelControl2"
Me.PanelControl2.Size = New System.Drawing.Size(284, 41)
Me.PanelControl2.TabIndex = 1
'
'labelNotAssignedToParent
'
Me.labelNotAssignedToParent.BackColor = System.Drawing.Color.Transparent
Me.labelNotAssignedToParent.Dock = System.Windows.Forms.DockStyle.Fill
Me.labelNotAssignedToParent.Location = New System.Drawing.Point(2, 2)
Me.labelNotAssignedToParent.Name = "labelNotAssignedToParent"
Me.labelNotAssignedToParent.Size = New System.Drawing.Size(280, 37)
Me.labelNotAssignedToParent.TabIndex = 0
Me.labelNotAssignedToParent.Text = "Bitte anpassen!"
Me.labelNotAssignedToParent.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'SplitterInner
'
Me.SplitterInner.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitterInner.Location = New System.Drawing.Point(0, 0)
Me.SplitterInner.Name = "SplitterInner"
Me.SplitterInner.Panel1.Controls.Add(Me.GridParentList)
Me.SplitterInner.Panel1.Controls.Add(Me.PanelControl1)
Me.SplitterInner.Panel1.Text = "Panel1"
Me.SplitterInner.Panel2.Controls.Add(Me.GridAssignedToParent)
Me.SplitterInner.Panel2.Controls.Add(Me.PanelControl3)
Me.SplitterInner.Panel2.Text = "Panel2"
Me.SplitterInner.Size = New System.Drawing.Size(596, 447)
Me.SplitterInner.SplitterPosition = 302
Me.SplitterInner.TabIndex = 0
Me.SplitterInner.Text = "SplitContainerControl2"
'
'GridParentList
'
Me.GridParentList.Dock = System.Windows.Forms.DockStyle.Fill
Me.GridParentList.Location = New System.Drawing.Point(0, 41)
Me.GridParentList.MainView = Me.ViewParentList
Me.GridParentList.Name = "GridParentList"
Me.GridParentList.Size = New System.Drawing.Size(302, 406)
Me.GridParentList.TabIndex = 1
Me.GridParentList.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.ViewParentList})
'
'ViewParentList
'
Me.ViewParentList.GridControl = Me.GridParentList
Me.ViewParentList.Name = "ViewParentList"
'
'PanelControl1
'
Me.PanelControl1.Controls.Add(Me.labelParentList)
Me.PanelControl1.Dock = System.Windows.Forms.DockStyle.Top
Me.PanelControl1.Location = New System.Drawing.Point(0, 0)
Me.PanelControl1.Name = "PanelControl1"
Me.PanelControl1.Size = New System.Drawing.Size(302, 41)
Me.PanelControl1.TabIndex = 0
'
'labelParentList
'
Me.labelParentList.BackColor = System.Drawing.Color.Transparent
Me.labelParentList.Dock = System.Windows.Forms.DockStyle.Fill
Me.labelParentList.Location = New System.Drawing.Point(2, 2)
Me.labelParentList.Name = "labelParentList"
Me.labelParentList.Size = New System.Drawing.Size(298, 37)
Me.labelParentList.TabIndex = 0
Me.labelParentList.Text = "Bitte anpassen!"
Me.labelParentList.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'GridAssignedToParent
'
Me.GridAssignedToParent.AllowDrop = True
Me.GridAssignedToParent.Dock = System.Windows.Forms.DockStyle.Fill
Me.GridAssignedToParent.Location = New System.Drawing.Point(0, 41)
Me.GridAssignedToParent.MainView = Me.ViewAssignedToParent
Me.GridAssignedToParent.Name = "GridAssignedToParent"
Me.GridAssignedToParent.Size = New System.Drawing.Size(282, 406)
Me.GridAssignedToParent.TabIndex = 2
Me.GridAssignedToParent.Tag = "001"
Me.GridAssignedToParent.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.ViewAssignedToParent})
'
'ViewAssignedToParent
'
Me.ViewAssignedToParent.GridControl = Me.GridAssignedToParent
Me.ViewAssignedToParent.Name = "ViewAssignedToParent"
'
'PanelControl3
'
Me.PanelControl3.Controls.Add(Me.labelAssignedToParent)
Me.PanelControl3.Dock = System.Windows.Forms.DockStyle.Top
Me.PanelControl3.Location = New System.Drawing.Point(0, 0)
Me.PanelControl3.Name = "PanelControl3"
Me.PanelControl3.Size = New System.Drawing.Size(282, 41)
Me.PanelControl3.TabIndex = 1
'
'labelAssignedToParent
'
Me.labelAssignedToParent.BackColor = System.Drawing.Color.Transparent
Me.labelAssignedToParent.Dock = System.Windows.Forms.DockStyle.Fill
Me.labelAssignedToParent.Location = New System.Drawing.Point(2, 2)
Me.labelAssignedToParent.Name = "labelAssignedToParent"
Me.labelAssignedToParent.Size = New System.Drawing.Size(278, 37)
Me.labelAssignedToParent.TabIndex = 0
Me.labelAssignedToParent.Text = "Bitte anpassen!"
Me.labelAssignedToParent.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'UserControlAssignment
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.SplitterMain)
Me.Name = "UserControlAssignment"
Me.Size = New System.Drawing.Size(892, 447)
CType(Me.SplitterMain, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitterMain.ResumeLayout(False)
CType(Me.GridNotAssignedToParent, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewNotAssignedToParent, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PanelControl2, System.ComponentModel.ISupportInitialize).EndInit()
Me.PanelControl2.ResumeLayout(False)
CType(Me.SplitterInner, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitterInner.ResumeLayout(False)
CType(Me.GridParentList, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewParentList, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PanelControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.PanelControl1.ResumeLayout(False)
CType(Me.GridAssignedToParent, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ViewAssignedToParent, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PanelControl3, System.ComponentModel.ISupportInitialize).EndInit()
Me.PanelControl3.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents SplitterMain As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents GridNotAssignedToParent As DevExpress.XtraGrid.GridControl
Friend WithEvents ViewNotAssignedToParent As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents PanelControl2 As DevExpress.XtraEditors.PanelControl
Friend WithEvents SplitterInner As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents GridParentList As DevExpress.XtraGrid.GridControl
Friend WithEvents ViewParentList As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents PanelControl1 As DevExpress.XtraEditors.PanelControl
Friend WithEvents GridAssignedToParent As DevExpress.XtraGrid.GridControl
Friend WithEvents ViewAssignedToParent As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents PanelControl3 As DevExpress.XtraEditors.PanelControl
Friend WithEvents labelNotAssignedToParent As Label
Friend WithEvents labelParentList As Label
Friend WithEvents labelAssignedToParent As Label
End Class

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,205 @@
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 GridControlDefaults.DefaultGridSettings).
ProcessContainer(AddressOf GridControlDefaults.ReadOnlyGridSettings).
ProcessControl(AddressOf GridControlDefaults.CheckboxSelectGridSettings, GridNotAssignedToParent).
ProcessControl(AddressOf GridControlDefaults.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 ChildRemoved(_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 ChildAdded(_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)
If _ChildList Is Nothing Then
Exit Sub
End If
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)) And oRow.Item(ClassConstants.ATTRIBUTE_ID_COLUMN) <> _ParentRecordId
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

View File

@@ -0,0 +1,207 @@
Imports DigitalData.GUIs.ClientSuite.Base
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmUserManager
Inherits BaseRibbonForm
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmUserManager))
Me.UserRibbon = New DevExpress.XtraBars.Ribbon.RibbonControl()
Me.BarButtonUserEdit = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonGroupEdit = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonAssign = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonRefresh = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPageCategoryUserManager = New DevExpress.XtraBars.Ribbon.RibbonPageCategory()
Me.RibbonPageUserManager = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.UserNavbar = New DevExpress.XtraBars.Navigation.OfficeNavigationBar()
Me.NavbarUser2Group = New DevExpress.XtraBars.Navigation.NavigationBarItem()
Me.NavbarGroup2Group = New DevExpress.XtraBars.Navigation.NavigationBarItem()
Me.ContentPanel = New DevExpress.XtraEditors.PanelControl()
CType(Me.UserRibbon, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.UserNavbar, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.ContentPanel, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'UserRibbon
'
Me.UserRibbon.ExpandCollapseItem.Id = 0
Me.UserRibbon.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.UserRibbon.ExpandCollapseItem, Me.BarButtonUserEdit, Me.BarButtonGroupEdit, Me.BarButtonAssign, Me.BarButtonItem1, Me.BarButtonRefresh})
Me.UserRibbon.Location = New System.Drawing.Point(0, 0)
Me.UserRibbon.MaxItemId = 10
Me.UserRibbon.MdiMergeStyle = DevExpress.XtraBars.Ribbon.RibbonMdiMergeStyle.Always
Me.UserRibbon.Name = "UserRibbon"
Me.UserRibbon.PageCategories.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageCategory() {Me.RibbonPageCategoryUserManager})
Me.UserRibbon.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
Me.UserRibbon.Size = New System.Drawing.Size(1070, 146)
Me.UserRibbon.StatusBar = Me.RibbonStatusBar
'
'BarButtonUserEdit
'
Me.BarButtonUserEdit.Caption = "Benutzer Verwaltung"
Me.BarButtonUserEdit.Id = 1
Me.BarButtonUserEdit.ImageOptions.Image = CType(resources.GetObject("BarButtonUserEdit.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonUserEdit.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonUserEdit.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonUserEdit.Name = "BarButtonUserEdit"
'
'BarButtonGroupEdit
'
Me.BarButtonGroupEdit.Caption = "Gruppen Verwaltung"
Me.BarButtonGroupEdit.Id = 2
Me.BarButtonGroupEdit.ImageOptions.Image = CType(resources.GetObject("BarButtonGroupEdit.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonGroupEdit.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonGroupEdit.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonGroupEdit.Name = "BarButtonGroupEdit"
'
'BarButtonAssign
'
Me.BarButtonAssign.Caption = "Zuordnen"
Me.BarButtonAssign.Id = 6
Me.BarButtonAssign.ImageOptions.Image = CType(resources.GetObject("BarButtonAssign.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonAssign.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonAssign.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonAssign.Name = "BarButtonAssign"
'
'BarButtonItem1
'
Me.BarButtonItem1.Caption = "Zuordnung aufheben"
Me.BarButtonItem1.Id = 7
Me.BarButtonItem1.ImageOptions.Image = CType(resources.GetObject("BarButtonItem1.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonItem1.Name = "BarButtonItem1"
'
'BarButtonRefresh
'
Me.BarButtonRefresh.Caption = "Neu Laden"
Me.BarButtonRefresh.Id = 8
Me.BarButtonRefresh.ImageOptions.Image = CType(resources.GetObject("BarButtonRefresh.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonRefresh.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonRefresh.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonRefresh.Name = "BarButtonRefresh"
'
'RibbonPageCategoryUserManager
'
Me.RibbonPageCategoryUserManager.Name = "RibbonPageCategoryUserManager"
Me.RibbonPageCategoryUserManager.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPageUserManager})
Me.RibbonPageCategoryUserManager.Text = "User Manager"
'
'RibbonPageUserManager
'
Me.RibbonPageUserManager.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2, Me.RibbonPageGroup3})
Me.RibbonPageUserManager.Name = "RibbonPageUserManager"
Me.RibbonPageUserManager.Text = "Allgemein"
'
'RibbonPageGroup1
'
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonUserEdit)
Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonGroupEdit)
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
Me.RibbonPageGroup1.Text = "Sprungmarken"
'
'RibbonPageGroup2
'
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonAssign)
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
Me.RibbonPageGroup2.Text = "Zuordnung"
'
'RibbonPageGroup3
'
Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonRefresh)
Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
Me.RibbonPageGroup3.Text = "Daten"
'
'RibbonStatusBar
'
Me.RibbonStatusBar.HideWhenMerging = DevExpress.Utils.DefaultBoolean.[True]
Me.RibbonStatusBar.Location = New System.Drawing.Point(0, 519)
Me.RibbonStatusBar.Name = "RibbonStatusBar"
Me.RibbonStatusBar.Ribbon = Me.UserRibbon
Me.RibbonStatusBar.Size = New System.Drawing.Size(1070, 21)
'
'UserNavbar
'
Me.UserNavbar.Dock = System.Windows.Forms.DockStyle.Bottom
Me.UserNavbar.Items.AddRange(New DevExpress.XtraBars.Navigation.NavigationBarItem() {Me.NavbarUser2Group, Me.NavbarGroup2Group})
Me.UserNavbar.Location = New System.Drawing.Point(0, 474)
Me.UserNavbar.Name = "UserNavbar"
Me.UserNavbar.Size = New System.Drawing.Size(1070, 45)
Me.UserNavbar.TabIndex = 2
Me.UserNavbar.Text = "OfficeNavigationBar1"
'
'NavbarUser2Group
'
Me.NavbarUser2Group.Name = "NavbarUser2Group"
Me.NavbarUser2Group.Text = "Userzuordnung"
'
'NavbarGroup2Group
'
Me.NavbarGroup2Group.Name = "NavbarGroup2Group"
Me.NavbarGroup2Group.ShowPeekFormOnItemHover = DevExpress.Utils.DefaultBoolean.[True]
Me.NavbarGroup2Group.Text = "Gruppenzuordnung"
'
'ContentPanel
'
Me.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill
Me.ContentPanel.Location = New System.Drawing.Point(0, 146)
Me.ContentPanel.Name = "ContentPanel"
Me.ContentPanel.Size = New System.Drawing.Size(1070, 328)
Me.ContentPanel.TabIndex = 8
'
'frmUserManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1070, 540)
Me.Controls.Add(Me.ContentPanel)
Me.Controls.Add(Me.UserNavbar)
Me.Controls.Add(Me.RibbonStatusBar)
Me.Controls.Add(Me.UserRibbon)
Me.DefaultRibbonPage = Me.RibbonPageUserManager
Me.Name = "frmUserManager"
Me.Ribbon = Me.UserRibbon
Me.ShowIcon = False
Me.StatusBar = Me.RibbonStatusBar
Me.Text = "User Manager"
CType(Me.UserRibbon, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.UserNavbar, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.ContentPanel, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents UserRibbon As DevExpress.XtraBars.Ribbon.RibbonControl
Friend WithEvents RibbonPageUserManager As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents RibbonStatusBar As DevExpress.XtraBars.Ribbon.RibbonStatusBar
Friend WithEvents BarButtonUserEdit As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonGroupEdit As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageCategoryUserManager As DevExpress.XtraBars.Ribbon.RibbonPageCategory
Friend WithEvents BarButtonAssign As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents BarButtonRefresh As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents UserNavbar As DevExpress.XtraBars.Navigation.OfficeNavigationBar
Friend WithEvents NavbarUser2Group As DevExpress.XtraBars.Navigation.NavigationBarItem
Friend WithEvents NavbarGroup2Group As DevExpress.XtraBars.Navigation.NavigationBarItem
Friend WithEvents ContentPanel As DevExpress.XtraEditors.PanelControl
End Class

View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BarButtonUserEdit.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAydEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO1Bl
cnNvbjtDb250YWN0O1VzZXI7Q2xpZW50fhE26AAAAMxJREFUOE+l0TsKwkAUheEUYu8yFGystIr22UN2
4RpsrK2tXIErCIKuISvQOhYqMv4HZuIwDJmgxQfJPXMPeWTGmL9Eh+vDbo4T7tYZuc1auo8tD3CFCdww
RLJgjHDZmSBZsERsWVZIFmwQWxZlyYIF3giXNdPH7S4QwgphQWWzXgU5nnDLuu73Gx0OlLhYpTfvLiAY
YYuhN9P/10xZvIDBDEe8oMfeY2rpWjNlOqOz3wJuCjzg3jlFZwu/oPbCvmq/oAnCPpq24Hcm+wDispls
ZjsJhAAAAABJRU5ErkJggg==
</value>
</data>
<data name="BarButtonUserEdit.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAydEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO1Bl
cnNvbjtDb250YWN0O1VzZXI7Q2xpZW50fhE26AAAAcdJREFUWEfF1r8rxVEYx3HFYjAoshKLwd2tpCiL
8rdIBonl1t39WKxSBjsLKynJoKSIUchAUV/vU9+vnuf0nOd8B/caXsPn3PN8nsNN6SqK4l+psLS3Vcc8
9vGIr9ITDrAg++pQgYKcTRQZu7IzRwWGPbOwFloWZa9HBQY94dduLbMcyl6PCgx6bmAts9zKXo8KDHre
YS2zvMpejwoMeqxFKZ+y16MCgylTsBZ5pmR3igoMpWzDWuLZlt0pKjCU0oS1xNOU3SkqMJQyimdYiyzh
7qjsTlGBIc8qrGWWZdnrUYFBzwSsZZYJ2etRgcGcI1gLpWPZmaMCwzkNfMBaHITPGrIzRwWG65jDC+Ll
b5iTfXWoQEFdg1hB+EpOsYYh2VWXCpTkdBtnv8qOHtmZo0JcGJnEBcbEWSz8pVxiUvZ6VBBFlWGs4xrV
d32CXsR3+3CO6l6Y2cCI3BFTgcuVfuwg/L9XFUpnmEZPaQZXsO6GjtDVL3dVVOBSMI47WGWx75L1WSx0
jst9gQpcGMB9OdAOoXtA7owf0BKX26Uld8YPaOdPX7mXO+MHWAN/Tu6MH/AQX26DB7lTPeA/mIedZB52
knnYOUXXD9NKheoC25U6AAAAAElFTkSuQmCC
</value>
</data>
<data name="BarButtonGroupEdit.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1Vz
ZXKTe2BJAAAA8klEQVQ4T6XQvw7BUBQG8BKJmPoMHoDN6gEsxq4GTyCiI29hMBgx9jFIvIQY7BKduL6v
uac5vU6HxvBL6vz59DRyzv3FLDZRPqwO2xbs4OntoQ1m3QoYgQuwZtatgEQNXGEOHW8GZ5B+YgWkvvmB
unPewJnUCojhBReoO4c9zsQ/AT5kCUfQ5wjW2FvqHb3MWwfQBzlHY429IXTKAPzowgZucIcJyDmyXLw2
sMcZznKnx4AT6H+iBfAc+c1n1vQMZQzIVeEBa5Bzxl7x2sAeZ2Q+L7+B/w7hOVOv8tp6JwywzglleicM
0OfUyfVOJaA5F30Bv8maeRXqkFsAAAAASUVORK5CYII=
</value>
</data>
<data name="BarButtonGroupEdit.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1Vz
ZXKTe2BJAAACnklEQVRYR8XVz4tPYRTH8cEoP4YaRalZ2UwRIkINxYo0C9mwYYGFYqexkI38BSwsJKTM
kKyk1KwoIT83IlZ+syKNRuTr/dE9+jzPPHfmmsXX4lXfc+55zrlz73Of6Wi1Wv9VMdlOSTAweMptxHV8
xA98wg1sQl4batf4HJcEFIa1+IlWgfIb4PWN1viskAQUhQsoNQqX4PWN1viskAQUhUfVojqP4fWN1vis
kAQUhRfVopLzWAWvl3lYh3P4hXzdS58VkoAiWY66d3kMqtmFW/DNdhu7MQVHkK9Vz6U+T5KAAumvFuRG
0IWjlis5jpn4YrnQ7/MkCSiQGXhSLXB3MAtfLVfyDXNx03KinjN8niQBBUGP0hfLNazJcnXWQ/We2+Oz
QhJQFPSXfoA3OImtWa6O6k5YrF6zfVZIAorcZnxHNNFff8Di8RzE6uq3emzxOS4JKMzpiziNu1gE7YN8
WMk9LMZZjNn5LgkoDp1aaHEYRmlgbjjrq16dngtJQFEP9uMh3mMB/AbUqO6MCLq+LOupc0I91bvHZ0ZR
N85Ah4o3e4W90PvcjmnIP6+cDigdRkuwD2/g1zVDs7r/3AA/5uM5vKiOPq9tWS6n631ZrkTH/ULdwJAl
J3IVWjNoOXexeqKqK13PDalYR2zpYp0dmI5D0CtS7jUOQ69oZ5VrYkQ3UDqzS55Bw0XvWGtljv2eWj0B
7RfVl/q4z393Y7VwIr3Q4x+wnNN/wSvo9b7jSQJr5PQfUI/3KeLOdbpps3mdHr1/oqrXui6fkUsCinPa
zfln5O7jMh5YLqf1fT7HJQGFbgX+dYPWUZ+VPiskAUWu6bHbVHI8hySgyI2i1GiyRn1WSAKK3DuUGk3W
W58VxiTarZhsp2KynYrJ9ml1/AZUr3hglRjmdgAAAABJRU5ErkJggg==
</value>
</data>
<data name="BarButtonAssign.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAbdEVYdFRpdGxlAEFkZDtQbHVzO0JhcnM7UmliYm9u
O5UGMy8AAABgSURBVDhP3YxRCoAwDEN3QS/lqbxdtNKUTDJEHAh+vNGl6WsAXmFDsqwbkphtx4bkR4Kc
bceGRAUjzofFp0wVFPEnWrzk1e0CJfMS6I7ME4w4Sp1Ad8SGhII4/kZwD9oOmV+r+RzWkL4AAAAASUVO
RK5CYII=
</value>
</data>
<data name="BarButtonAssign.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAbdEVYdFRpdGxlAEFkZDtQbHVzO0JhcnM7UmliYm9u
O5UGMy8AAACPSURBVFhH7c5RCoQwDEVRN+imXJW7i82HIOlFHhKiSD4Owp1p+xYzexXGShgrYayEsRJG
xbrtdhV/V2FU9IAe0AP+PSBeniW+46bg6HCG+I6bgqPDGeI7bgqODmeI77gpqJTLFRgVNGB8b13PnzAq
xoXfG/AERkUPoAHji/+9g1HRA7JgrISxEsZKGOvYcgB55Y6E3tOuXgAAAABJRU5ErkJggg==
</value>
</data>
<data name="BarButtonItem1.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAjdEVYdFRpdGxlAENhbmNlbDtTdG9wO0V4aXQ7QmFy
cztSaWJib247TJaWsgAAAMJJREFUOE+Nk0sKAjEQRHM4YVZ6CS8gfhBGHK/pSRRXbRWkJOlOq4sHSf0Y
BlLMrNy3qzWYef4HZC/s8KzyCxi4+rAHmVvNsrOhcKqCSEfgqSz2Ms7OCCPQfPlIvQ2kIzgPy+QzUIN+
ZAFpmXQDBAE/0tKVSXcRCI5GQpkEgSDsP5sso2wQEByVRRjpLgj48gGEH9t2vpYbLx35WRbQhiM0+DBa
I5QFPD8yU5zAowppWSCjkSeYJHJk58MZyPIBTmZW3tJAnMwmSptiAAAAAElFTkSuQmCC
</value>
</data>
<data name="BarButtonItem1.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAjdEVYdFRpdGxlAENhbmNlbDtTdG9wO0V4aXQ7QmFy
cztSaWJib247TJaWsgAAAW5JREFUWEfFlk1KBDEUhGfmAg56JTcuHEGP4FFFFMVZz1VcxaomD57pek1e
hLj4FilSP9Dd0LtSyr8ixZlIcSZSnIkUL8+3f6LJOvhzixRr0BV4AXf13I3LuQev4OjzPVKEgeUfoIBv
kBpRM1hOLzM+gRyxEnDxALiaRiM7wpcbzNy3fb8OBi4+gTagd4Qq5/lBda0EgsvksRrboK0RqXIiRRiM
zIh0OZEiTJ6eEUPlRIowtmyNGC4nUoRZEY0YLidSRECEGuFJlRMpImSLaMRSDmRmhBQZsoF65jZgeTFV
ZoQUGRIQlRvLCJUZIUWEKKK3XWndI6SIgN5yPvPwE1XZLVKEubfc7gyPkCKMmXJjaIQUYSJR+Qn4Yk96
hBRhGCk3UiNWAi7uwVs1+oCeckONeAfdPyTX4Ksas+WW4UecwU3bQ1YCwWXCEVydKicuhyOYIcuJFC0I
8P/Qn7tosvK/5TOR4kykOBMpzqPsfgBphQ1j4i+mWAAAAABJRU5ErkJggg==
</value>
</data>
<data name="BarButtonRefresh.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAndEVYdFRpdGxlAFJlZnJlc2g7UmVwZWF0O0JhcnM7
UmliYm9uO1JlbG9hZM1N9ukAAADSSURBVDhPpZKxDcJAEASNRAE0YNGBc4qwyEjIHSJHkNMEJZCSmYx+
aOLZff2eTugegQlGOu3e7b9936SU/iIUf8GK/nwXLRjBBJ4F1tTo5b5awAIcQKpwAxsQBqxADxhyAgNY
F1g/gELaKGBfGhhiuvM7oJBRukwO6Zo5RA0e6LwJ/UlaNCwsJPCMjyaHj9fLEnX1EH89roriIM3D5uLb
MHXfwD3T4I/qpDvfh9jn+QY+Eq5IIe9r3AGF2JwPIHwkConYgtxbCyDznvJcQvF7UvMC/+yHWnrFMzsA
AAAASUVORK5CYII=
</value>
</data>
<data name="BarButtonRefresh.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAndEVYdFRpdGxlAFJlZnJlc2g7UmVwZWF0O0JhcnM7
UmliYm9uO1JlbG9hZM1N9ukAAAHOSURBVFhHxZY9TsNQEIRTBJp0SBQoFBQg5QTQJSfwVVLSJkJCHAFu
4APQcIB01KkoKLgCvZlB3mjfZl7sEPFSfEo8b3Z35L/nQdM0R0WKJZFiSaRYEimWRIo5qoe3CZiDGqzB
dwv/U+PaRNXmkGIETcdgCT5A0wE99I5Vr4gUPWh0C15BHNQFa6aqp0eKBhqQC/AJ1JAuVmBnCCkSFJKq
/b0CFuIdLMAMnLXwPzWuxRA8E9nLIUWCIg5nAx/iEdwoP+EaeAExxFL5yZZwXz8PUWDDDQtxEv0ReEYg
huCNKZ+O5ADDz2GMw43Ke3cBL89EvBxz5U0OYMoNN/YJwXvC19bKt/kDQ9dwo1cI+Hhj+rq18pm573Aj
CcHjsN6X6qDiA0P81m8aeLDId7s3z5QvAt/el3GrCYGBG4svWCifAt6uEMmZS4oNmLir+SI+UtkXUATe
XIiKj7r3JoUGjNx2487Hl8tI+T3wnAIVgsOH0Z8ceFDALdU3IAzR9Sp+AtfAh0hOu0eKBEX8BlDbcJ/N
6Av4EHIGkaKBwinglhpD9IEhLoHsbUjRgwYM8dcPkjvV0yPFCBod75PMg6bH+Sj9T6RYEimWRIolkWI5
msEP/+Ty+jngCqIAAAAASUVORK5CYII=
</value>
</data>
</root>

View File

@@ -0,0 +1,153 @@
Imports DigitalData.Modules.Logging
Public Class frmUserManager
Private _Logger As Logger
Private _UserTable As DataTable
Private _GroupTable As DataTable
Private _UserToGroupTable As DataTable
Private _GroupToGroupTable As DataTable
Private _UserToGroupControl As UserControlAssignment
Private _GroupToGroupControl As UserControlAssignment
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
_Logger = My.LogConfig.GetLogger()
End Sub
Private Async Sub frmUserManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Await InitDataAsync()
UserNavbar.SelectedItem = NavbarUser2Group
End Sub
Private Sub ShowUserToGroupControl()
If _UserToGroupControl Is Nothing Then
_UserToGroupControl = New UserControlAssignment() With {
.TextAssignedToParent = "Zugeordnete Benutzer",
.TextNotAssignedToParent = "Nicht zugeordnete Benutzer",
.TextParentList = "Verfügbare Gruppen",
.Dock = DockStyle.Fill
}
AddHandler _UserToGroupControl.ChildAdded, AddressOf HandleUserAddedToGroup
AddHandler _UserToGroupControl.ChildRemoved, AddressOf HandleUserRemovedFromGroup
_UserToGroupControl.Init(_GroupTable, _UserTable, _UserToGroupTable, "GROUP_ID", "USER_ID")
ContentPanel.Controls.Add(_UserToGroupControl)
End If
_UserToGroupControl.Visible = True
End Sub
Private Sub ShowGroupToGroupControl()
If _GroupToGroupControl Is Nothing Then
_GroupToGroupControl = New UserControlAssignment() With {
.TextAssignedToParent = "Zugeordnete Gruppen",
.TextNotAssignedToParent = "Nicht zugeordnete Gruppen",
.TextParentList = "Verfügbare Gruppen",
.Dock = DockStyle.Fill
}
AddHandler _GroupToGroupControl.ChildAdded, AddressOf HandleGroupAddedToGroup
AddHandler _GroupToGroupControl.ChildRemoved, AddressOf HandleGroupRemovedFromGroup
_GroupToGroupControl.Init(_GroupTable, _GroupTable, _GroupToGroupTable, "GROUP2_ID", "GROUP1_ID")
_ContentPanel.Controls.Add(_GroupToGroupControl)
End If
_GroupToGroupControl.Visible = True
End Sub
Private Async Function InitDataAsync() As Task
_UserTable = Await GetAttributeListAsync("User")
_GroupTable = Await GetAttributeListAsync("Group")
_UserToGroupTable = Await GetAttributeListAsync("User2Group")
_GroupToGroupTable = Await GetAttributeListAsync("Group2Group")
End Function
Private Async Function UpdateDataAsync() As Task
_UserTable = Await GetAttributeListAsync("User")
_GroupTable = Await GetAttributeListAsync("Group")
_UserToGroupTable = Await GetAttributeListAsync("User2Group")
_GroupToGroupTable = Await GetAttributeListAsync("Group2Group")
_UserToGroupControl.UpdateData(_GroupTable, _UserTable, _UserToGroupTable)
_GroupToGroupControl.UpdateData(_GroupTable, _GroupTable, _GroupToGroupTable)
End Function
Private Async Sub HandleUserAddedToGroup(GroupId As Integer, UserId As Integer, RelationRecordId As Integer)
Dim oRecordId = Await My.Common.Commands.FNICM_RADM_NEW_USER2GROUP(UserId, GroupId)
Await UpdateDataAsync()
End Sub
Private Async Sub HandleUserRemovedFromGroup(GroupId As Integer, UserId As Integer, RelationRecordId As Integer)
Dim oResult = Await My.Common.Commands.FNICM_DELETE_RECORD_FINALLY(RelationRecordId)
Await UpdateDataAsync()
End Sub
Private Async Sub HandleGroupAddedToGroup(ParentGroupId As Integer, GroupId As Integer, RelationRecordId As Integer)
Dim oRecordId = Await My.Common.Commands.FNICM_RADM_NEW_GROUP2GROUP(GroupId, ParentGroupId)
Await UpdateDataAsync()
End Sub
Private Async Sub HandleGroupRemovedFromGroup(ParentGroupId As Integer, GroupId As Integer, RelationRecordId As Integer)
Dim oResult = Await My.Common.Commands.FNICM_DELETE_RECORD_FINALLY(RelationRecordId)
Await UpdateDataAsync()
End Sub
Private Async Function GetAttributeListAsync(AttributeName As String) As Task(Of DataTable)
Try
Dim oSQL = $"SELECT * FROM VWICM_{AttributeName.ToUpper}"
Dim oRequest = Await My.Channel.CreateDatabaseRequestAsync($"List Attribute {AttributeName}", False)
Dim oResult = Await My.Channel.ReturnDatatableAsync(oSQL)
Await My.Channel.CloseDatabaseRequestAsync()
Return oResult.Table
Catch ex As Exception
_Logger.Error(ex)
Throw ex
End Try
End Function
Private Sub BarButtonUserEdit_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonUserEdit.ItemClick
Dim oForm As New frmObjectEditor(ClassConstants.DB_USER_ATTRIBUTE_ID, ClassConstants.DB_USER_ATTRIBUTE_SYSKEY, _UserTable)
oForm.Show()
End Sub
Private Sub BarButtonGroupEdit_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonGroupEdit.ItemClick
Dim oForm As New frmObjectEditor(ClassConstants.DB_GROUP_ATTRIBUTE_ID, ClassConstants.DB_GROUP_ATTRIBUTE_SYSKEY, _GroupTable)
oForm.Show()
End Sub
Private Async Sub BarButtonRefresh_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonRefresh.ItemClick
Await UpdateDataAsync()
End Sub
Private Sub OfficeNavigationBar1_SelectedItemChanged(sender As Object, e As DevExpress.XtraBars.Navigation.NavigationBarItemEventArgs) Handles UserNavbar.SelectedItemChanged
' Hide all UserControls
For Each oControl As Control In ContentPanel.Controls
oControl.Visible = False
Next
' Then check the currently selected navbar item and show the corresponding UserControl
If UserNavbar.SelectedItem.Equals(NavbarUser2Group) Then
ShowUserToGroupControl()
ElseIf UserNavbar.SelectedItem.Equals(NavbarGroup2Group) Then
ShowGroupToGroupControl()
End If
End Sub
End Class