diff --git a/app/DD-Record-Organiser/frmConstructor_Main.vb b/app/DD-Record-Organiser/frmConstructor_Main.vb index 1585c28..0290a9c 100644 --- a/app/DD-Record-Organiser/frmConstructor_Main.vb +++ b/app/DD-Record-Organiser/frmConstructor_Main.vb @@ -157,17 +157,20 @@ Public Class frmConstructor_Main End Sub Private Sub frmForm_Constructor_Main_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - If RECORD_CHANGED = True Then - Dim ResultMessage As String - Try - ResultMessage = Update_Record_OnChange() - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") - Me.Cursor = Cursors.Default - ' Verhindert den Zeilenwechsel - e.Cancel = True - Exit Sub - End Try + 'If RECORD_CHANGED = True Then + ' Dim ResultMessage As String + ' Try + ' ResultMessage = Update_Record_OnChange() + ' Catch ex As Exception + ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ' Me.Cursor = Cursors.Default + ' ' Verhindert den Zeilenwechsel + ' e.Cancel = True + ' Exit Sub + ' End Try + 'End If + If TrySave_Automatic() = False Then + e.Cancel = True End If @@ -694,16 +697,19 @@ Public Class frmConstructor_Main End Function Private Sub grvwGrid_BeforeLeaveRow(sender As Object, e As RowAllowEventArgs) Handles grvwGrid.BeforeLeaveRow - If RECORD_CHANGED = True Then - Dim ResultMessage As String - Try - ResultMessage = Update_Record_OnChange() - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") - Me.Cursor = Cursors.Default - ' Verhindert den Zeilenwechsel - e.Allow = False - End Try + 'If RECORD_CHANGED = True Then + ' Dim ResultMessage As String + ' Try + ' ResultMessage = Update_Record_OnChange() + ' Catch ex As Exception + ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ' Me.Cursor = Cursors.Default + ' ' Verhindert den Zeilenwechsel + ' e.Allow = False + ' End Try + 'End If + If TrySave_Automatic() = False Then + e.Allow = False End If End Sub @@ -784,7 +790,10 @@ Public Class frmConstructor_Main grvwTiles.OptionsBehavior.Editable = Not IsTopFirstRow End If End If - Check_Record_Changed() + + 'Wird jetzt bei BeforeRowChange überprüft + 'Check_Record_Changed() + DisableEditMode() VerknüpfungenAnzeigenToolStripMenuItem.Enabled = True elapsed = sw.Elapsed.TotalSeconds @@ -1406,20 +1415,24 @@ Public Class frmConstructor_Main End If End If - 'Update aller Control-Werte - Dim ResultMessage - ' Wenn MussFelder nicht ausgefüllt werden, wird eine exception geworfen und abgefangen - Try - ResultMessage = Update_Record_OnChange() - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ''Update aller Control-Werte + 'Dim ResultMessage + '' Wenn MussFelder nicht ausgefüllt werden, wird eine exception geworfen und abgefangen + 'Try + ' ResultMessage = Update_Record_OnChange() + 'Catch ex As Exception + ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ' Me.Cursor = Cursors.Default + ' Return False + 'End Try + 'Update_Status_Label(True, ResultMessage, EDIT_STATE) + If TrySave_User() = False Then + ' Cursor zurücksetzen Me.Cursor = Cursors.Default Return False - End Try + End If Dim recid As Integer - Update_Status_Label(True, ResultMessage, EDIT_STATE) - 'If EDIT_STATE = EditState.Update Then ' recid = RECORD_ID 'Else @@ -1587,18 +1600,19 @@ Public Class frmConstructor_Main If RECORD_ENABLED = False Then EnableEditMode() Else - If RECORD_CHANGED = True Then - Dim ResultMessage As String - Try - ResultMessage = Update_Record_OnChange() - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") - Me.Cursor = Cursors.Default - Exit Sub - End Try + 'If RECORD_CHANGED = True Then + ' Dim ResultMessage As String + ' Try + ' ResultMessage = Update_Record_OnChange() + ' Catch ex As Exception + ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ' Me.Cursor = Cursors.Default + ' Exit Sub + ' End Try + 'End If + If TrySave_User() = True Then + DisableEditMode() End If - - DisableEditMode() End If End Sub @@ -2353,7 +2367,6 @@ Public Class frmConstructor_Main Next End Sub - Private Sub Check_Record_Changed() If EDIT_STATE <> EditState.None Then Update_Status_Label(False, "") @@ -2376,7 +2389,8 @@ Public Class frmConstructor_Main 'CtrlCommandUI.IsInsert = False End If Try - Update_Record_OnChange() + Dim ResultMessage = Update_Record_OnChange() + Update_Status_Label(True, ResultMessage) Catch ex As Exception MsgBox("Error in Save Record Changes: " & vbNewLine & ex.Message, MsgBoxStyle.Exclamation) End Try @@ -2387,15 +2401,15 @@ Public Class frmConstructor_Main ClassDatabase.Execute_non_Query(del, True) End If - Dim ResultMessage - ' Wenn MussFelder nicht ausgefüllt werden, wird eine exception geworfen und abgefangen - Try - ResultMessage = Update_Record_OnChange() - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") - Me.Cursor = Cursors.Default - Exit Sub - End Try + 'Dim ResultMessage + '' Wenn MussFelder nicht ausgefüllt werden, wird eine exception geworfen und abgefangen + 'Try + ' ResultMessage = Update_Record_OnChange() + 'Catch ex As Exception + ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") + ' Me.Cursor = Cursors.Default + ' Exit Sub + 'End Try End If CtrlCommandUI.IsInsert = False @@ -2987,6 +3001,7 @@ Public Class frmConstructor_Main Dim ResultMessage = CtrlCommandUI.SaveRecord(SELECTED_RECORD_ID, ENTITY_ID, PARENT_RECORDID) 'Jetzt die für die Entität notwendigen Prroceduren ausführen Customer_Run_Procedures() + RECORD_CHANGED = False Return ResultMessage @@ -4877,7 +4892,6 @@ Public Class frmConstructor_Main msg = "The Parent-Record was changed successful!" End If MsgBox(msg, MsgBoxStyle.Information) - Check_Record_Changed() 'Load_Data_for_TreeView() btnRelinkParentID.BackColor = Color.Lime btnRelinkParentID.FlatAppearance.BorderColor = Color.Lime @@ -5122,4 +5136,136 @@ Public Class frmConstructor_Main End If End Sub + +#Region "TrySave Funktionen" + Public Function TrySave_RequiredControlsFilled() As Boolean + Dim missingValues As New List(Of String) + missingValues = ClassControlValues.CheckRequiredControlValues(CtrlBuilder.MasterPanel.Controls) + + If missingValues.Count > 0 Then + Dim RequiredControlNames = String.Join(vbNewLine, missingValues) + + If (USER_LANGUAGE = "de-DE") Then + Dim message = String.Format("Die folgenden Steuerelemente müssen ausgefüllt sein: {0}{1}", vbNewLine, RequiredControlNames) + MessageBox.Show(message, "Muss-Felder ausfüllen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + Else + Dim message = String.Format("The following controls must be filled with values: {0}{1}", vbNewLine, RequiredControlNames) + MessageBox.Show(message, "Fill Required Controls", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + End If + + Focus_Control(missingValues.First()) + + ' Muss-Felder sind noch nicht ausgefüllt worden + Return False + Else + ' Muss-Felder sind alle ausgefüllt + Return True + End If + End Function + + ''' + ''' Überprüft beim manuellen Speichern, ob Datensatz verändert wurde und + ''' ob alle Muss-Felder ausgefüllt wurden + ''' + ''' + ''' Gibt False zurück, wenn nicht alle Muss-Felder gefüllt wurde, + ''' ansonsten True + ''' + Public Function TrySave_User() As Boolean + Try + EDIT_STATE = EditState.None + 'Update_Status_Label(False) + + If RECORD_CHANGED = False Then + ' Datensatz wurde nicht verändert + Return True + End If + + Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled() + + If RequiredControlsFilled = True Then + TrySave_DoSave() + + Return True + Else + Return False + End If + Catch ex As Exception + MessageBox.Show("Error in TrySave_User: " & vbNewLine & ex.Message) + Return False + End Try + End Function + + Public Sub TrySave_DoSave() + ' Record Speichern + Dim ResultMessage = CtrlCommandUI.SaveRecord(SELECTED_RECORD_ID, ENTITY_ID, PARENT_RECORDID) + ' Status anzeigen + Update_Status_Label(True, ResultMessage) + 'Jetzt die für die Entität notwendigen Prroceduren ausführen + Customer_Run_Procedures() + ' RECORD_CHANGED zurücksetzen + RECORD_CHANGED = False + End Sub + + ''' + ''' Fragt den Benutzer beim Datensatzwechsel, ob Änderungen gespeichert werden sollen. Gibt False zurück, wenn Mussfelder ausgefüllt werden müssen, ansonsten True. + ''' + Public Function TrySave_Automatic() As Boolean + Try + EDIT_STATE = EditState.None + 'Update_Status_Label(False) + + If RECORD_CHANGED = True Then + Dim ShouldSave As DialogResult + If USER_LANGUAGE = "de-DE" Then + ShouldSave = MessageBox.Show("Sie haben ungespeicherte Änderungen. Wollen Sie diese speichern?", "Ungespeicherte Änderungen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) + Else + ShouldSave = MessageBox.Show("There are unsaved changes. Would You like to save?", "Unsaved changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) + End If + + If ShouldSave = DialogResult.Yes Then + If CtrlCommandUI.IsInsert Then + EDIT_STATE = EditState.None + Lock_RecordControls(True) + End If + + Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled() + + If RequiredControlsFilled = True Then + ' Änderungen sollen gespeichert werden, + ' Muss-Felder sind alle ausgefüllt + TrySave_DoSave() + + Return True + Else + ' Änderungen sollen gespeichert werden, + ' aber Muss-Felder sind noch nicht ausgefüllt worden + Return False + End If + Else + ' Angelegten Record löschen + If CtrlCommandUI.IsInsert Then + Dim DeleteRecordSQL = String.Format("EXEC [dbo].[PRPMO_DELETE_RECORD] {0}", SELECTED_RECORD_ID) + ClassDatabase.Execute_non_Query(DeleteRecordSQL, True) + End If + + ' Änderungen sollen nicht gespeichert werden + RECORD_CHANGED = False + tsButtonCancel.Visible = False + + Return True + End If + Else + + ' Datensatz wurde nicht verändert + Return True + End If + Catch ex As Exception + MessageBox.Show("Error in TrySave_Automatic: " & vbNewLine & ex.Message) + Return False + End Try + End Function +#End Region + + End Class \ No newline at end of file