LookupGrid: Filter datasource in popup according to selected values

This commit is contained in:
Jonathan Jenne 2021-03-30 11:41:02 +02:00
parent 0e951c630e
commit f3f1925634
2 changed files with 22 additions and 1 deletions

View File

@ -8,6 +8,8 @@ Imports DevExpress.XtraEditors.ViewInfo
Imports DevExpress.XtraEditors.Drawing Imports DevExpress.XtraEditors.Drawing
Imports DevExpress.Accessibility Imports DevExpress.Accessibility
Imports DevExpress.XtraEditors.Controls Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Columns
<ToolboxItem(True)> <ToolboxItem(True)>
Public Class LookupControl3 Public Class LookupControl3
@ -50,11 +52,12 @@ Public Class RepositoryItemLookupControl3
Private Const TAG_DROPDOWN = "openDropdown" Private Const TAG_DROPDOWN = "openDropdown"
Private Const TAG_BUTTON_LOOKUP_FORM = "openLookupForm" Private Const TAG_BUTTON_LOOKUP_FORM = "openLookupForm"
Public Const CustomEditName As String = "LookupControl3"
Private _R As Resources.ResourceManager = My.Resources.Strings.ResourceManager Private _R As Resources.ResourceManager = My.Resources.Strings.ResourceManager
Private _SelectedValues As New List(Of String) Private _SelectedValues As New List(Of String)
Private _MultiSelect As Boolean = False Private _MultiSelect As Boolean = False
Private _ReadOnly As Boolean = False Private _ReadOnly As Boolean = False
Public Const CustomEditName As String = "LookupControl3"
Public Property AllowAddNewValues As Boolean Public Property AllowAddNewValues As Boolean
Public Property PreventDuplicates As Boolean Public Property PreventDuplicates As Boolean
@ -227,6 +230,22 @@ Public Class RepositoryItemLookupControl3
End Try End Try
End Sub 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 Public Sub HandleQueryPopup(sender As Object, e As CancelEventArgs) Handles Me.QueryPopUp
If MultiSelect = False Then If MultiSelect = False Then
e.Cancel = True e.Cancel = True

View File

@ -21,6 +21,8 @@ Public Class frmLookup
LookupControl31.Properties.DataSource = oTable LookupControl31.Properties.DataSource = oTable
LookupControl32.Properties.MultiSelect = True LookupControl32.Properties.MultiSelect = True
LookupControl32.Properties.DisplayMember = "Col1"
LookupControl32.Properties.ValueMember = "Col1"
LookupControl32.Properties.DataSource = oTable LookupControl32.Properties.DataSource = oTable
End Sub End Sub