From f3f1925634817c69b81ed92b1bea5fdebb474005 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 30 Mar 2021 11:41:02 +0200 Subject: [PATCH] LookupGrid: Filter datasource in popup according to selected values --- Controls.LookupGrid/LookupControl3.vb | 21 ++++++++++++++++++++- GUIs.Test.TestGUI/frmLookup.vb | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Controls.LookupGrid/LookupControl3.vb b/Controls.LookupGrid/LookupControl3.vb index cbf39441..744770de 100644 --- a/Controls.LookupGrid/LookupControl3.vb +++ b/Controls.LookupGrid/LookupControl3.vb @@ -8,6 +8,8 @@ Imports DevExpress.XtraEditors.ViewInfo Imports DevExpress.XtraEditors.Drawing Imports DevExpress.Accessibility Imports DevExpress.XtraEditors.Controls +Imports DevExpress.XtraGrid.Views.Base +Imports DevExpress.XtraGrid.Columns Public Class LookupControl3 @@ -50,11 +52,12 @@ Public Class RepositoryItemLookupControl3 Private Const TAG_DROPDOWN = "openDropdown" Private Const TAG_BUTTON_LOOKUP_FORM = "openLookupForm" + Public Const CustomEditName As String = "LookupControl3" + Private _R As Resources.ResourceManager = My.Resources.Strings.ResourceManager Private _SelectedValues As New List(Of String) Private _MultiSelect As Boolean = False Private _ReadOnly As Boolean = False - Public Const CustomEditName As String = "LookupControl3" Public Property AllowAddNewValues As Boolean Public Property PreventDuplicates As Boolean @@ -227,6 +230,22 @@ Public Class RepositoryItemLookupControl3 End Try End Sub + Private Shadows Sub Popup(sender As LookupControl3, e As EventArgs) Handles Me.BeforePopup + Dim oView As ColumnView = sender.Properties.View + + If DataSource IsNot Nothing AndAlso DataSource.Columns.Count > 0 Then + Dim oFirstColumn As String = DataSource.Columns.Item(0).ColumnName + + Dim oWrapped = SelectedValues.Select(Function(v As String) + Return $"'{v}'" + End Function).ToArray() + Dim oValueString As String = String.Join(",", oWrapped) + Dim oCriterium As String = $"[{oFirstColumn}] IN ({oValueString})" + View.ActiveFilterCriteria = DevExpress.Data.Filtering.CriteriaOperator.Parse(oCriterium) + View.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never + End If + End Sub + Public Sub HandleQueryPopup(sender As Object, e As CancelEventArgs) Handles Me.QueryPopUp If MultiSelect = False Then e.Cancel = True diff --git a/GUIs.Test.TestGUI/frmLookup.vb b/GUIs.Test.TestGUI/frmLookup.vb index b9465870..5e583021 100644 --- a/GUIs.Test.TestGUI/frmLookup.vb +++ b/GUIs.Test.TestGUI/frmLookup.vb @@ -21,6 +21,8 @@ Public Class frmLookup LookupControl31.Properties.DataSource = oTable LookupControl32.Properties.MultiSelect = True + LookupControl32.Properties.DisplayMember = "Col1" + LookupControl32.Properties.ValueMember = "Col1" LookupControl32.Properties.DataSource = oTable End Sub