Imports System.ComponentModel
Imports DD_LIB_Standards
Imports DevExpress.Utils
Imports DevExpress.XtraEditors
Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraEditors.NavigatorButtons
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Views.Grid
Imports DigitalData.Controls.LookupGrid

Public Class ClassControlCreator

    ''' <summary>
    ''' Konstanten
    ''' </summary>
    Private Const DEFAULT_TEXT = "Bezeichnung definieren"

    Private Const DEFAULT_FONT_SIZE As Integer = 10
    Private Const DEFAULT_FONT_FAMILY As String = "Arial"
    Private Const DEFAULT_FONT_STYLE As FontStyle = FontStyle.Regular
    Private Const DEFAULT_COLOR As Integer = 0
    Private Const DEFAULT_WIDTH As Integer = 170
    Private Const DEFAULT_HEIGHT As Integer = 20
    Private Const DEFAULT_HEIGHT_TABLE As Integer = 150

    Public Const PREFIX_TEXTBOX = "TXT"
    Public Const PREFIX_LABEL = "LBL"
    Public Const PREFIX_CHECKBOX = "CHK"
    Public Const PREFIX_COMBOBOX = "CMB"
    Public Const PREFIX_DATETIMEPICKER = "DTP"
    Public Const PREFIX_DATAGRIDVIEW = "DGV"
    Public Const PREFIX_LOOKUP = "LU"
    Public Const PREFIX_TABLE = "TB"
    Public Const PREFIX_LINE = "LINE"
    Public Const PREFIX_BUTTON = "BTN"

    Public Shared GridTables As New Dictionary(Of String, DataTable)

    ''' <summary>
    ''' Standard Eigenschaften für alle Controls
    ''' </summary>
    Private Class ControlDBProps
        Public Guid As Integer
        Public Name As String
        Public Location As Point
        Public [Font] As Font
        Public [Color] As Color
        Public [ReadOnly] As Boolean
    End Class

    Public Class ControlMetadata
        Public Guid As Integer
        Public [ReadOnly] As Boolean = False
    End Class

    Private Shared Function TransformDataRow(row As DataRow) As ControlDBProps
        Dim x As Integer = row.Item("X_LOC")
        Dim y As Integer = row.Item("Y_LOC")
        Dim style As FontStyle = NotNull(row.Item("FONT_STYLE"), DEFAULT_FONT_STYLE)
        Dim size As Single = NotNull(row.Item("FONT_SIZE"), DEFAULT_FONT_SIZE)
        Dim familyString As String = NotNull(row.Item("FONT_FAMILY"), DEFAULT_FONT_FAMILY)
        Dim family As FontFamily = New FontFamily(familyString)

        Dim oGuid As Integer = row.Item("GUID")
        Dim oName As String = row.Item("NAME")
        Dim oLocation As New Point(x, y)
        Dim oFont As New Font(family, size, style, GraphicsUnit.Point)
        Dim oColor As Color = IntToColor(NotNull(row.Item("FONT_COLOR"), DEFAULT_COLOR))
        Dim oReadOnly As Boolean = row.Item("READ_ONLY")

        Return New ControlDBProps() With {
            .Guid = oGuid,
            .Name = oName,
            .Location = oLocation,
            .Font = oFont,
            .Color = oColor,
            .ReadOnly = oReadOnly
        }
    End Function

    Public Shared Function CreateBaseControl(ctrl As Control, OControlRow As DataRow, designMode As Boolean) As Control
        Try
            Dim props As ControlDBProps = TransformDataRow(OControlRow)

            ctrl.Tag = New ControlMetadata() With {
                .Guid = props.Guid,
                .ReadOnly = props.ReadOnly
            }
            ctrl.Name = props.Name
            ctrl.Location = props.Location
            ctrl.Font = props.Font
            ctrl.ForeColor = props.Color


            If designMode Then
                ctrl.Cursor = Cursors.Hand
            End If

            If props.ReadOnly Then
                ctrl.BackColor = Color.LightGray
            End If

            Return ctrl
        Catch ex As Exception
            LOGGER.Error(ex)
        End Try

    End Function

    ' ----------------------- NEW CONTROLS -----------------------

    Public Shared Function CreateNewTextBox(location As Point) As TextBox
        Dim control As New TextBox With {
            .Name = $"{PREFIX_TEXTBOX}_{clsTools.ShortGuid()}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
            .Location = location,
            .ReadOnly = True,
            .BackColor = Color.White,
            .Cursor = Cursors.Hand
        }

        Return control
    End Function

    Public Shared Function CreateNewLabel(location As Point) As Label
        Dim control As New Label With {
            .Name = $"{PREFIX_LABEL}_{clsTools.ShortGuid}",
            .Text = DEFAULT_TEXT,
            .AutoSize = True,
            .Location = location,
            .Cursor = Cursors.Hand
        }

        Return control
    End Function

    Public Shared Function CreateNewCheckbox(location As Point) As CheckBox
        Dim control As New CheckBox With {
            .Name = $"{PREFIX_CHECKBOX}_{clsTools.ShortGuid}",
            .AutoSize = True,
            .Text = DEFAULT_TEXT,
            .Cursor = Cursors.Hand,
            .Location = location,
            .CheckState = CheckState.Indeterminate
        }

        Return control
    End Function

    Public Shared Function CreateNewCombobox(location As Point) As ComboBox
        Dim control As New ComboBox With {
            .Name = $"{PREFIX_COMBOBOX}_{clsTools.ShortGuid}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
            .Cursor = Cursors.Hand,
            .Location = location
           }

        Return control
    End Function

    Public Shared Function CreateNewDatetimepicker(location As Point) As DateTimePicker
        Dim control As New DateTimePicker With {
            .Name = $"{PREFIX_DATETIMEPICKER}_{clsTools.ShortGuid}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
            .Cursor = Cursors.Hand,
            .Location = location,
            .Format = DateTimePickerFormat.Short
        }

        Return control
    End Function

    Public Shared Function CreateNewDatagridview(location As Point) As DataGridView
        Dim control As New DataGridView With {
            .Name = $"{PREFIX_DATAGRIDVIEW}_{clsTools.ShortGuid}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT_TABLE),
            .Cursor = Cursors.Hand,
            .Location = location,
            .AllowUserToAddRows = False,
            .AllowUserToDeleteRows = False,
            .AllowUserToResizeColumns = False,
            .AllowUserToResizeRows = False
        }

        control.Columns.Add(New DataGridViewTextBoxColumn With {
            .HeaderText = "",
            .Name = "column1"
        })

        Return control
    End Function

    Friend Shared Function CreateNewLookupControl(location As Point) As LookupControl2
        Dim control As New LookupControl2 With {
            .Name = $"{PREFIX_LOOKUP}_{clsTools.ShortGuid}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
            .Cursor = Cursors.Hand,
            .Location = location
        }

        Return control
    End Function

    Public Shared Function CreateNewTable(location As Point) As GridControl
        Dim oControl As New GridControl With {
            .Name = $"{PREFIX_TABLE}_{clsTools.ShortGuid}",
            .Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT_TABLE),
            .Cursor = Cursors.Hand,
            .Location = location
        }
        oControl.UseEmbeddedNavigator = True
        oControl.ForceInitialize()
        Dim oView As GridView = oControl.DefaultView
        oView.OptionsView.ShowGroupPanel = False

        Dim oDatatable As New DataTable()
        oDatatable.Columns.Add("column1", GetType(String))
        oDatatable.Columns.Add("column2", GetType(String))
        oControl.DataSource = oDatatable

        Return oControl
    End Function

    Public Shared Function CreateNewLine(location As Point) As LineLabel
        Dim control As New LineLabel With {
            .Name = $"{PREFIX_LINE}_{clsTools.ShortGuid}",
            .Text = "---------------------------------",
            .Size = New Size(100, 5),
            .Location = location
        }

        Return control
    End Function
    Public Shared Function CreateNewButton(location As Point) As Button
        Dim control As New Button With {
            .Name = $"{PREFIX_BUTTON}_{clsTools.ShortGuid}",
            .Size = New Size(108, 28),
            .Cursor = Cursors.Hand,
            .Location = location
           }

        Return control
    End Function

    ' ----------------------- EXISITING CONTROLS -----------------------

    Public Shared Function CreateExistingTextbox(oControlRow As DataRow, designMode As Boolean) As TextBox
        Try
            Dim control As TextBox = CreateBaseControl(New TextBox(), oControlRow, designMode)

            control.BackColor = Color.White

            If oControlRow.Item("HEIGHT") > 27 Then
                control.Multiline = True

            End If

            control.Height = oControlRow.Item("HEIGHT")
            control.Width = oControlRow.Item("WIDTH")

            If Not designMode Then
                control.AcceptsReturn = True
                control.ReadOnly = oControlRow.Item("READ_ONLY")
                control.TabStop = Not oControlRow.Item("READ_ONLY")
                control.BackColor = IIf(oControlRow.Item("READ_ONLY"), Color.LightGray, Color.White)
            Else
                control.ReadOnly = True
            End If

            Return control
        Catch ex As Exception
            LOGGER.Error(ex)
        End Try

    End Function

    Public Shared Function CreateExistingLabel(row As DataRow, designMode As Boolean) As Label
        Dim control As Label = CreateBaseControl(New Label(), row, designMode)
        Try
            control.Text = row.Item("CTRL_CAPTION_LANG")
        Catch ex As Exception
            control.Text = row.Item("CTRL_TEXT")
        End Try

        control.AutoSize = True

        Return control
    End Function
    Public Shared Function CreateExistingButton(row As DataRow, designMode As Boolean) As Button
        Dim oControl As Button = CreateBaseControl(New Button(), row, designMode)

        Dim ctrl_image As Bitmap = Nothing
        Dim oBitmap As Bitmap
        If Not IsDBNull(row.Item("IMAGE_CONTROL")) Then
            Dim obimg() As Byte = row.Item("IMAGE_CONTROL")
            oBitmap = ByteArrayToBitmap(obimg)
            ctrl_image = oBitmap
        End If

        Try
            oControl.Text = row.Item("CTRL_CAPTION_LANG")
        Catch ex As Exception
            oControl.Text = row.Item("CTRL_TEXT")
        End Try

        oControl.Height = row.Item("HEIGHT")
        oControl.Width = row.Item("WIDTH")

        If Not IsNothing(ctrl_image) And Not IsNothing(oBitmap) Then
            oControl.Image = oBitmap
            oControl.ImageAlign = ContentAlignment.MiddleLeft
            oControl.TextAlign = ContentAlignment.MiddleRight
        End If
        oControl.AutoSize = True

        Return oControl
    End Function
    Public Shared Function CreateExistingCombobox(row As DataRow, designMode As Boolean) As Windows.Forms.ComboBox
        Dim control As Windows.Forms.ComboBox = CreateBaseControl(New Windows.Forms.ComboBox(), row, designMode)

        control.Size = New Size(row.Item("WIDTH"), row.Item("HEIGHT"))

        If Not designMode Then
            control.Enabled = Not row.Item("READ_ONLY")
            control.TabStop = Not row.Item("READ_ONLY")
            control.BackColor = IIf(row.Item("READ_ONLY"), Color.LightGray, Color.White)

            control.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            control.AutoCompleteSource = AutoCompleteSource.ListItems
        End If

        Return control
    End Function

    Public Shared Function CreateExistingDatepicker(row As DataRow, designMode As Boolean) As DateTimePicker
        Dim control As DateTimePicker = CreateBaseControl(New DateTimePicker(), row, designMode)

        control.Size = New Size(row.Item("WIDTH"), row.Item("HEIGHT"))
        control.Format = DateTimePickerFormat.Short

        If Not designMode Then
            control.Enabled = Not row.Item("READ_ONLY")
            control.TabStop = Not row.Item("READ_ONLY")
        End If

        Return control
    End Function

    Public Shared Function CreateExisingCheckbox(row As DataRow, designMode As Boolean) As CheckBox
        Dim oCheckBox As CheckBox = CreateBaseControl(New CheckBox(), row, designMode)

        oCheckBox.AutoSize = True
        Try
            oCheckBox.Text = row.Item("CTRL_CAPTION_LANG")
        Catch ex As Exception
            oCheckBox.Text = row.Item("CTRL_TEXT")
        End Try
        oCheckBox.CheckState = CheckState.Indeterminate

        If Not designMode Then
            oCheckBox.Enabled = Not row.Item("READ_ONLY")
            oCheckBox.TabStop = Not row.Item("READ_ONLY")
        End If

        Return oCheckBox
    End Function

    Public Shared Function CreateExistingDataGridView(row As DataRow, designMode As Boolean) As DataGridView
        Dim control As DataGridView = CreateBaseControl(New DataGridView(), row, designMode)

        control.Size = New Size(row.Item("WIDTH"), row.Item("HEIGHT"))
        control.AllowUserToAddRows = False
        control.AllowUserToDeleteRows = False
        control.AllowUserToResizeColumns = False
        control.AllowUserToResizeRows = False
        control.AlternatingRowsDefaultCellStyle.BackColor = Color.Aqua

        Dim col As New DataGridViewTextBoxColumn
        col.HeaderText = ""
        col.Name = "column1"
        col.Width = control.Width - 30
        control.Columns.Add(col)

        If Not designMode Then
            control.Enabled = Not row.Item("READ_ONLY")
            control.TabStop = Not row.Item("READ_ONLY")
        End If

        Return control
    End Function

    Public Shared Function CreateExistingLookupControl(row As DataRow, designMode As Boolean) As LookupControl2
        Dim control As LookupControl2 = CreateBaseControl(New LookupControl2(), row, designMode)
        control.Width = row.Item("WIDTH")
        control.ReadOnly = row.Item("READ_ONLY")

        If designMode Then
            control.Cursor = Cursors.Hand
        End If

        Return control
    End Function

    Public Shared Function CreateExistingGridControl(row As DataRow, DT_MY_COLUMNS As DataTable, designMode As Boolean) As GridControl
        Dim oControl As GridControl = CreateBaseControl(New GridControl(), row, designMode)
        Dim oDatatable As New DataTable
        Dim oView As DevExpress.XtraGrid.Views.Grid.GridView

        oControl.ForceInitialize()

        oView = oControl.MainView
        oView.OptionsView.ShowGroupPanel = False
        oControl.ContextMenu = Nothing

        If Not designMode Then
            oView.OptionsBehavior.Editable = Not row.Item("READ_ONLY")
            oView.OptionsBehavior.ReadOnly = row.Item("READ_ONLY")
            ocontrol.UseEmbeddedNavigator = Not row.Item("READ_ONLY")

            If row.Item("VKT_ADD_ITEM") = True Then
                oView.OptionsBehavior.AllowAddRows = DefaultBoolean.True
                oView.OptionsBehavior.AllowDeleteRows = DefaultBoolean.True
                oView.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom
            Else
                oView.OptionsBehavior.AllowAddRows = DefaultBoolean.False
                oView.OptionsBehavior.AllowDeleteRows = DefaultBoolean.False
                oView.OptionsView.NewItemRowPosition = NewItemRowPosition.None
            End If
        End If

        oControl.Size = New Size(row.Item("WIDTH"), row.Item("HEIGHT"))

        ' Add and configure navigator to delete rows
        oControl.UseEmbeddedNavigator = True
        With oControl.EmbeddedNavigator.Buttons
            .CancelEdit.Visible = False
            .Edit.Visible = False
            .EndEdit.Visible = False
            .First.Visible = False
            .Last.Visible = False
            .Next.Visible = False
            .NextPage.Visible = False
            .PrevPage.Visible = False
            .Prev.Visible = False

        End With

        GridTables.Clear()

        For Each oRow As DataRow In DT_MY_COLUMNS.Rows
            ' Create Columns in Datatable

            Dim oColumn = New DataColumn() With {
                .DataType = GetType(String),
                .ColumnName = oRow.Item("SPALTENNAME"),
                .Caption = oRow.Item("SPALTEN_HEADER"),
                .ReadOnly = False
            }

            oDatatable.Columns.Add(oColumn)

            ' Fetch and cache Combobox results
            Dim oConnectionId As Integer = NotNull(oRow.Item("CONNECTION_ID"), 0)
            Dim oSqlCommand As String = NotNull(oRow.Item("SQL_COMMAND"), "")

            If Not clsPatterns.HasComplexPatterns(oSqlCommand) Then
                If oConnectionId > 0 And oSqlCommand <> "" Then
                    Try
                        Dim oComboboxDataTable As DataTable = ClassDatabase.Return_Datatable_ConId(oSqlCommand, oConnectionId)
                        GridTables.Add(oRow.Item("SPALTENNAME"), oComboboxDataTable)
                    Catch ex As Exception
                        LOGGER.Warn("Could not load data for column {0} in control {1}", oRow.Item("SPALTENNAME"), oControl.Name)
                        LOGGER.Error(ex)
                    End Try
                End If
            End If


        Next


        oView.PopulateColumns()
        oControl.DataSource = oDatatable
        oControl.RefreshDataSource()
        oControl.ForceInitialize()
        'Try
        '    For Each oRow As DataRow In DT_MY_COLUMNS.Rows
        '        Dim o = oRow.Item("SPALTENNAME")
        '        Dim p = oRow.Item("SPALTENBREITE")
        '        Dim ocount = oView.Columns.Count
        '        If oRow.Item("FORMATSTRING") <> String.Empty Then
        '            Select Case oRow.Item("FORMATSTRING")
        '                Case "c2"
        '                    Dim colModelPrice As Columns.GridColumn = oView.Columns(oRow.Item("SPALTENNAME"))
        '                    colModelPrice.DisplayFormat.FormatType = FormatType.Numeric
        '                    colModelPrice.DisplayFormat.FormatString = "c2"

        '            End Select
        '        End If
        '        ' oGridView.Columns(oRow.Item("SPALTENNAME")).Width = oRow.Item("SPALTENBREITE")
        '    Next
        'Catch ex As Exception

        'End Try



        AddHandler oView.CellValueChanged, AddressOf HandleCellValueChanged
        AddHandler oView.CustomRowCellEdit, Sub(sender As Object, e As CustomRowCellEditEventArgs)
                                                For Each oRow As DataRow In DT_MY_COLUMNS.Rows
                                                    If oRow.Item("SPALTENNAME") = e.Column.FieldName Then

                                                        If GridTables.ContainsKey(e.Column.FieldName) Then
                                                            Dim oComboboxDataTable As DataTable = GridTables.Item(e.Column.FieldName)
                                                            Dim oEditor As New RepositoryItemComboBox()
                                                            Dim oItems As New List(Of String)

                                                            AddHandler oEditor.Validating, Sub(_sender As ComboBoxEdit, _e As CancelEventArgs)
                                                                                               If oItems.Contains(_sender.EditValue) Then
                                                                                                   _e.Cancel = False
                                                                                               Else
                                                                                                   _e.Cancel = True
                                                                                               End If

                                                                                           End Sub
                                                            For Each oRow2 As DataRow In oComboboxDataTable.Rows
                                                                Dim oValue = oRow2.Item(0)

                                                                Try
                                                                    oValue &= $" | {oRow2.Item(1)}"
                                                                Catch ex As Exception
                                                                End Try

                                                                oEditor.Items.Add(oValue)
                                                                oItems.Add(oValue)
                                                            Next

                                                            e.RepositoryItem = oEditor

                                                        End If
                                                    End If
                                                Next
                                            End Sub

        AddHandler oView.CellValueChanged, Sub(sender As Object, e As CellValueChangedEventArgs)
                                               Dim oValue = e.Value.ToString()
                                               Dim oView2 As GridView = TryCast(sender, GridView)


                                               If oValue.Contains(" | ") Then
                                                   oValue = oValue.Split(" | ").ToList().Item(0)
                                                   oView2.SetRowCellValue(e.RowHandle, e.Column, oValue)
                                               End If
                                           End Sub

        Return oControl
    End Function

    Public Shared Function HandleCellValueChanged(sender As Object, e As CellValueChangedEventArgs)
        ' TODO: Do the validation
        Dim oCurrentView As GridView = DirectCast(sender, GridView)
        Dim oCurrentControl As GridControl = oCurrentView.GridControl
        Dim oCurrentDatasource As DataTable = oCurrentControl.DataSource
        Dim oColumn = oCurrentDatasource.Columns.Item(e.Column.FieldName)

        Dim foo = 1
    End Function



    Public Shared Function CreateExistingLine(row As DataRow, designMode As Boolean) As LineLabel
        Dim control As LineLabel = CreateBaseControl(New LineLabel(), row, designMode)
        control.Text = "------------------------------"
        control.BorderStyle = BorderStyle.None
        control.AutoSize = False
        control.BackColor = IntToColor(NotNull(row.Item("FONT_COLOR"), DEFAULT_COLOR))
        control.Size = New Size(row.Item("WIDTH"), row.Item("HEIGHT"))

        Return control
    End Function


    ' ----------------------- CUSTOM LABEL/LINE CLASS ----------------------- 

    Public Class LineLabel
        Inherits Label

        Protected Overrides Sub OnPaint(e As PaintEventArgs)
            'MyBase.OnPaint(e)

            Dim size As New Size(e.ClipRectangle.Width, 2)
            Dim rect As New Rectangle(New Point(0, 0), size)

            'ControlPaint.DrawBorder(e.Graphics, rect, Me.ForeColor, ButtonBorderStyle.Solid)
            e.Graphics.DrawLine(New Pen(ForeColor, 100), New Point(0, 0), New Point(e.ClipRectangle.Width, 2))
        End Sub
    End Class

    Public Shared Function GET_CONTROL_PROPERTIES(DT_CONTROL As DataTable, ControlName As String)
        Try
            CURRENT_CONTROL_ID = 0
            CURR_CON_ID = 0
            CURR_SELECT_CONTROL = ""
            CURR_CHOICE_LIST = ""
            Dim dt As New DataTable
            dt = DT_CONTROL
            '  Define the filter
            Dim filter As String = "NAME = '" & ControlName & "'"
            ' Filter the rows using Select() method of DataTable
            Dim FilteredRows As DataRow() = dt.Select(filter)
            If FilteredRows.Count = 1 Then
                For Each row As DataRow In FilteredRows
                    CURRENT_CONTROL_ID = row("GUID")
                    CURR_CON_ID = IIf(IsDBNull(row("CONNECTION_ID")), 0, row("CONNECTION_ID"))
                    If CURR_CON_ID = 0 Then
                        LOGGER.Info("CONNECTION NOT DEFINED - CTRL_GUID:" & CURRENT_CONTROL_ID)
                    End If

                    CURR_SELECT_CONTROL = IIf(IsDBNull(row("SQL_UEBERPRUEFUNG")), "", row("SQL_UEBERPRUEFUNG"))
                    CURR_CHOICE_LIST = IIf(IsDBNull(row("CHOICE_LIST")), "", row("CHOICE_LIST"))
                Next
                Return 1
            Else
                Return 0
            End If
        Catch ex As Exception
            LOGGER.Error(ex)
            LOGGER.Info("Unexpected Error in GET_CONTROL_PROPERTIES (" & ControlName & "):" & ex.Message)
            Return 0
        End Try

    End Function
    Public Shared Function GET_CONTROL_PROPERTY(DT_CONTROL As DataTable, ControlGUID As Integer, ColNAME As String)
        Try
            CURRENT_CONTROL_ID = 0
            CURR_CON_ID = 0
            CURR_SELECT_CONTROL = ""
            CURR_CHOICE_LIST = ""
            Dim dt As New DataTable
            dt = DT_CONTROL
            '  Define the filter
            Dim filter As String = "GUID = " & ControlGUID
            ' Filter the rows using Select() method of DataTable
            Dim FilteredRows As DataRow() = dt.Select(filter)
            If FilteredRows.Count = 1 Then
                Dim oRESULT = FilteredRows(0).Item(ColNAME)
                If IsDBNull(oRESULT) Then Return Nothing

                Return oRESULT
            Else
                Return Nothing
            End If
        Catch ex As Exception
            LOGGER.Error(ex)
            LOGGER.Info("Unexpected Error in GET_CONTROL_PROPERTY (" & ControlGUID & "#" & ColNAME & "):" & ex.Message)
            Return Nothing
        End Try

    End Function
    Public Shared Function GET_DEPENDING_CONTROLS(DT_CONTROLS As DataTable, ControlName As String)
        Try
            Dim dt As New DataTable
            dt = DT_CONTROLS
            '  Define the filter
            Dim filter As String = String.Format("SQL_UEBERPRUEFUNG LIKE '%{0}%'", ControlName)
            Dim FilteredRows As DataRow() = dt.Select(filter)
            CURR_DT_DEPENDING_CONTROLS = Nothing
            If FilteredRows.Length > 0 Then
                CURR_DT_DEPENDING_CONTROLS = FilteredRows.CopyToDataTable
            End If

            Return True
        Catch ex As Exception
            LOGGER.Error(ex)
            LOGGER.Info("Unexpected Error in GET_DEPENDING_CONTROLS (" & ControlName & "):" & ex.Message)
            Return 0
        End Try
    End Function

    Public Shared Function GET_CONNECTION_INFO(CON_ID As Integer)
        Try

            Dim dt As New DataTable
            dt = BASEDATA_DT_TBDD_CONNECTION
            '  Define the filter
            Dim filter As String = "GUID = " & CON_ID
            ' Filter the rows using Select() method of DataTable
            Dim FilteredRows As DataRow() = dt.Select(filter)
            If FilteredRows.Count = 1 Then
                Return FilteredRows
            Else
                Return Nothing
            End If
        Catch ex As Exception
            LOGGER.Error(ex)
            LOGGER.Info("Unexpected Error in GET_CONNECTION_INFO (" & CON_ID.ToString & "):" & ex.Message)
            Return Nothing
        End Try

    End Function
End Class
