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