jj 19_01_16

This commit is contained in:
JenneJ
2016-01-19 15:07:04 +01:00
parent 85fccc233b
commit 5c014d3173
8 changed files with 240 additions and 362 deletions

View File

@@ -15,16 +15,17 @@
Public Class _ListControl : Inherits _BaseControl
Public Shared Function _GetDynamicValue(controlId As Integer, formId As Integer, recordId As Integer, parentRecordId As Integer) As DynamicValue
Public Shared Function GetDynamicValue(controlId As Integer, formId As Integer, sqlCommand As String) As DynamicValue
Dim returnValue As DynamicValue
returnValue.StaticList = CheckForStaticList(controlId, recordId)
returnValue.DataTable = CheckForSqlCommand(controlId, formId, recordId, parentRecordId)
returnValue.StaticList = CheckForStaticList(controlId)
returnValue.DataTable = GetSqlList(controlId, formId, SQLCommand)
'returnValue.DataTable = CheckForSqlCommand(controlId, formId)
Return returnValue
End Function
Private Shared Function CheckForStaticList(controlId As Integer, recordId As Integer) As List(Of String)
Private Shared Function CheckForStaticList(controlId As Integer) As List(Of String)
Try
' Der alte SQL Befehl hat nicht wirklich nach der StaticList geschaut o_O
' Dim SQL As String = String.Format("SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", controlId, recordId)
@@ -42,35 +43,96 @@
End Try
End Function
Private Shared Function CheckForSqlCommand(controlId As Integer, formId As Integer, recordId As Integer, parentRecordId As Integer) As DataTable
Private Shared Function GetSqlList(controlId As Integer, formId As Integer, sqlCommand As String)
Try
Dim SQL As String = String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", controlId)
Dim SqlCommand As String = ClassDatabase.Execute_Scalar(SQL)
If SqlCommand Is Nothing Or SqlCommand = String.Empty Then
If sqlCommand Is Nothing Or sqlCommand = String.Empty Then
Return Nothing
End If
If SqlCommand.Contains("@") Then
SqlCommand = ReplaceSqlCommandPlaceholders(SqlCommand, recordId, parentRecordId)
End If
'Dim cached As DataTable = ClassControlValueCache.LoadFromCache(formId, controlId)
Dim cached As DataTable = ClassControlValueCache.LoadFromCache(sqlCommand)
Dim final As DataTable
Dim CachedDataTable As DataTable = ClassControlValueCache.LoadFromCache(formId, controlId)
Dim FinalDataTable As DataTable
If CachedDataTable Is Nothing Then
FinalDataTable = ClassDatabase.Return_Datatable(SqlCommand)
ClassControlValueCache.SaveToCache(formId, controlId, FinalDataTable)
If cached Is Nothing Then
final = ClassDatabase.Return_Datatable(sqlCommand)
'ClassControlValueCache.SaveToCache(formId, controlId, final)
ClassControlValueCache.SaveToCache(sqlCommand, final)
Else
FinalDataTable = CachedDataTable
final = cached
End If
Return FinalDataTable
Return final
Catch ex As Exception
MsgBox("Error in CheckForSqlCommand: " & vbNewLine & ex.Message)
MsgBox("Error in GetSqlList: " & vbNewLine & ex.Message)
Return Nothing
End Try
End Function
Overloads Shared Sub SetDataSource(control As Windows.Forms.ComboBox, dt As DataTable)
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
' 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.CheckedListBoxControl, dt As DataTable)
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
' 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)
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
' 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
End Class
@@ -85,7 +147,7 @@
Dim AutoValue As String = String.Empty
Dim ControlId As Integer = control.Tag
Dim SQL As String = ClassDatabase.Execute_Scalar(String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlId))
SQL = ReplaceSqlCommandPlaceholders(SQL, RecordId, ParentRecordId)
SQL = ClassControlValues.ReplaceSqlCommandPlaceholders(SQL, RecordId, ParentRecordId)
If SQL = "" Or IsDBNull(SQL) Then
Return control.Text
@@ -161,53 +223,17 @@
control.Text = value
End Sub
Public Shared Sub LoadList(control As Windows.Forms.ComboBox, formId As Integer, recordId As Integer, parentRecordId As Integer)
Public Shared Sub LoadList(control As Windows.Forms.ComboBox, formId As Integer, SQLCommand As String)
Try
Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId)
Dim dynamic As DynamicValue = GetDynamicValue(control.Tag, formId, SQLCommand)
If dynamic.StaticList IsNot Nothing Then
control.DataSource = dynamic.StaticList
End If
If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then
Dim dt As DataTable = dynamic.DataTable
Dim columnCount As Integer = dt.Columns.Count
Dim sw2 = Stopwatch.StartNew()
' 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
' Die alte Methode:
'control.DataSource = dt
'If dt.Columns.Count = 1 Then
' control.DisplayMember = dt.Columns(0).ColumnName
' control.ValueMember = dt.Columns(0).ColumnName
'ElseIf dt.Columns.Count = 2 Then
' control.DisplayMember = dt.Columns(1).ColumnName
' control.ValueMember = dt.Columns(0).ColumnName
'End If
sw2.Stop()
Console.WriteLine("Assingning the DataSource took {0}ms", sw2.ElapsedMilliseconds)
CalculateDropdownWidth(control, dt)
SetDataSource(control, dynamic.DataTable)
CalculateDropdownWidth(control, dynamic.DataTable)
End If
Catch ex As Exception
MsgBox("Error in Combobox.LoadList:" & vbNewLine & ex.Message)
@@ -252,35 +278,16 @@
Next
End Sub
Public Shared Sub LoadList(control As DevExpress.XtraEditors.CheckedListBoxControl, formId As Integer, recordId As Integer, parentRecordId As Integer)
Public Shared Sub LoadList(control As DevExpress.XtraEditors.CheckedListBoxControl, formId As Integer, SQLCommand As String)
Try
Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId)
Dim dynamic As DynamicValue = GetDynamicValue(control.Tag, formId, SQLCommand)
If dynamic.StaticList IsNot Nothing Then
control.DataSource = dynamic.StaticList
End If
If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then
Dim dt As DataTable = dynamic.DataTable
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
' 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
SetDataSource(control, dynamic.DataTable)
End If
Catch ex As Exception
@@ -300,34 +307,15 @@
control.SelectedIndex = control.FindStringExact(value)
End Sub
Public Shared Sub LoadList(control As DevExpress.XtraEditors.ListBoxControl, formId As Integer, recordId As Integer, parentRecordId As Integer)
Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId)
Public Shared Sub LoadList(control As DevExpress.XtraEditors.ListBoxControl, formId As Integer, SQLCommand As String)
Dim dynamic As DynamicValue = GetDynamicValue(control.Tag, formId, SQLCommand)
If dynamic.StaticList IsNot Nothing Then
control.DataSource = dynamic.StaticList
End If
If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then
Dim dt As DataTable = dynamic.DataTable
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
' 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
SetDataSource(control, dynamic.DataTable)
End If
End Sub