This commit is contained in:
JenneJ
2016-05-18 13:46:18 +02:00
parent 41f2760a88
commit fc54eae3ab
3 changed files with 94 additions and 46 deletions

View File

@@ -166,7 +166,8 @@ Public Class ClassControlBuilder
If match.Success Then If match.Success Then
' DependingControlId bezeichnet das Control, das die Abhängigkeit enthält ' DependingControlId bezeichnet das Control, das die Abhängigkeit enthält
Dim dependingControlId As Integer = row.Item("GUID") Dim dependingControlId As Integer = row.Item("GUID")
Dim panel As Panel = DirectCast(control.Parent, Panel) 'Dim panel As Panel = DirectCast(control.Parent, Panel)
Dim panel As Panel = CtrlBuilder.MasterPanel
' Über die Id das Control finden ' Über die Id das Control finden
Dim dependingControl As Control = panel.Controls.OfType(Of Control)().Where(Function(c As Control) Dim dependingControl As Control = panel.Controls.OfType(Of Control)().Where(Function(c As Control)
Return DirectCast(c.Tag, ClassControlMetadata).Id = dependingControlId Return DirectCast(c.Tag, ClassControlMetadata).Id = dependingControlId

View File

@@ -585,36 +585,79 @@ Public Class ClassControlValues
#End Region #End Region
#Region "LoadDefaultValue" #Region "LoadDefaultValue"
Public Shared Sub LoadDefaultValues(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection, ParentRecordId As Integer, entity_ID As Integer)
'' Zuerst alle Controls leeren
ClearControlValues(controls)
Dim i = 0 Public Shared Sub LoadDefaultValues(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection, parentRecordID As Integer, EntityID As Integer)
For Each control As Control In controls Try
Dim sw As New Stopwatch()
sw.Start()
Dim CONTROL_ID = DirectCast(control.Tag, ClassControlMetadata).Id ' GetControlID_for_Name(control.Name, FormID) ' Alle Controls leeren
If Not (TypeOf control Is Label) Then ClearControlValues(controls)
i += 1
End If
If TypeOf control Is GroupBox Then ' Alle Controls laden, die einen Default Value haben
LoadDefaultValues(FormID, RecordID, DirectCast(control, GroupBox).Controls, ParentRecordId, entity_ID) Dim SQL As String = String.Format("SELECT CONTROL_ID, CONTROL_DEF_VALUE, CONTROL_NAME FROM VWPMO_CONTROL_SCREEN WHERE FORM_ID = {0} AND CONTROL_DEF_VALUE <> '' " & _
End If "UNION SELECT CONTROL_ID, CONTROL_SQLCOMMAND_1 AS CONTROL_DEF_VALUE, CONTROL_NAME FROM VWPMO_CONTROL_SCREEN where FORM_ID = {0} and CONTROL_SQLCOMMAND_1 <> '' AND CONTROL_SQLCOMMAND_1 NOT LIKE '%@%@%' AND CONTROL_SQLCOMMAND_1 LIKE '%@RECORD_ID%'", FormID)
Dim DEFAULT_VALUE_DT As DataTable = ClassDatabase.Return_Datatable(SQL)
LoadDefaultValue(CONTROL_ID, RecordID, control, ParentRecordId, entity_ID) For Each row As DataRow In DEFAULT_VALUE_DT.Rows
Dim defaultValue = row.Item("CONTROL_DEF_VALUE")
Dim controlId As Integer = row.Item("CONTROL_ID")
Dim controlName As String = row.Item("CONTROL_NAME")
Dim control As Control = controls.Find(controlName, False)(0)
LoadDefaultValue(controlId, RecordID, control, parentRecordID, EntityID, defaultValue)
Next
sw.Stop()
Console.WriteLine("LoadDefaultValues took {0} milliseconds to load", sw.ElapsedMilliseconds)
'Den Focus auf das erste Steuerelement setzen 'Den Focus auf das erste Steuerelement setzen
If i = 1 Then For Each c As Control In controls
control.Focus() If Not TypeOf c Is Label Then
End If c.Focus()
Exit For
Next End If
Next
Catch ex As Exception
MsgBox("Error in LoadDefaultValues: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub End Sub
Public Shared Sub LoadDefaultValue(ControlID As Integer, RecordID As Integer, control As Control, ParentRecordId As Integer, entity_ID As Integer)
'Public Shared Sub LoadDefaultValues_(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection, ParentRecordId As Integer, entity_ID As Integer)
' '' Zuerst alle Controls leeren
' ClearControlValues(controls)
' Dim i = 0
' For Each control As Control In controls
' Dim CONTROL_ID = DirectCast(control.Tag, ClassControlMetadata).Id ' GetControlID_for_Name(control.Name, FormID)
' If Not (TypeOf control Is Label) Then
' i += 1
' End If
' If TypeOf control Is GroupBox Then
' LoadDefaultValues(FormID, RecordID, DirectCast(control, GroupBox).Controls, ParentRecordId, entity_ID)
' End If
' 'LoadDefaultValue(CONTROL_ID, RecordID, control, ParentRecordId, entity_ID)
' 'Den Focus auf das erste Steuerelement setzen
' If i = 1 Then
' control.Focus()
' End If
' Next
'End Sub
Public Shared Sub LoadDefaultValue(ControlID As Integer, RecordID As Integer, control As Control, ParentRecordId As Integer, entity_ID As Integer, defaultValue As Object)
Try Try
Dim SQL = String.Format("SELECT CONTROL_DEF_VALUE FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0}", ControlID) 'Dim SQL = String.Format("SELECT CONTROL_DEF_VALUE FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0} and CONTROL_DEF_VALUE <> ''", ControlID)
Dim autoValue = ClassDatabase.Execute_Scalar(SQL) 'Dim defaultValue = ClassDatabase.Execute_Scalar(SQL)
'Dim SQL = "SELECT * FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID 'Dim SQL = "SELECT * FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID
'Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL) 'Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL)
@@ -626,84 +669,85 @@ Public Class ClassControlValues
Console.WriteLine("obacht") Console.WriteLine("obacht")
End If End If
Dim textbox As TextBox = DirectCast(control, TextBox) Dim textbox As TextBox = DirectCast(control, TextBox)
If IsDBNull(autoValue) Then If IsDBNull(defaultValue) Then
textbox.Text = "" textbox.Text = ""
Else Else
Dim vorgabe = autoValue Dim vorgabe = defaultValue
'Wenn der Default Wert über einen Select kommt 'Wenn der Default Wert über einen Select kommt
If vorgabe.ToString.ToLower.StartsWith("select") Then If vorgabe.ToString.ToLower.StartsWith("select") Then
vorgabe = autoValue.Replace("@FORM_ID", CURRENT_FORM_ID) vorgabe = defaultValue.Replace("@FORM_ID", CURRENT_FORM_ID)
vorgabe = vorgabe.Replace("@RECORD_ID", CURRENT_RECORD_ID) vorgabe = vorgabe.Replace("@RECORD_ID", CURRENT_RECORD_ID)
vorgabe = vorgabe.Replace("@RECORDID", CURRENT_RECORD_ID) vorgabe = vorgabe.Replace("@RECORDID", CURRENT_RECORD_ID)
vorgabe = vorgabe.Replace("@PARENTRECORD_ID", CURRENT_PARENT_ID) vorgabe = vorgabe.Replace("@PARENTRECORD_ID", CURRENT_PARENT_ID)
autoValue = ClassDatabase.Execute_Scalar(vorgabe.ToString, True) defaultValue = ClassDatabase.Execute_Scalar(vorgabe.ToString, True)
If IsNothing(vorgabe) Then If IsNothing(vorgabe) Then
textbox.Text = "" textbox.Text = ""
End If End If
End If End If
textbox.Text = autoValue textbox.Text = defaultValue
End If End If
Case GetType(CheckBox) Case GetType(CheckBox)
Dim checkbox As CheckBox = DirectCast(control, CheckBox) Dim checkbox As CheckBox = DirectCast(control, CheckBox)
checkbox.Checked = StrToBool(autoValue) checkbox.Checked = StrToBool(defaultValue)
Case GetType(RadioButton) Case GetType(RadioButton)
Dim radio As RadioButton = DirectCast(control, RadioButton) Dim radio As RadioButton = DirectCast(control, RadioButton)
radio.Checked = StrToBool(autoValue) radio.Checked = StrToBool(defaultValue)
Case GetType(CustomComboBox) Case GetType(CustomComboBox)
Dim combobox As CustomComboBox = DirectCast(control, CustomComboBox) Dim combobox As CustomComboBox = DirectCast(control, CustomComboBox)
If IsDBNull(autoValue) Then If IsDBNull(defaultValue) Then
combobox.SelectedIndex = -1 combobox.SelectedIndex = -1
Else Else
combobox.SelectedIndex = combobox.FindStringExact(autoValue) combobox.SelectedIndex = combobox.FindStringExact(defaultValue)
End If End If
Case GetType(DevExpress.XtraEditors.DateEdit) Case GetType(DevExpress.XtraEditors.DateEdit)
Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit) Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit)
If IsDBNull(autoValue) Then If IsDBNull(defaultValue) Then
autoValue = String.Empty defaultValue = String.Empty
End If End If
Dim result As EnumDateTimePickerDefaultValueOptions = EnumDateTimePickerDefaultValueOptions.Empty Dim result As EnumDateTimePickerDefaultValueOptions = EnumDateTimePickerDefaultValueOptions.Empty
Dim success = [Enum].TryParse(Of EnumDateTimePickerDefaultValueOptions)(autoValue, result) Dim success = [Enum].TryParse(Of EnumDateTimePickerDefaultValueOptions)(defaultValue, result)
If success Then If success Then
If result = EnumDateTimePickerDefaultValueOptions.Empty Then If result = EnumDateTimePickerDefaultValueOptions.Empty Then
' DBNull.Value leert das DateEdit control. ' DBNull.Value leert das DateEdit control.
autoValue = DBNull.Value defaultValue = DBNull.Value
ElseIf result = EnumDateTimePickerDefaultValueOptions.CurrentDate Then ElseIf result = EnumDateTimePickerDefaultValueOptions.CurrentDate Then
autoValue = Now defaultValue = Now
End If End If
Else Else
'Wenn der DefaultWert nicht gelesen werden konnte, DateEdit leeren 'Wenn der DefaultWert nicht gelesen werden konnte, DateEdit leeren
autoValue = DBNull.Value defaultValue = DBNull.Value
End If End If
' Mit EditValue kann man auch den angezeigten Wert leeren ' Mit EditValue kann man auch den angezeigten Wert leeren
'datepicker.DateTime = autoValue 'datepicker.DateTime = autoValue
datepicker.EditValue = autoValue datepicker.EditValue = defaultValue
Case GetType(Label) Case GetType(Label)
Dim lbl As Label = DirectCast(control, Label) Dim lbl As Label = DirectCast(control, Label)
Dim CONNID = ClassDatabase.Execute_Scalar(String.Format("SELECT CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlID)) Dim CONNID = ClassDatabase.Execute_Scalar(String.Format("SELECT CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlID))
Dim SQL_AUTOVALUE As String = ClassDatabase.Execute_Scalar(String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlID)) 'Dim SQL_AUTOVALUE As String = ClassDatabase.Execute_Scalar(String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlID))
SQL_AUTOVALUE = ClassControlValues.ReplaceSqlCommandPlaceholders(SQL_AUTOVALUE, RecordID, ParentRecordId, entity_ID) defaultValue = ClassControlValues.ReplaceSqlCommandPlaceholders(defaultValue, RecordID, ParentRecordId, entity_ID)
If SQL_AUTOVALUE = "" Or IsDBNull(SQL_AUTOVALUE) Then
If defaultValue = "" Or IsDBNull(defaultValue) Then
Exit Sub Exit Sub
End If End If
If Not IsNothing(CONNID) Then If Not IsNothing(CONNID) Then
autoValue = ClassDatabase.Execute_ScalarWithConnection(CONNID, SQL_AUTOVALUE) defaultValue = ClassDatabase.Execute_ScalarWithConnection(CONNID, defaultValue)
Else Else
autoValue = ClassDatabase.Execute_Scalar(SQL_AUTOVALUE, True) defaultValue = ClassDatabase.Execute_Scalar(defaultValue, True)
End If End If
' AutoValue = ClassDatabase.Execute_Scalar(SQL) ' AutoValue = ClassDatabase.Execute_Scalar(SQL)
If Not IsNothing(autoValue) And Not IsDBNull(autoValue) Then If Not IsNothing(defaultValue) And Not IsDBNull(defaultValue) Then
lbl.Text = autoValue lbl.Text = defaultValue
End If End If
End Select End Select

View File

@@ -166,6 +166,7 @@ Public Class frmConstructor_Main
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
' Verhindert den Zeilenwechsel ' Verhindert den Zeilenwechsel
e.Cancel = True e.Cancel = True
Exit Sub
End Try End Try
End If End If
@@ -1333,7 +1334,9 @@ Public Class frmConstructor_Main
CURRENT_RECORD_ID = NewRecordId CURRENT_RECORD_ID = NewRecordId
RECORD_ID = NewRecordId RECORD_ID = NewRecordId
SELECTED_RECORD_ID = NewRecordId SELECTED_RECORD_ID = NewRecordId
ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls, CURRENT_PARENT_ID, ENTITY_ID) ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls, CURRENT_PARENT_ID, ENTITY_ID)
' Das StatusLabel aktualisieren ' Das StatusLabel aktualisieren
Update_Record_Label(NewRecordId) Update_Record_Label(NewRecordId)
' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden ' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden