From f2997b8f2677913a2f7484c67726ee879e3cbcd7 Mon Sep 17 00:00:00 2001 From: JenneJ Date: Mon, 14 Dec 2015 13:06:51 +0100 Subject: [PATCH 1/2] jj 14.12 --- app/DD-Record-Organiser/ClassControlBuilder.vb | 2 ++ app/DD-Record-Organiser/ClassControlValues.vb | 15 +++++++++------ .../frmForm_Constructor_Main_2.vb | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/DD-Record-Organiser/ClassControlBuilder.vb b/app/DD-Record-Organiser/ClassControlBuilder.vb index 8271230..cb2d96f 100644 --- a/app/DD-Record-Organiser/ClassControlBuilder.vb +++ b/app/DD-Record-Organiser/ClassControlBuilder.vb @@ -772,6 +772,8 @@ Public Class ClassControlBuilder control.Parent = _master_panel control.DropDownStyle = ComboBoxStyle.DropDown control.FormattingEnabled = True + control.AutoCompleteMode = AutoCompleteMode.Append + control.AutoCompleteSource = AutoCompleteSource.ListItems If (Not _designMode And read_only) Then control.Enabled = Not read_only diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index 57cab58..af9102d 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -152,8 +152,8 @@ Public Class ClassControlValues LoadControlValue_forControl(RecordID, FormID, DirectCast(control, ComboBox), CONTROL_ID) 'LoadControlValues(RecordID, FormID, DirectCast(control, ComboBox).Controls) ElseIf TypeOf control Is GroupBox Then - LoadControlValue_forControl(RecordID, FormID, DirectCast(control, GroupBox), CONTROL_ID) - ' LoadControlValues(RecordID, FormID, DirectCast(control, GroupBox).Controls) + 'LoadControlValue_forControl(RecordID, FormID, DirectCast(control, GroupBox), CONTROL_ID) + LoadControlValues(RecordID, FormID, DirectCast(control, GroupBox).Controls) ElseIf TypeOf control Is PictureBox Then LoadImage(RecordID, CONTROL_ID, control) Else @@ -393,10 +393,10 @@ Public Class ClassControlValues End Try End Sub + Public Shared Sub LoadControlValuesList(RecordID As Integer, FormID As Integer, controls As Control.ControlCollection) Try For Each Ctrl As Control In controls - If TypeOf Ctrl Is ComboBox Then Dim Combobox = DirectCast(Ctrl, ComboBox) @@ -418,9 +418,10 @@ Public Class ClassControlValues Combobox.DataSource = DT_Combobox Combobox.DisplayMember = DT_Combobox.Columns(1).ColumnName Combobox.ValueMember = DT_Combobox.Columns(0).ColumnName - Combobox.AutoCompleteMode = AutoCompleteMode.Append - Combobox.AutoCompleteSource = AutoCompleteSource.ListItems + 'Combobox.AutoCompleteMode = AutoCompleteMode.Append + 'Combobox.AutoCompleteSource = AutoCompleteSource.ListItems End If + Dim iWidestWidth As Integer = 300 For Each row As DataRow In DT_Combobox.Rows 'Die BReite der DropDown-Lsit anpassen @@ -432,15 +433,17 @@ Public Class ClassControlValues End Using ' control.Items.Add(row.Item(0).ToString) Next + If iWidestWidth > 300 Then Combobox.DropDownWidth = Math.Max(iWidestWidth, Combobox.Width) End If + LoadControlValue(RecordID, GetControlID_for_Name(Combobox.Name, FormID), Ctrl) End If - End If + Next Catch ex As Exception MsgBox("Unexpected Error in LoadControlValuesList:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) diff --git a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb index 5ea390d..3b54775 100644 --- a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb +++ b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb @@ -1022,6 +1022,7 @@ Public Class frmForm_Constructor_Main_2 NEW_RECORD_ID = 0 If Not RECORD_CHANGED Then Update_Status_Label(True, "KEINE Änderungen an Datensatz.") + Me.Cursor = Cursors.Default Exit Sub End If End If From 1607cb96c52d6dccd7a1746b29c11912d4dae708 Mon Sep 17 00:00:00 2001 From: JenneJ Date: Mon, 14 Dec 2015 15:41:23 +0100 Subject: [PATCH 2/2] jj 14_12 --- .../ClassControlValueCache.vb | 68 +++++++++++++++++++ app/DD-Record-Organiser/ClassControlValues.vb | 30 ++++++-- .../DD-Record-Organiser.vbproj | 1 + 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 app/DD-Record-Organiser/ClassControlValueCache.vb diff --git a/app/DD-Record-Organiser/ClassControlValueCache.vb b/app/DD-Record-Organiser/ClassControlValueCache.vb new file mode 100644 index 0000000..3a75edb --- /dev/null +++ b/app/DD-Record-Organiser/ClassControlValueCache.vb @@ -0,0 +1,68 @@ +Public Class ClassControlValueCache + + Private Shared Property Cache As New Dictionary(Of String, Dictionary(Of String, DataTable)) + + Public Shared Function LoadFromCache(formId As Integer, controlId As Integer) As DataTable + + Dim dict As Dictionary(Of String, DataTable) = GetCachedFormDict(formId.ToString()) + + If IsNothing(dict) Then + Return Nothing + Else + + Dim dt As DataTable = GetCachedControlDict(dict, controlId.ToString()) + + If IsNothing(dt) Then + Return Nothing + Else + Return dt + End If + + End If + + End Function + + Public Shared Function SaveToCache(formId As Integer, controlId As Integer, dt As DataTable) As DataTable + + Dim dict As Dictionary(Of String, DataTable) = GetCachedFormDict(formId.ToString()) + + If IsNothing(dict) Then + dict = SetCachedFormDict(formId.ToString(), New Dictionary(Of String, DataTable)) + End If + + SetCachedControlDict(dict, controlId.ToString(), dt) + Return dt + End Function + + + Private Shared Function GetCachedFormDict(formId As Integer) As Dictionary(Of String, DataTable) + + If Cache.ContainsKey(formId.ToString()) Then + Return Cache.Item(formId.ToString()) + Else + Return Nothing + End If + + End Function + + Private Shared Function SetCachedFormDict(formId As Integer, dict As Dictionary(Of String, DataTable)) As Dictionary(Of String, DataTable) + Cache.Item(formId.ToString()) = dict + Return dict + End Function + + Private Shared Function GetCachedControlDict(dict As Dictionary(Of String, DataTable), controlId As Integer) As DataTable + + If dict.ContainsKey(controlId.ToString()) Then + Return dict.Item(controlId.ToString()) + Else + Return Nothing + End If + + End Function + + Private Shared Function SetCachedControlDict(dict As Dictionary(Of String, DataTable), controlId As Integer, dt As DataTable) As DataTable + dict.Item(controlId.ToString()) = dt + Return dt + End Function + +End Class diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index af9102d..064cd04 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -396,8 +396,13 @@ Public Class ClassControlValues Public Shared Sub LoadControlValuesList(RecordID As Integer, FormID As Integer, controls As Control.ControlCollection) Try + + Dim SW As Stopwatch = Stopwatch.StartNew() + For Each Ctrl As Control In controls If TypeOf Ctrl Is ComboBox Then + Dim swInner As Stopwatch = Stopwatch.StartNew() + Dim Combobox = DirectCast(Ctrl, ComboBox) Dim SQL As String = String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE FORM_ID = {0} AND NAME = '{1}'", CURRENT_FORM_ID, Ctrl.Name) @@ -412,14 +417,24 @@ Public Class ClassControlValues SQL2 = SQL2.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL Combobox: " & cmbSql, False) End If - Dim DT_Combobox As DataTable = ClassDatabase.Return_Datatable(SQL2) + + Dim controlId As Integer = GetControlID_for_Name(Combobox.Name, FormID) + 'Dim DT_Combobox As DataTable = ClassDatabase.Return_Datatable(SQL2) + + ' Zuerst versuchen, DataTable aus dem Cache zu laden + Dim DT_Combobox As DataTable = ClassControlValueCache.LoadFromCache(FormID, controlId) + ' Wenn DataTable nicht im Cache vorhanden, aus der Datenbank laden + If IsNothing(DT_Combobox) Then + DT_Combobox = ClassDatabase.Return_Datatable(SQL2) + End If + If DT_Combobox Is Nothing = False Then If DT_Combobox.Rows.Count > 0 Then Combobox.DataSource = DT_Combobox Combobox.DisplayMember = DT_Combobox.Columns(1).ColumnName Combobox.ValueMember = DT_Combobox.Columns(0).ColumnName - 'Combobox.AutoCompleteMode = AutoCompleteMode.Append - 'Combobox.AutoCompleteSource = AutoCompleteSource.ListItems + + ClassControlValueCache.SaveToCache(FormID, controlId, DT_Combobox) End If Dim iWidestWidth As Integer = 300 @@ -438,13 +453,20 @@ Public Class ClassControlValues Combobox.DropDownWidth = Math.Max(iWidestWidth, Combobox.Width) End If - LoadControlValue(RecordID, GetControlID_for_Name(Combobox.Name, FormID), Ctrl) + LoadControlValue(RecordID, controlId, Ctrl) End If + + swInner.Stop() + Console.WriteLine("Loading List for Control {0} took {1} milliseconds", Ctrl.Name, swInner.ElapsedMilliseconds) End If Next + + SW.Stop() + Console.WriteLine("LoadControlValuesList took {0} milliseconds to load", SW.ElapsedMilliseconds) + Catch ex As Exception MsgBox("Unexpected Error in LoadControlValuesList:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try diff --git a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj index 9cc381f..56d608e 100644 --- a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj +++ b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj @@ -241,6 +241,7 @@ +