XAF Blazor Lookups – Hide Actions, Add new Action, Multi Column and Search

Just a quick post with a few reminders notes about the lookups.

Multicolumn: Already supported

Search: Fields included in the Edit Format

View.CustomizeViewItemControl<LookupPropertyEditor>(this, e =>
            {
                if (e.Control is DxComboBoxAdapter adapter)
                {
                    if (e.PropertyName == "contacts")
                    {
                        adapter.ComponentModel.EditFormat = "{0} | {1}";
                    }

                    //adapter.ComponentModel.CssClass = "test";
              
                }

Search with space in multicolumn:

https://supportcenter.devexpress.com/ticket/details/t1024810/combobox-for-blazor-how-to-filter-items-by-entering-text-with-spaces-for-a-specific

void OnInput(ChangeEventArgs e) {
    string value = e.Value.ToString();
    var matches = System.Text.RegularExpressions.Regex.Matches(value, @"(\([^)]+?\)|[^(]+)");

    if(matches.Count > 1) {
        Data = dataSource.Where(i => i.Name.ToLower().Contains(matches[0].Value.Trim().Replace("(", "").Replace(")", "").ToLower()) && i.Title.ToLower().Contains(matches[1].Value.Trim().Replace("(", "").Replace(")", "").ToLower()));
    }
    else if(matches.Count == 1) {
        Data = dataSource.Where(i => i.Name.ToLower().Contains(matches[0].Value.Trim().Replace("(", "").Replace(")", "").ToLower()));
    }
    else {
        Data = new List<Employee>();
    }
}

Hide Actions and Add New ones:

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Blazor.Components.Models;
using DevExpress.ExpressApp.Blazor.Editors;
using DevExpress.ExpressApp.Blazor.Editors.Adapters;
using Xari.Module.BusinessObjects;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components;
using DevExpress.ExpressApp.Blazor.Components.Models.Renderers;
using DevExpress.ExpressApp.Editors;
using DevExpress.Persistent.BaseImpl;

namespace Xari.Blazor.Server.Controllers
{
    public class CustomizePersonInPartyLookupEditorController:ViewController<DetailView>
    {
        LookupPropertyEditor currentEditor { get; set; }
        public CustomizePersonInParteiLookupEditorController()
        {
            TargetViewId = "Party_DetailView";
        }
        protected override void OnActivated()
        {
            base.OnActivated();
            View.CustomizeViewItemControl<LookupPropertyEditor>(this, AddCustomSearchButton, nameof(Partei.Person));
            View.CustomizeViewItemControl<LookupPropertyEditor>(this, e =>
            {
                e.HideNewButton();
                e.HideEditButton();

            }, nameof(Partei.Art));
        }

        private void AddCustomSearchButton(LookupPropertyEditor obj)
        {
            DxEditorButtonModel model = new DxEditorButtonModel();
            model.Tooltip = "Search";
            model.IconCssClass = "lookupSearchButton";
            model.Click = EventCallback.Factory.Create<MouseEventArgs>(this, () =>
            {
                var os = Application.CreateObjectSpace(typeof(PersonenSuche));
                DetailView createdView = Application.CreateDetailView(os, "Person_DetailView", false);
                createdView.ViewEditMode = ViewEditMode.Edit;
                Application.ShowViewStrategy.ShowViewInPopupWindow(createdView, () => OnPopupWindowExecute(createdView,obj));
            });
            var componentModel = ((DxComboBoxAdapter)obj.Control).ComponentModel;
            var originalButtons = componentModel.Buttons;
            componentModel.Buttons = builder =>
            {
                builder.AddContent(0, originalButtons);
                builder.AddContent(1, model.GetComponentContent());
            };
        }
        private void OnPopupWindowExecute(View popupView, LookupPropertyEditor previousEditor)
        {
            DetailView dv = (DetailView)popupView;
            ListPropertyEditor listPropertyEditor = (ListPropertyEditor)dv.FindItem("Person");

            if (listPropertyEditor.ListView.SelectedObjects.Count == 1)
            {
                previousEditor.PropertyValue = ObjectSpace.GetObject(listPropertyEditor.ListView.CurrentObject);
                
                ObjectSpace.CommitChanges();
            }
        }
    }
}

Until next time. XAF out!

Leave a Reply

Your email address will not be published.