diff --git a/app/DD-Record-Organiser/ClassControlBuilder.vb b/app/DD-Record-Organiser/ClassControlBuilder.vb index 68b73fe..6d5d515 100644 --- a/app/DD-Record-Organiser/ClassControlBuilder.vb +++ b/app/DD-Record-Organiser/ClassControlBuilder.vb @@ -76,6 +76,7 @@ Public Class ClassControlBuilder Public Sub MouseHover(sender As Object, e As EventArgs) Dim onMouseHoverHandler As EventHandler = CType(Me.Events(_onMouseHoverName), EventHandler) + If onMouseHoverHandler IsNot Nothing Then onMouseHoverHandler.Invoke(sender, e) End If @@ -147,16 +148,20 @@ Public Class ClassControlBuilder Dim SQL As String = String.Format("SELECT GUID, SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE SQL_COMMAND_1 LIKE '%@{0}@%'", controlId) Dim value - Select Case control.GetType() - Case GetType(CustomComboBox) - If IsNothing(DirectCast(control, CustomComboBox).ValueMember) Then - value = DirectCast(control, CustomComboBox).Text - Else - value = DirectCast(control, CustomComboBox).SelectedValue - End If - Case Else - Exit Sub - End Select + ' Diese Befehle führen dazu, dass auch der ValueMember als Wert ausgelesen wird + ' Das kann zu unerwarteten Ergebnissen führen, da der Benutzer nur den DisplayMember sieht. + 'Select Case control.GetType() + ' Case GetType(CustomComboBox) + ' If IsNothing(DirectCast(control, CustomComboBox).ValueMember) Then + ' value = DirectCast(control, CustomComboBox).Text + ' Else + ' value = DirectCast(control, CustomComboBox).SelectedValue + ' End If + ' Case Else + ' Exit Sub + 'End Select + ' Die bessere Lösung ist für jetzt, einfach den angezeigten Wert auszulesen: + value = DirectCast(control, CustomComboBox).Text If String.IsNullOrEmpty(value) Then Exit Sub @@ -175,10 +180,24 @@ Public Class ClassControlBuilder Continue For End If + sqlcommand = sqlcommand.ToUpper.Replace("@RECORD_ID", CURRENT_RECORD_ID) Dim regex As New System.Text.RegularExpressions.Regex("(@(\d+)@)") Dim match As System.Text.RegularExpressions.Match = regex.Match(sqlcommand) - If match.Success Then + Dim sqlguid = String.Format("SELECT GUID FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", controlId, CURRENT_RECORD_ID) + Dim ctrlvalID = ClassDatabase.Execute_Scalar(sqlguid) + If Not IsNothing(ctrlvalID) Then + Dim upd1 = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}' WHERE CONTROL_ID = {1} AND RECORD_ID = {2}", value.ToString, controlId, CURRENT_RECORD_ID) + ClassDatabase.Execute_non_Query(upd1) + Else + Dim ins = String.Format("INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID,RECORD_ID,VALUE,ADDED_WHO) VALUES ({0},{1},'{2}','{3}')", controlId, CURRENT_RECORD_ID, value, Environment.UserName) + If ClassDatabase.Execute_non_Query(ins) = True Then + If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was nothing - Inserted the ControlValue '" & ins & "'") + End If + End If + + + ' DependingControlId bezeichnet das Control, das die Abhängigkeit enthält Dim dependingControlId As Integer = row.Item("GUID") Dim panel As Panel = DirectCast(control.Parent, Panel) @@ -189,19 +208,52 @@ Public Class ClassControlBuilder sqlcommand = sqlcommand.Replace(match.Groups(1).Value, value) If LogErrorsOnly = False Then ClassLogger.Add(" >> " & String.Format("Executing SQL_COMMAND: '{0}' for controlID '{1}'", sqlcommand, dependingControlId)) - Dim dt As DataTable = ClassDatabase.Return_Datatable(sqlcommand) - Dim obj - obj = dependingControl.GetType.ToString - Select Case dependingControl.GetType().Name - Case "ComboBox" + Dim dt As DataTable = ClassDatabase.Return_Datatable(sqlcommand) + Dim type = dependingControl.GetType().Name + Select Case type + Case "DateEdit" + If dt.Rows.Count = 1 Then + Try + Dim dateValue As String = dt.Rows(0).Item(0) + If dateValue = "1900-01-01" Then + Continue For + End If + ControlLoader.DateTimePicker.LoadValue(dependingControl, dateValue) + Dim sql1 = String.Format("SELECT GUID FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", dependingControlId, CURRENT_RECORD_ID) + Dim id = ClassDatabase.Execute_Scalar(sql1) + + If Not IsNothing(id) Then + Dim upd = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}' WHERE GUID = {1}", dateValue, id) + If ClassDatabase.Execute_non_Query(upd) = True Then + If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was not nothing - Updated the ControlValue '" & upd) + Else + ClassLogger.Add(" >> Check Update depending control value as it was nothing and Update was not successful - Update-Command '" & upd & "'") + End If + + Else + Dim ins = String.Format("INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID,RECORD_ID,VALUE,ADDED_WHO) VALUES ({0},{1},'{2}','{3}')", dependingControlId, CURRENT_RECORD_ID, dateValue, Environment.UserName) + If ClassDatabase.Execute_non_Query(ins) = True Then + If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was nothing - Inserted the ControlValue '" & ins & "'") + Else + ClassLogger.Add(" >> Check Insert depending control value as it was nothing and Insert was not successful- Insert-Command '" & ins & "'") + End If + + End If + Catch ex As Exception + ClassLogger.Add("Unexpectet Error in OnComboBoxValueChanged - TextBox: " & ex.Message, True) + End Try + Else + ClassLogger.Add(" >> Attention: RowCount for depending control was '" & dt.Rows.Count.ToString & "' and not 1 as expected - Check SQL: '" & sqlcommand & "'") + End If + Case "CustomComboBox" ControlLoader.Combobox.SetDataSource(DirectCast(dependingControl, CustomComboBox), dt) Case "Label" If dt.Rows.Count = 1 Then Try ControlLoader.Label.LoadValue(DirectCast(dependingControl, Label), 9999, 9999, dt.Rows(0).Item(0).ToString, True) Catch ex As Exception - ClassLogger.Add(ex.Message) + ClassLogger.Add("Unexpectet Error in OnComboBoxValueChanged - Label: " & ex.Message, True) End Try End If Case "TextBox" @@ -214,7 +266,7 @@ Public Class ClassControlBuilder If Not IsNothing(id) Then Dim upd = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}' WHERE GUID = {1}", value1, id) - If ClassDatabase.Execute_non_Query(sql1) = True Then + If ClassDatabase.Execute_non_Query(upd) = True Then If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was not nothing - Updated the ControlValue '" & upd) Else ClassLogger.Add(" >> Check Update depending control value as it was nothing and Update was not successful - Update-Command '" & upd & "'") @@ -230,7 +282,7 @@ Public Class ClassControlBuilder End If Catch ex As Exception - ClassLogger.Add(ex.Message) + ClassLogger.Add("Unexpectet Error in OnComboBoxValueChanged - TextBox: " & ex.Message, True) End Try Else ClassLogger.Add(" >> Attention: RowCount for depending control was '" & dt.Rows.Count.ToString & "' and not 1 as expected - Check SQL: '" & sqlcommand & "'") @@ -312,7 +364,7 @@ Public Class ClassControlBuilder AddHandler textbox.TextChanged, AddressOf OnTextBoxTextChanged AddHandler textbox.ReadOnlyChanged, AddressOf OnReadOnlyChanged - Case "ComboBox" + Case "CustomComboBox" Dim combo As CustomComboBox = CType(control, CustomComboBox) AddHandler combo.SelectedValueChanged, AddressOf RecordChanged AddHandler combo.SelectedValueChanged, AddressOf OnComboBoxValueChanged @@ -603,7 +655,7 @@ Public Class ClassControlBuilder Select Case CurrentType Case "TextBox" ActiveControl.BackColor = ActiveColor - Case "ComboBox" + Case "CustomComboBox" 'Case "System.Windows.Forms.ComboBox" ActiveControl.BackColor = ActiveColor Case "Label" @@ -635,7 +687,7 @@ Public Class ClassControlBuilder Select Case Type Case "TextBox" inctrl.BackColor = Color.White - Case "ComboBox" + Case "CustomComboBox" 'Case "System.Windows.Forms.ComboBox" inctrl.BackColor = Color.White Case "Label" @@ -664,7 +716,7 @@ Public Class ClassControlBuilder Select Case gbType Case "TextBox" gbctrl.BackColor = Color.White - Case "ComboBox" + Case "CustomComboBox" 'Case "System.Windows.Forms.ComboBox" gbctrl.BackColor = Color.White Case "Label" diff --git a/app/DD-Record-Organiser/ClassControlCommandsUI.vb b/app/DD-Record-Organiser/ClassControlCommandsUI.vb index 9c5889c..a122761 100644 --- a/app/DD-Record-Organiser/ClassControlCommandsUI.vb +++ b/app/DD-Record-Organiser/ClassControlCommandsUI.vb @@ -489,10 +489,11 @@ Public Class ClassControlCommandsUI Private Sub UpdateAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) Try For Each ctrl As Control In controls + Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_RecordID(ctrl.Name, RecordID) If LogErrorsOnly = False Then ClassLogger.Add(" >> CONTROL_ID: " & CONTROL_ID, False) Dim CONTROL_VALUE As String = GetControlValue(ctrl) - + Dim controltype = ctrl.GetType.ToString If TypeOf ctrl Is PictureBox Then Dim id As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_Name(ctrl.Name, FormID) UpsertImage(id, RecordID, ctrl.BackgroundImage) @@ -520,8 +521,14 @@ Public Class ClassControlCommandsUI Dim ValueExists = ClassDatabase.Execute_Scalar(String.Format("SELECT RECORD_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0} AND CONTROL_ID = {1}", RecordID, CONTROL_ID)) If IsNothing(ValueExists) Then ' Neues Control + If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then + Console.WriteLine("sdasd") + End If If LogErrorsOnly = False Then ClassLogger.Add(" >> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False) If Not IsNothing(CONTROL_VALUE) Then + If TypeOf ctrl Is CustomComboBox And CONTROL_VALUE = "" Then + Exit Sub + End If InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) End If Else ' Update Control @@ -538,8 +545,14 @@ Public Class ClassControlCommandsUI Public Sub UpdateMultipleValues(ControlId As Integer, RecordId As Integer, value As String) Try + If IsNothing(value) Then + Exit Sub + End If Dim values As New List(Of String)(value.Split(";")) Dim dt As DataTable = ClassDatabase.Return_Datatable(String.Format("SELECT VALUE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlId, RecordId)) + If IsNothing(dt) Then + Exit Sub + End If ' Konvertiere datatable zu liste Dim oldValues = dt.AsEnumerable().Select(Of String)(Function(r) Return r.Item("VALUE") @@ -562,163 +575,159 @@ Public Class ClassControlCommandsUI End Sub Function GetControlValue(ctrl As Control) As String - Dim CONTROL_ID As Integer - Try - Dim type = ctrl.GetType().Name - CONTROL_ID = DirectCast(ctrl.Tag, ClassControlMetadata).Id ' GetControlID_for_RecordID(ctrl.Name, CURRENT_RECORD_ID) - If LogErrorsOnly = False Then ClassLogger.Add(" >> GetControlValue CONTROL_ID: " & CONTROL_ID, False) - Dim CONTROL_VALUE As String = Nothing - If LogErrorsOnly = False Then ClassLogger.Add(" >> type = " & type.ToString, False) - Select Case type - Case "TextBox" - Return DirectCast(ctrl, TextBox).Text - Case "ComboBox" - If LogErrorsOnly = False Then ClassLogger.Add(" >> Return Value: " & DirectCast(ctrl, CustomComboBox).Text, False) - Return DirectCast(ctrl, CustomComboBox).Text - Case "CheckBox" - Return DirectCast(ctrl, CheckBox).Checked.ToString() - Case "RadioButton" - Return DirectCast(ctrl, RadioButton).Checked.ToString() - Case "DateEdit" - Dim Value = DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).EditValue + Dim type = ctrl.GetType().Name + Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id ' GetControlID_for_RecordID(ctrl.Name, CURRENT_RECORD_ID) + If LogErrorsOnly = False Then ClassLogger.Add(" >> GetControlValue CONTROL_ID: " & CONTROL_ID, False) + Dim CONTROL_VALUE As String = Nothing + If LogErrorsOnly = False Then ClassLogger.Add(" >> type = " & type.ToString, False) + Select Case type + Case "TextBox" + Return DirectCast(ctrl, TextBox).Text + Case "CustomComboBox" + If LogErrorsOnly = False Then ClassLogger.Add(" >> Return Value: " & DirectCast(ctrl, CustomComboBox).Text, False) + Return DirectCast(ctrl, CustomComboBox).Text + Case "CheckBox" + Return DirectCast(ctrl, CheckBox).Checked.ToString() + Case "RadioButton" + Return DirectCast(ctrl, RadioButton).Checked.ToString() + Case "DateEdit" + Dim Value = DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).EditValue - If IsDBNull(Value) Then - Return "" - Else - Return DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).DateTime.ToString("yyyy-MM-dd") - End If - Case "PictureBox" - 'Return "PictureBox" 'Es ist egal was für ein String hier zurückgegeben wird, hauptsache nicht Nothing - Case "CheckedListBoxControl" - Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - chklbx = DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl) + If IsDBNull(Value) Then + Return "" + Else + Return DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).DateTime.ToString("yyyy-MM-dd") + End If + Case "PictureBox" + 'Return "PictureBox" 'Es ist egal was für ein String hier zurückgegeben wird, hauptsache nicht Nothing + Case "CheckedListBoxControl" + Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl + chklbx = DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl) + Dim SQL_COMAMND = ClassDatabase.Execute_Scalar("SELECT UPPER(SQL_COMMAND_1) FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID) - 'TODO: Wenn keine Datasource vorhanden, angecheckte einträge als string speichern - If IsNothing(chklbx.DataSource) Then - Dim result As New List(Of String) - Dim result_string As String + 'TODO: Wenn keine Datasource vorhanden, angecheckte einträge als string speichern + If IsNothing(chklbx.DataSource) Then + Dim result As New List(Of String) + Dim result_string As String - For Each item As DevExpress.XtraEditors.Controls.CheckedListBoxItem In chklbx.CheckedItems - result.Add(item.Value.ToString.Trim) - Next + For Each item As DevExpress.XtraEditors.Controls.CheckedListBoxItem In chklbx.CheckedItems + result.Add(item.Value.ToString.Trim) + Next - result_string = String.Join(";", result) + result_string = String.Join(";", result) - ' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll - ' Überspringt den Rest der funktion - Return result_string - End If + ' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll + ' Überspringt den Rest der funktion + Return result_string + End If - Dim SQL_Datasource = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID - SQL_Datasource = ClassDatabase.Execute_Scalar(SQL_Datasource) - - If SQL_Datasource.ToUpper.Contains("SELECT [RECORD-ID],") Then - 'Alle Recorddatensätze durchlaufen und überprüfen ob nicht angehakt - 'Wenn nicht angehakt dann Record löschen - Dim index As Integer = 0 - For i As Integer = 0 To chklbx.ItemCount - 1 - Dim item = chklbx.GetItem(i) - Dim row As DataRowView = CType(item, DataRowView) - If chklbx.GetItemCheckState(i) = 0 Then - If CInt(row(0)) > 0 Then - 'Überprüfen ob es den Record gibt - Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - If ClassDatabase.Execute_Scalar(SQL) = 1 Then - SQL = "DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - If ClassDatabase.Execute_non_Query(SQL) = True Then - If LogErrorsOnly = False Then ClassLogger.Add(" >> TBPMO_RECORD_CONNECT-Entry after 'deselect CheckedListBox' deleted", False) - End If + If SQL_COMAMND.ToString.StartsWith("SELECT [RECORD_ID]") Or SQL_COMAMND.ToString.StartsWith("SELECT [RECORD-ID]") Then + 'Alle Recorddatensätze durchlaufen und überprüfen ob nicht angehakt + 'Wenn nicht angehakt dann Record löschen + Dim index As Integer = 0 + For i As Integer = 0 To chklbx.ItemCount - 1 + Dim item = chklbx.GetItem(i) + Dim row As DataRowView = CType(item, DataRowView) + If chklbx.GetItemCheckState(i) = 0 Then + If CInt(row(0)) > 0 Then + 'Überprüfen ob es den Record gibt + Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) + If ClassDatabase.Execute_Scalar(SQL) = 1 Then + SQL = "DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) + If ClassDatabase.Execute_non_Query(SQL) = True Then + If LogErrorsOnly = False Then ClassLogger.Add(" >> TBPMO_RECORD_CONNECT-Entry after 'deselect CheckedListBox' deleted", False) End If End If End If - Next - End If - - - 'Für jeden gecheckten Eintrag den Record der Stammentität mit dem selektierten linken - Dim checked_result As New List(Of String) - Dim checked_result_string As String - Dim checked_Count As Integer = 0 - For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems - checked_Count += 1 + End If Next + End If - If SQL_Datasource.ToUpper.Contains("SELECT [RECORD-ID],") Then - For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems - Dim row As DataRowView = CType(item, DataRowView) - Try - If CInt(row(0)) > 0 Then - Dim rid = CInt(row(0)) - Dim checked_value = row(1) - checked_result.Add(checked_value) - checked_result_string = String.Join(";", checked_result) - Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - If ClassDatabase.Execute_Scalar(SQL) = 0 Then - If CURRENT_RECORD_ID = 0 Then - MsgBox("Attention: no current record Selected!", MsgBoxStyle.Exclamation) - Else - If ConnectRecord(CURRENT_RECORD_ID, CInt(row(0)), "CheckedListBox;" & ctrl.Name) = True Then - If LogErrorsOnly = False Then ClassLogger.Add(" >> Checked ListBox record '" & rid.ToString & "' was linked successfully.", False) - End If + + 'Für jeden gecheckten Eintrag den Record der Stammentität mit dem selektierten linken + Dim checked_result As New List(Of String) + Dim checked_result_string As String + If SQL_COMAMND.ToString.StartsWith("SELECT [RECORD_ID]") Or SQL_COMAMND.ToString.StartsWith("SELECT [RECORD-ID]") Then + + For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems + Dim row As DataRowView = CType(item, DataRowView) + Try + If CInt(row(0)) > 0 Then + Dim rid = CInt(row(0)) + Dim checked_value = row(1) + checked_result.Add(checked_value) + checked_result_string = String.Join(";", checked_result) + Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) + If ClassDatabase.Execute_Scalar(SQL) = 0 Then + If CURRENT_RECORD_ID = 0 Then + MsgBox("Attention: no current record Selected!", MsgBoxStyle.Exclamation) + Else + If ConnectRecord(CURRENT_RECORD_ID, CInt(row(0)), "CheckedListBox;" & ctrl.Name) = True Then + If LogErrorsOnly = False Then ClassLogger.Add(" >> Checked ListBox record '" & rid.ToString & "' was linked successfully.", False) End If - End If - End If - Catch ex As Exception - ClassLogger.Add("Error in CheckedListBoxGetControlValue: " & ex.Message, True) - End Try - Next - Else - For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems - Dim row As DataRowView = CType(item, DataRowView) + End If + End If + Catch ex As Exception + ClassLogger.Add("Error in CheckedListBoxGetControlValue: " & ex.Message, True) + End Try + + Next + Else + + For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems + Dim row As DataRowView = CType(item, DataRowView) + If row.DataView.Table.Columns.Count = 1 Then + Dim checked_value = row(0) + checked_result.Add(checked_value) + ElseIf row.DataView.Table.Columns.Count = 2 Then Dim checked_value = row(1) checked_result.Add(checked_value) - checked_result_string = String.Join(";", checked_result) - Next - End If - - - ' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll - ' Überspringt den Rest der funktion - If Not IsNothing(checked_result_string) Then - Dim sql = String.Format("select count(*) from TBPMO_CONTROL_VALUE where CONTROL_ID = {0} and RECORD_ID = {1}", CONTROL_ID, CURRENT_RECORD_ID) - If ClassDatabase.Execute_Scalar(sql) = 0 And checked_Count > 0 Then - InsertControlValue(CONTROL_ID, CURRENT_RECORD_ID, "") - End If - Return checked_result_string - Else - 'In jedem Fall Nothing zurückgeben - Return Nothing - End If - - - Case "ListBoxControl" - Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(ctrl, DevExpress.XtraEditors.ListBoxControl) - Return listbox.SelectedValue - - Case "DataGridView" - Dim list As New List(Of String) - Dim dgv As DataGridView = DirectCast(ctrl, DataGridView) - - For Each row As DataGridViewRow In dgv.Rows - Dim cell As DataGridViewCell = row.Cells(0) - If Not IsNothing(cell.Value) Then - list.Add(cell.Value) End If + checked_result_string = String.Join(";", checked_result) Next + - Return String.Join(";", list) - Case Else + + End If + + ' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll + ' Überspringt den Rest der funktion + If Not IsNothing(checked_result_string) Then + 'Dim sql = String.Format("select count(*) from TBPMO_CONTROL_VALUE where CONTROL_ID = {0} and RECORD_ID = {1}", CONTROL_ID, CURRENT_RECORD_ID) + 'If ClassDatabase.Execute_Scalar(sql) = 0 Then + ' InsertControlValue(CONTROL_ID, CURRENT_RECORD_ID, "") + 'End If + Return checked_result_string + Else + 'In jedem Fall Nothing zurückgeben Return Nothing - End Select - Catch ex As Exception - ClassLogger.Add("Unexpected error in GetControlValue for Control-ID: " & CONTROL_ID & " - error: " & ex.Message) - Return Nothing - End Try + End If + + Case "ListBoxControl" + Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(ctrl, DevExpress.XtraEditors.ListBoxControl) + Return listbox.SelectedValue + + Case "DataGridView" + Dim list As New List(Of String) + Dim dgv As DataGridView = DirectCast(ctrl, DataGridView) + + For Each row As DataGridViewRow In dgv.Rows + Dim cell As DataGridViewCell = row.Cells(0) + If Not IsNothing(cell.Value) Then + list.Add(cell.Value) + End If + Next + + Return String.Join(";", list) + + Case Else + Return Nothing + End Select End Function Public Shared Function InsertControlValue(ControlID As Integer, RecordID As Integer, Value As String) diff --git a/app/DD-Record-Organiser/ClassControlLoader.vb b/app/DD-Record-Organiser/ClassControlLoader.vb index c5d8f8a..2f04157 100644 --- a/app/DD-Record-Organiser/ClassControlLoader.vb +++ b/app/DD-Record-Organiser/ClassControlLoader.vb @@ -15,16 +15,15 @@ 'End Function Public Shared Function LoadAutoValue(control As Windows.Forms.Control, RecordId As Integer, ParentRecordId As Integer, entity_ID As Integer) - Dim ControlId As Integer Try - If ControlId = 810 Then - Console.WriteLine("Obacht") - End If Dim AutoValue As String = String.Empty - ControlId = DirectCast(control.Tag, ClassControlMetadata).Id + Dim ControlId As Integer = DirectCast(control.Tag, ClassControlMetadata).Id Dim CONNID = ClassDatabase.Execute_Scalar(String.Format("SELECT CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlId)) Dim SQL As String = ClassDatabase.Execute_Scalar(String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlId)) SQL = ClassControlValues.ReplaceSqlCommandPlaceholders(SQL, RecordId, ParentRecordId, entity_ID) + If ControlId = 984 Then + Console.WriteLine("VertragsNr") + End If If SQL = "" Or IsDBNull(SQL) Then Return Nothing @@ -43,7 +42,7 @@ Return AutoValue Catch ex As Exception - ClassLogger.Add("Unexpected Error in LoadAutoValue - Control-ID: " & ControlId.ToString & " - ERROR: " & ex.Message, True) + ClassLogger.Add("Unexpected Error in LoadAutoValue: " & ex.Message, True) Return Nothing End Try @@ -56,9 +55,7 @@ Public Shared Function GetDynamicValue(controlId As Integer, formId As Integer, connID As Object, sqlCommand As String) As DynamicValue Dim returnValue As DynamicValue - If controlId = 810 Then - Console.WriteLine("Obacht") - End If + returnValue.StaticList = CheckForStaticList(controlId) returnValue.DataTable = GetSqlList(controlId, formId, connID, sqlCommand) @@ -85,9 +82,6 @@ Public Shared Function GetSqlList(controlId As Integer, formId As Integer, connection_Id As Object, sqlCommand As String) As DataTable Try - If controlId = 810 Then - Console.WriteLine("Obacht") - End If If sqlCommand Is Nothing Or sqlCommand = String.Empty Then Return Nothing End If @@ -117,132 +111,81 @@ End Function Overloads Shared Sub SetDataSource(control As CustomComboBox, dt As DataTable) - Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If - Dim Name1 = dt.Columns(0).ColumnName.ToString - Dim Name2 - Try - Name2 = dt.Columns(1).ColumnName.ToString - Catch ex As Exception - Name2 = dt.Columns(0).ColumnName.ToString - End Try - Dim columnCount As Integer = dt.Columns.Count - control.BeginUpdate() - ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, - ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. - control.DataSource = Nothing - control.SelectedIndex = -1 - ClassControlValues.ClearControlValue(control) + Dim sw As Stopwatch = Stopwatch.StartNew() + Dim columnCount As Integer = dt.Columns.Count - ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, - ' Dadurch ist das Laden der Datasource um einiges SCHNELLER - If columnCount = 1 Then - For Each row As DataRow In dt.Rows - control.Items.Add(row.Item(0).ToString) - Next - 'control.ValueMember = Name1 - 'control.DisplayMember = Name1 - ElseIf columnCount = 2 Then - 'If control.Name = "cmbverantwortlich" Then - ' control.ValueMember = Name1 - ' control.DisplayMember = Name2 - 'Else - For Each row As DataRow In dt.Rows - control.Items.Add(row.Item(1).ToString) - Next - 'End If + control.BeginUpdate() - 'If control.Name = "cmbverantwortlich" Then + ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, + ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. + control.DataSource = Nothing + control.SelectedIndex = -1 - 'Else - ' control.ValueMember = Name1 - ' control.DisplayMember = Name2 - 'End If - End If - ' Als Erstes setzen wir die DataSource - 'If control.Name = "cmbverantwortlich" Then - ' control.DataSource = dt - 'End If + ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, + ' Dadurch ist das Laden der Datasource um einiges SCHNELLER + If columnCount = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf columnCount = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If - 'control.DataSource = dt - control.EndUpdate() - Catch ex As Exception - ClassLogger.Add("unexpected Error in SetDataSource for ControlName: " & control.Name & " - Error: " & ex.Message) - End Try + ' Als letztes setzen wir die DataSource + control.DataSource = dt + control.EndUpdate() + + sw.Stop() + Console.WriteLine("SetDataSource for {0} took {1}ms", control.Name, sw.ElapsedMilliseconds) End Sub Overloads Shared Sub SetDataSource(control As DevExpress.XtraEditors.CheckedListBoxControl, dt As DataTable) - Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If - Dim columnCount As Integer = dt.Columns.Count + Dim columnCount As Integer = dt.Columns.Count - ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, - ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. - control.DataSource = Nothing - control.SelectedIndex = -1 - + ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, + ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. + control.DataSource = Nothing + control.SelectedIndex = -1 - ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, - ' Dadurch ist das Laden der Datasource um einiges SCHNELLER - If columnCount = 1 Then - control.DisplayMember = dt.Columns(0).ColumnName - control.ValueMember = dt.Columns(0).ColumnName - ElseIf columnCount = 2 Then - control.DisplayMember = dt.Columns(1).ColumnName - control.ValueMember = dt.Columns(0).ColumnName - End If - ' Als letztes setzen wir die DataSource - control.DataSource = dt - control.EndUpdate() - Catch ex As Exception - ClassLogger.Add("unexpected Error in SetDataSource2 for ControlName: " & control.Name & " - Error: " & ex.Message) - End Try + ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, + ' Dadurch ist das Laden der Datasource um einiges SCHNELLER + If columnCount = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf columnCount = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If + ' Als letztes setzen wir die DataSource + control.DataSource = dt End Sub Overloads Shared Sub SetDataSource(control As DevExpress.XtraEditors.ListBoxControl, dt As DataTable) - Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If - Dim columnCount As Integer = dt.Columns.Count + Dim columnCount As Integer = dt.Columns.Count - ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, - ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. - control.DataSource = Nothing - control.SelectedIndex = -1 + ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, + ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. + control.DataSource = Nothing + control.SelectedIndex = -1 - ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, - ' Dadurch ist das Laden der Datasource um einiges SCHNELLER - If columnCount = 1 Then - control.DisplayMember = dt.Columns(0).ColumnName - 'control.ValueMember = dt.Columns(0).ColumnName - ElseIf columnCount = 2 Then - control.DisplayMember = dt.Columns(1).ColumnName - control.ValueMember = dt.Columns(0).ColumnName - End If + ' Es ist wichtig, dass DisplayMember und ValueMember VOR der DataSource festgelegt werden, + ' Dadurch ist das Laden der Datasource um einiges SCHNELLER + If columnCount = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf columnCount = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If - ' Als letztes setzen wir die DataSource - control.DataSource = dt - Catch ex As Exception - ClassLogger.Add("unexpected Error in SetDataSource3 for ControlName: " & control.Name & " - Error: " & ex.Message) - End Try + ' Als letztes setzen wir die DataSource + control.DataSource = dt End Sub Overloads Shared Sub SetDataSource(control As Windows.Forms.DataGridView, dt As DataTable) - Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If - control.DataSource = dt - Catch ex As Exception - ClassLogger.Add("unexpected Error in SetDataSource4 for ControlName: " & control.Name & " - Error: " & ex.Message) - End Try + control.DataSource = dt End Sub End Class @@ -263,6 +206,10 @@ control.Text = value Else Dim ControlId As Integer = DirectCast(control.Tag, ClassControlMetadata).Id + + If ControlId = 984 Then + Console.WriteLine("VertragsNr") + End If Dim SQL = String.Format("SELECT GUID FROM TBPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0} AND SCREEN_ID = {1}", ControlId, CURRENT_SCREEN_ID) Dim ctrl_screen_id = ClassDatabase.Execute_Scalar(SQL, True) If ctrl_screen_id > 0 Then @@ -357,17 +304,11 @@ Public Class Combobox : Inherits _ListControl Public Shared Sub LoadValue(control As CustomComboBox, recordId As Integer, parentRecordId As Integer, value As String) - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If control.Text = value End Sub Public Shared Sub LoadList(control As CustomComboBox, formId As Integer, connID As Object, SQLCommand As String) Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If Dim dynamic As DynamicValue = GetDynamicValue(DirectCast(control.Tag, ClassControlMetadata).Id, formId, connID, SQLCommand) If dynamic.StaticList IsNot Nothing Then @@ -385,9 +326,6 @@ Private Shared Sub CalculateDropdownWidth(control As CustomComboBox, dt As DataTable) Try - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If Const WIDEST_WIDTH As Integer = 300 Dim FinalWidth As Integer = WIDEST_WIDTH Dim index As Integer = 1 @@ -428,8 +366,6 @@ control.SetItemCheckState(pos, CheckState.Checked) End If Next - control.Refresh() - ' control.Invoke(control) End Sub Public Shared Sub LoadList(control As DevExpress.XtraEditors.CheckedListBoxControl, formId As Integer, conn_Id As Object, SQLCommand As String) @@ -461,9 +397,7 @@ If IsNothing(value) Then Exit Sub End If - If control.Name = "cmbverantwortlich" Then - Console.WriteLine("Obacht") - End If + control.SelectedIndex = control.FindStringExact(value) End Sub diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index d49c3c7..38cfa49 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -163,9 +163,7 @@ Public Class ClassControlValues For Each control As Control In controls Dim ControlId As Integer = DirectCast(control.Tag, ClassControlMetadata).Id - If ControlId = 810 Then - Console.WriteLine("Obacht") - End If + ' Wert per LINQ aus DT_ControlValues suchen der zur aktuellen controlId passt Dim values As List(Of Object) = (From row In DT_ControlValues.AsEnumerable() Where row.Item("CONTROL_ID") = ControlId @@ -225,9 +223,7 @@ Public Class ClassControlValues Try ' Für die meisten Controls wird nur das erste Element der Liste benötigt Dim value As String = Nothing - If controlId = 810 Then - Console.WriteLine("Obacht") - End If + If values.Count > 0 Then value = values.Item(0) End If @@ -277,7 +273,7 @@ Public Class ClassControlValues ClassLogger.Add(" >> Sub LoadControlValue - Control-Type nicht berücksichtigt: " & GetType(Control).ToString(), False) End Select Catch ex As Exception - ClassLogger.Add("Unexpected Error in LoadControlValue - ControlID: " & controlId.ToString & " - Error: " & ex.Message, True) + ClassLogger.Add("Unexpected Error in LoadControlValue: " & ex.Message, True) MsgBox("Error in LoadControlValue:" & vbNewLine & ex.Message) End Try @@ -483,16 +479,25 @@ Public Class ClassControlValues Case GetType(DataGridView) Dim dgv As DataGridView = DirectCast(control, DataGridView) - dgv.Rows.Clear() + Dim ds = dgv.DataSource + + If (IsNothing(ds)) Then + dgv.Rows.Clear() + dgv.Refresh() + Else + dgv.DataSource = Nothing + dgv.Refresh() + End If + Console.WriteLine("Clearing DataGridView") End Select End Sub #End Region #Region "LoadDefaultValue" - Public Shared Sub LoadDefaultValues(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) + 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) + ClearControlValues(controls) Dim i = 0 For Each control As Control In controls @@ -503,10 +508,10 @@ Public Class ClassControlValues End If If TypeOf control Is GroupBox Then - LoadDefaultValues(FormID, RecordID, DirectCast(control, GroupBox).Controls) + LoadDefaultValues(FormID, RecordID, DirectCast(control, GroupBox).Controls, ParentRecordId, entity_ID) End If - LoadDefaultValue(CONTROL_ID, RecordID, control) + LoadDefaultValue(CONTROL_ID, RecordID, control, ParentRecordId, entity_ID) 'Den Focus auf das erste Steuerelement setzen If i = 1 Then @@ -516,7 +521,7 @@ Public Class ClassControlValues Next End Sub - Public Shared Sub LoadDefaultValue(ControlID As Integer, RecordID As Integer, control As Control) + Public Shared Sub LoadDefaultValue(ControlID As Integer, RecordID As Integer, control As Control, ParentRecordId As Integer, entity_ID As Integer) Try Dim SQL = String.Format("SELECT CONTROL_DEF_VALUE FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0}", ControlID) Dim autoValue = ClassDatabase.Execute_Scalar(SQL) @@ -586,6 +591,33 @@ Public Class ClassControlValues ' Mit EditValue kann man auch den angezeigten Wert leeren 'datepicker.DateTime = autoValue datepicker.EditValue = autoValue + Case GetType(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 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) + If ControlID = 984 Then + Console.WriteLine("VertragsNr") + End If + + If SQL_AUTOVALUE = "" Or IsDBNull(SQL_AUTOVALUE) Then + Exit Sub + End If + + If SQL_AUTOVALUE.ToUpper.StartsWith("select RECORD_ENTITY_ID FROM TBPMO_RECORD WHERE".ToUpper) Then + SQL_AUTOVALUE = "SELECT MAX(RECORD_ENTITY_ID) + 1 FROM TBPMO_RECORD WHERE FORM_ID = " & entity_ID + End If + If Not IsNothing(CONNID) Then + autoValue = ClassDatabase.Execute_ScalarWithConnection(CONNID, SQL_AUTOVALUE) + Else + autoValue = ClassDatabase.Execute_Scalar(SQL_AUTOVALUE, True) + End If + ' AutoValue = ClassDatabase.Execute_Scalar(SQL) + + If Not String.IsNullOrEmpty(autoValue) And Not IsDBNull(autoValue) Then + lbl.Text = autoValue + End If + End Select Catch ex As Exception MsgBox("Unexpected Error in LoadDefaultValue:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) diff --git a/app/DD-Record-Organiser/ClassCustomComboBox.vb b/app/DD-Record-Organiser/ClassCustomComboBox.vb index db30333..54037e0 100644 --- a/app/DD-Record-Organiser/ClassCustomComboBox.vb +++ b/app/DD-Record-Organiser/ClassCustomComboBox.vb @@ -7,23 +7,37 @@ DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed End Sub - Protected Overrides Sub OnEnabledChanged(e As EventArgs) - 'MyBase.OnEnabledChanged(e) + 'Protected Overrides Sub OnEnabledChanged(e As EventArgs) + ' 'MyBase.OnEnabledChanged(e) - If Me.Enabled Then - Me.DropDownStyle = ComboBoxStyle.DropDown - Else - Me.DropDownStyle = ComboBoxStyle.DropDownList - End If - End Sub + ' If Me.Enabled Then + ' Me.DropDownStyle = ComboBoxStyle.DropDown + ' Else + ' Me.DropDownStyle = ComboBoxStyle.DropDownList + ' End If + 'End Sub Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs) Dim g As System.Drawing.Graphics = e.Graphics Dim rect As Rectangle = e.Bounds If e.Index >= 0 Then - Dim label As String = Me.Items(e.Index).ToString() + Dim label As String + ' Wenn die Items eine Static List ist, wird der String ausgelesen + If (Me.Items(e.Index).GetType() = GetType(String)) Then + label = Me.Items(e.Index).ToString() + Else + 'Wenn die Items aus einer Datatable kommen, wird der DisplayMember ausgelesen + Dim rowView As DataRowView = Me.Items(e.Index) + Dim rowCount As Integer = rowView.Row.ItemArray.Count + + If rowCount = 1 Then + label = rowView.Item(0) + ElseIf rowCount = 2 Then + label = rowView.Item(1) + End If + End If If e.State = (DrawItemState.Disabled Or DrawItemState.NoAccelerator Or DrawItemState.NoFocusRect Or DrawItemState.ComboBoxEdit) Then ' DISABLED STATE diff --git a/app/DD-Record-Organiser/ClassDatabase.vb b/app/DD-Record-Organiser/ClassDatabase.vb index f72e83a..3d2cb0c 100644 --- a/app/DD-Record-Organiser/ClassDatabase.vb +++ b/app/DD-Record-Organiser/ClassDatabase.vb @@ -140,7 +140,7 @@ Public Class ClassDatabase Try Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand - SQLconnect.ConnectionString = connectionString + SQLconnect.ConnectionString = MyConnectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo diff --git a/app/DD-Record-Organiser/My Project/AssemblyInfo.vb b/app/DD-Record-Organiser/My Project/AssemblyInfo.vb index ceaf1d8..d448a29 100644 --- a/app/DD-Record-Organiser/My Project/AssemblyInfo.vb +++ b/app/DD-Record-Organiser/My Project/AssemblyInfo.vb @@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + \ No newline at end of file diff --git a/app/DD-Record-Organiser/frmConfig_Basic.vb b/app/DD-Record-Organiser/frmConfig_Basic.vb index e19b750..9bc5885 100644 --- a/app/DD-Record-Organiser/frmConfig_Basic.vb +++ b/app/DD-Record-Organiser/frmConfig_Basic.vb @@ -30,6 +30,7 @@ Public Class frmConfig_Basic CONNECTION_CHANGED = True 'Set the construction string MyConnectionString = con 'csb.ConnectionString + ClassDatabase.Init() My.Settings.Save() If chkbxUserAut.Checked = False Then Dim wrapper As New ClassEncryption("!35452didalog=") diff --git a/app/DD-Record-Organiser/frmConstructor_Main.vb b/app/DD-Record-Organiser/frmConstructor_Main.vb index 2d33e5f..587dd31 100644 --- a/app/DD-Record-Organiser/frmConstructor_Main.vb +++ b/app/DD-Record-Organiser/frmConstructor_Main.vb @@ -621,8 +621,6 @@ Public Class frmConstructor_Main Me.Cursor = Cursors.WaitCursor Column_Row_Handler() Me.Cursor = Cursors.Default - Me.Refresh() - ' pnlDetails.Invoke(sender, e) 'If dataloaded = True Then ' If LogErrorsOnly = False Then ClassLogger.Add(" >> grvwSelection_FocusedRowChanged - EditState: " & EDIT_STATE, False) ' Dim selRecID = GetSelected_RecordID() @@ -722,7 +720,8 @@ Public Class frmConstructor_Main RIGHT_ONLY_READ = False End Try If RIGHT_ONLY_READ = True Then - tsButtonAdd.Enabled = False + ' Hinzufügen sollte auch bei RIGHT_ONLY_READ verfügbar sein + tsButtonAdd.Enabled = True tsButtonEdit.Enabled = False tsButtonSave.Enabled = False tsButtonDelete.Enabled = False @@ -1154,9 +1153,11 @@ Public Class frmConstructor_Main Lock_RecordControls(False) tsButtonShowWorkflowTasks.Enabled = True CURRENT_PARENT_ID = PARENT_ID - ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls) + ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls, CURRENT_PARENT_ID, ENTITY_ID) ' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden tsButtonSave.Enabled = True + ' Muss aktiviert werden, sonst funktionieren die Combobox Abhängigkeits Events nicht + CURRENT_RECORD_ENABLED = True EDIT_STATE = EditState.Insert RECORD_CHANGED = True tsslblRecord.Text = "Adding record ......" @@ -1333,7 +1334,7 @@ Public Class frmConstructor_Main msg = "The record and all dependencies for '" & SELECTED_RECORD_ID & "' were deleted - " & Now End If Update_Status_Label(True, msg, EditState.Update) - + msg = "Wollen Sie die zugehörigen windream-Dateien ebenfalls löschen?" If USER_LANGUAGE <> "de-DE" Then msg = "Do You want to delete the related windream-documents?" @@ -1992,14 +1993,6 @@ Public Class frmConstructor_Main Case GetType(Windows.Forms.TextBox) Dim txt As TextBox = CType(Control, TextBox) txt.ReadOnly = state - Case GetType(DevExpress.XtraEditors.CheckedListBoxControl) - 'Dim chlb As DevExpress.XtraEditors.CheckedListBoxControl = CType(Control, DevExpress.XtraEditors.CheckedListBoxControl) - 'If state = True Then - ' chlb.Enabled = False - 'Else - ' chlb.Enabled = True - 'End If - Case Else Control.Enabled = Not state @@ -3197,6 +3190,7 @@ Public Class frmConstructor_Main If LogErrorsOnly = False Then ClassLogger.Add(" >> GetSearchDocuments took " & Format(elapsed, "0.000000000") & " seconds", False) If windreamSucheErgebnisse.Count > 0 Then Dim files_deleted As Integer = 0 + For Each dok As WMObject In windreamSucheErgebnisse Dim filename = "W:" & dok.aPath Try @@ -3212,7 +3206,7 @@ Public Class frmConstructor_Main MsgBox(msg, MsgBoxStyle.Information) Next Else - Dim msg = "Es wurden keine Dateien für diesen Datensatz gefunden!" + Dim msg = "Es wurden keine Dateien für diesen Datensatz gefunden!" If USER_LANGUAGE <> "de-DE" Then msg = "No files found for record!" End If @@ -3530,9 +3524,13 @@ Public Class frmConstructor_Main CURRENT_RECORD_ID = RECORD_ID CURRENT_FORM_ID = ENTITY_ID CURRENT_FORMVIEW_ID = FORMVIEW_ID - frmWD_Index_Dokart.ShowDialog() - RUN_WD_SEARCH(WD_Suche, "RECORD") + If ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBPMO_FILES_USER WHERE GUID = " & CURRENT_FILEID & " AND WORKED = 0") = 1 Then + frmWD_Index_Dokart.ShowDialog() + Else + If LogErrorsOnly = False Then ClassLogger.Add(" >> File was deleted or worked meanwhile!") + End If Next + RUN_WD_SEARCH(WD_Suche, "RECORD") End If End If Else @@ -4302,11 +4300,21 @@ Public Class frmConstructor_Main Console.WriteLine("Filter changed: " & Now) End Sub Public Sub New() - ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + End Sub + Private Sub AxObjectListControl_CausesValidationChanged(sender As Object, e As EventArgs) Handles AxObjectListControl.CausesValidationChanged + Console.WriteLine("CausesValidationChanged") + End Sub + + Private Sub AxObjectListControl_SettingFlagChanged(sender As Object, e As EventArgs) Handles AxObjectListControl.SettingFlagChanged + Console.WriteLine("SettingFlagChanged") + End Sub + + Private Sub AxObjectListControl_Validated(sender As Object, e As EventArgs) Handles AxObjectListControl.Validated + Console.WriteLine("Validated") End Sub End Class \ No newline at end of file diff --git a/app/DD-Record-Organiser/frmForm_Input.vb b/app/DD-Record-Organiser/frmForm_Input.vb index 13d7152..770a431 100644 --- a/app/DD-Record-Organiser/frmForm_Input.vb +++ b/app/DD-Record-Organiser/frmForm_Input.vb @@ -440,6 +440,23 @@ Public Class frmFormInput System.Windows.Forms.MessageBox.Show(ex.Message) End Try End Sub + + Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) + Dim result As MsgBoxResult + result = MessageBox.Show("Möchten Sie den Datensatz wirklich löschen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) + If result = MsgBoxResult.Yes Then + Dim sql As String = "DELETE FROM TBPMO_CONTROL_VALUE WHERE RECORD_ID = " & SelectedRecordID + If ClassDatabase.Execute_non_Query(sql) = True Then ' Delete der Controls erfolgreich ausgeführt, jetzt der Record + sql = "DELETE FROM TBPMO_RECORD WHERE GUID = " & SelectedRecordID + If ClassDatabase.Execute_non_Query(sql) = True Then + LoadOverview_Grid() + ToolStrip_Notice("Der Datensatz wurde erfolgreich gelöscht - " & Now) + End If + End If + + End If + End Sub + Private Sub tsbtnrefresh_Click(sender As Object, e As EventArgs) Handles tsbtnrefresh.Click LoadOverview_Grid() End Sub @@ -449,7 +466,7 @@ Public Class frmFormInput ClassControlValues.ClearControlValues(pnlView.Controls) ClassControlValues.UnloadControlValuesList(SelectedRecordID, thisformid, pnlView.Controls) ClassControlValues.LoadControlValuesList(thisformid, pnlView.Controls) - ClassControlValues.LoadDefaultValues(thisformid, SelectedRecordID, pnlView.Controls) + ClassControlValues.LoadDefaultValues(thisformid, SelectedRecordID, pnlView.Controls, 99, 99) 'Das Flag INSERT nach LoadControls setzen CtrlCommandUI.IsInsert = True diff --git a/app/DD-Record-Organiser/frmLevel_Designer.vb b/app/DD-Record-Organiser/frmLevel_Designer.vb index 84391b3..8dbace9 100644 --- a/app/DD-Record-Organiser/frmLevel_Designer.vb +++ b/app/DD-Record-Organiser/frmLevel_Designer.vb @@ -774,6 +774,7 @@ props.ShowColumn = NotNull(CBool(r.Item("CONTROL_SHOW_COLUMN")), True) props.TabStop = r.Item("CTRLSCR_TAB_STOP") props.TabIndex = r.Item("CTRLSCR_TAB_INDEX") + props.SQLCommand = New SQLValue(NotNull(r.Item("CONTROL_SQLCOMMAND_1"), "")) Case "Datagridview" props.ControlType = "DataGridView/Table" @@ -820,6 +821,7 @@ CType(r.Item("CTRLSCR_FONT_STYLE"), FontStyle)) props.ColumnTitle = ClassConverter.ToStringOrDefault(r.Item("CONTROL_COL_NAME"), ctrl.Name) props.ShowColumn = ClassConverter.ToBooleanOrDefault(r.Item("CONTROL_SHOW_COLUMN"), True) + props.SQLCommand = New SQLValue(NotNull(r.Item("CONTROL_SQLCOMMAND_1"), "")) Case "F_AddAppointment" props.ControlType = "Function.AddToCalendar" diff --git a/app/DD-Record-Organiser/frmTool_ControlProperties.vb b/app/DD-Record-Organiser/frmTool_ControlProperties.vb index e52d9a5..e90389a 100644 --- a/app/DD-Record-Organiser/frmTool_ControlProperties.vb +++ b/app/DD-Record-Organiser/frmTool_ControlProperties.vb @@ -50,7 +50,7 @@ Select Case type Case "Label" : props = New LabelProperties() Case "Textbox" : props = New TextBoxProperties() - Case "Combobox" : props = New ComboBoxProperties() + Case "CustomComboBox" : props = New ComboBoxProperties() Case "Checkbox" : props = New CheckBoxProperties() Case "RadioButton" : props = New RadioButtonProperties() Case "Datepicker" : props = New DateTimePickerProperties() @@ -97,7 +97,7 @@ props.Multiline = r.Item("CONTROL_MULTILINE") props.SQLCommand = New SQLValue(NotNull(r.Item("CONTROL_SQLCOMMAND_1"), "")) - Case "Combobox" + Case "CustomComboBox" props.FontColor = IntToColor(r.Item("CTRLSCR_FONT_COLOR")) props.Font = New Font(r.Item("CTRLSCR_FONT_FAMILY").ToString(), CType(r.Item("CTRLSCR_FONT_SIZE"), Single), @@ -303,7 +303,7 @@ ' Else ' props.Format = "String" ' End If - ' Case "Combobox" + ' Case "CustomComboBox" ' props = New ComboBoxProperties() ' props.MasterDataId = row.Item("CTRLSCR_MASTER_DATA_ID") ' props.DefaultValue = ClassConverter.ToStringOrDefault(row.Item("CONTROL_DEF_VALUE"))