diff --git a/app/TaskFlow/ClassControlCreator.vb b/app/TaskFlow/ClassControlCreator.vb index 428cd5d..c0763dd 100644 --- a/app/TaskFlow/ClassControlCreator.vb +++ b/app/TaskFlow/ClassControlCreator.vb @@ -804,7 +804,6 @@ Public Class ClassControlCreator Public Function GridTables_GetRepositoryItemForColumn(pColumnName As String, pDataTable As DataTable, pIsAdvancedLookup As Boolean) As RepositoryItem If pIsAdvancedLookup Then - Dim oEditor = New RepositoryItemLookupControl3 If pDataTable IsNot Nothing Then @@ -813,18 +812,34 @@ Public Class ClassControlCreator oEditor.DataSource = pDataTable End If + ' Erlaube ungültige Werte (verhindert automatisches Löschen) + oEditor.NullText = "[Ungültiger Wert]" + oEditor.ShowFooter = False + oEditor.AllowNullInput = DefaultBoolean.True + oEditor.ValidateOnEnterKey = True + + ' KRITISCH: Erlaube Texteingabe für ungültige Werte + oEditor.TextEditStyle = TextEditStyles.Standard + + ' Weitere Standard-Eigenschaften für LookupControl3 + 'oEditor.ImmediatePopup = False + Return oEditor Else Dim oEditor = New RepositoryItemComboBox() Dim oItems As New List(Of String) - AddHandler oEditor.Validating, Sub(_sender As ComboBoxEdit, _e As CancelEventArgs) - If oItems.Contains(_sender.EditValue) Then - _e.Cancel = False - Else - _e.Cancel = True - End If + ' KRITISCH: Erlaube Anzeige ungültiger Werte + oEditor.TextEditStyle = TextEditStyles.Standard ' Statt DisableTextEditor! + oEditor.AllowNullInput = DefaultBoolean.True + oEditor.ValidateOnEnterKey = True + AddHandler oEditor.Validating, Sub(_sender As ComboBoxEdit, _e As CancelEventArgs) + ' Prüfe nur bei Änderung, nicht beim Anzeigen + If Not oItems.Contains(_sender.EditValue) AndAlso _sender.IsModified Then + _e.Cancel = True + _sender.ErrorText = "Ungültiger Wert - bitte neu auswählen" + End If End Sub If pDataTable IsNot Nothing Then @@ -846,7 +861,6 @@ Public Class ClassControlCreator Return oEditor End If End Function - Public Sub GridTables_HandleControlValueChange(pControlPanel As XtraScrollableControl, pColumnsWithSqlAndControlPlaceholders As DataTable) If Not IsNothing(pColumnsWithSqlAndControlPlaceholders) AndAlso pColumnsWithSqlAndControlPlaceholders.Rows.Count > 0 Then For Each oRow As DataRow In pColumnsWithSqlAndControlPlaceholders.Rows diff --git a/app/TaskFlow/ControlCreator/GridControl.vb b/app/TaskFlow/ControlCreator/GridControl.vb index 02593a9..22caaca 100644 --- a/app/TaskFlow/ControlCreator/GridControl.vb +++ b/app/TaskFlow/ControlCreator/GridControl.vb @@ -462,23 +462,43 @@ Namespace ControlCreator isApplyingInheritedValue = True Try _Logger.Info(String.Format("Inherit Value is active for column. So inheritting the value [{0}]...", valueToApply)) - For dataIndex As Integer = listIndex + 1 To pView.DataRowCount - 1 - Dim targetHandle = pView.GetRowHandle(dataIndex) - If targetHandle = DevExpress.XtraGrid.GridControl.InvalidRowHandle OrElse pView.IsGroupRow(targetHandle) Then - Continue For - End If - If pView.IsNewItemRow(targetHandle) Then - Exit For - End If + ' Batch-Update mit BeginUpdate/EndUpdate für bessere Performance + pView.BeginUpdate() + Try + For dataIndex As Integer = listIndex + 1 To pView.DataRowCount - 1 + Dim targetHandle = pView.GetRowHandle(dataIndex) + If targetHandle = DevExpress.XtraGrid.GridControl.InvalidRowHandle OrElse pView.IsGroupRow(targetHandle) Then + Continue For + End If - Dim existingValue = pView.GetRowCellValue(targetHandle, pArgs.Column.FieldName) - If Equals(existingValue, valueToApply) Then - Continue For - End If + If pView.IsNewItemRow(targetHandle) Then + Exit For + End If + + Dim existingValue = pView.GetRowCellValue(targetHandle, pArgs.Column.FieldName) + If Equals(existingValue, valueToApply) Then + Continue For + End If + + pView.SetRowCellValue(targetHandle, pArgs.Column.FieldName, valueToApply) + Next + + ' WICHTIG: Nach dem Setzen der Werte die Spalte neu zeichnen + pView.LayoutChanged() + + ' Nur die betroffene Spalte invalidieren (effizienter als alle Zeilen) + For dataIndex As Integer = listIndex + 1 To pView.DataRowCount - 1 + Dim targetHandle = pView.GetRowHandle(dataIndex) + If targetHandle <> DevExpress.XtraGrid.GridControl.InvalidRowHandle AndAlso Not pView.IsNewItemRow(targetHandle) Then + pView.InvalidateRowCell(targetHandle, pArgs.Column) + End If + Next + + Finally + pView.EndUpdate() + End Try - pView.SetRowCellValue(targetHandle, pArgs.Column.FieldName, valueToApply) - Next Finally isApplyingInheritedValue = False End Try diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx index 2a0f901..3b2bf0b 100644 --- a/app/TaskFlow/frmMain.resx +++ b/app/TaskFlow/frmMain.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw - CAAAAk1TRnQBSQFMAgEBAgEAAbABCwGwAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAbgBCwG4AQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA