From 11908ab24685a5a57dd4917f7f18a559468a04aa Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Wed, 7 Apr 2021 12:28:40 +0200 Subject: [PATCH] LookupGrid: Update Datasource when new value is added --- Controls.LookupGrid/LookupControl3.vb | 10 +++++++++ Controls.LookupGrid/frmLookupGrid.vb | 30 ++++++++++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Controls.LookupGrid/LookupControl3.vb b/Controls.LookupGrid/LookupControl3.vb index 3d7cf7df..dd77c3ed 100644 --- a/Controls.LookupGrid/LookupControl3.vb +++ b/Controls.LookupGrid/LookupControl3.vb @@ -229,6 +229,16 @@ Public Class RepositoryItemLookupControl3 If oResult = Windows.Forms.DialogResult.OK Then Dim oValues = oForm.SelectedValues UpdateSelectedValues(oValues) + + If oForm.NewValues.Count > 0 AndAlso TypeOf DataSource Is DataTable Then + Dim oTable As DataTable = DirectCast(DataSource, DataTable) + + For Each oValue In oForm.NewValues + Dim oRow = oTable.NewRow() + oRow.Item(0) = oValue + oTable.Rows.Add(oRow) + Next + End If End If End Using End If diff --git a/Controls.LookupGrid/frmLookupGrid.vb b/Controls.LookupGrid/frmLookupGrid.vb index c770f47d..a25db847 100644 --- a/Controls.LookupGrid/frmLookupGrid.vb +++ b/Controls.LookupGrid/frmLookupGrid.vb @@ -9,6 +9,9 @@ Public Class frmLookupGrid Public Property PreventDuplicates As Boolean Public Property DataSource As DataTable Public Property SelectedValues As List(Of String) + Public Property NewValues As New HashSet(Of String) + + Public Const COLUMN_SELECTED = "SELECTED" Private _DataColumn As Integer Private _DataSourceTemp As DataTable @@ -29,7 +32,7 @@ Public Class frmLookupGrid End If If MultiSelect Then - If Not _DataSourceTemp.Columns.Contains("SELECTED") Then + If Not _DataSourceTemp.Columns.Contains(COLUMN_SELECTED) Then Dim selectedColumn = New DataColumn() With { .ColumnName = "SELECTED", .DataType = GetType(Boolean), @@ -96,7 +99,7 @@ Public Class frmLookupGrid For oIndex = 0 To viewLookup.DataRowCount - 1 Dim oRow As DataRow = _View.GetDataRow(oIndex) Dim oSelected As Boolean = oRow.Item(0) - Dim oValue As Object = oRow.Item(1) + Dim oValue As Object = GetValueFromRow(oRow) If oSelected Then oValues.Add(oValue) @@ -115,7 +118,7 @@ Public Class frmLookupGrid Dim oValues As New List(Of String) If oRow IsNot Nothing Then - Dim oValue = oRow.Item(0) + Dim oValue = GetValueFromRow(oRow) oValues.Add(oValue) End If @@ -123,6 +126,13 @@ Public Class frmLookupGrid End If End Sub + Private Function GetValueFromRow(pRow As DataRow) As String + If MultiSelect Then + Return pRow.Item(1) + Else + Return pRow.Item(0) + End If + End Function Private Sub SyncItemsWithView(view As GridView) ' Wenn Vorbelegungen existieren, werden diese angehakt @@ -145,8 +155,6 @@ Public Class frmLookupGrid End If End If End If - - Next End If End Sub @@ -235,9 +243,15 @@ Public Class frmLookupGrid End Sub Private Sub viewLookup_ValidateRow(sender As Object, e As ValidateRowEventArgs) Handles viewLookup.ValidateRow - If MultiSelect And e.RowHandle = GridControl.NewItemRowHandle Then - Dim oRow As DataRowView = viewLookup.GetRow(e.RowHandle) - oRow.Row.Item("SELECTED") = True + If e.RowHandle = GridControl.NewItemRowHandle Then + Dim oRowView As DataRowView = viewLookup.GetRow(e.RowHandle) + Dim oValue = GetValueFromRow(oRowView.Row) + NewValues.Add(oValue) + + ' Automatically select newly added row when MultiSelect is enabled + If MultiSelect Then + oRowView.Row.Item(COLUMN_SELECTED) = True + End If End If End Sub End Class \ No newline at end of file