NEWS

[DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit

[DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
Đăng bởi: Thảo Meo - Lượt xem: 4816 13:48:17, 21/07/2023DEVEXPRESS   In bài viết

Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn source code, cách tích hợp thêm chức năng Tìm kiếm search vào trong công cụ CheckedComboBoxEdit của Devexpress.

[DEVEXPRESS] How to make Search in CheckedComboBoxEdit Winform

Mặc định, công cụ CheckedComboBoxEdit của Devexpress cho chép các bạn chọn nhiều dữ liệu.

Tuy nhiên, công cụ này lại không có hỗ trợ tính năng tìm kiếm search.

Khi dữ liệu của bạn có vài trăm hoặc vài ngàn dòng thì việc tìm kiếm giá trị để chọn sẽ khó khăn.

Dưới đây, là hình ảnh demo custom control tích hợp tính năng search vào cho CheckedComboBoxEdit.

search_checkbox_edit

Tạo một class: RepositoryItemCustomSearchEdit.cs

Source code C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Drawing;
using DevExpress.XtraEditors.Registrator;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.ViewInfo;
using DevExpress.XtraEditors.Popup;
using DevExpress.Utils;

namespace DXSample
{
    [UserRepositoryItem("RegisterCustomEdit2")]
    public class RepositoryItemCustomSearchEdit : RepositoryItemSearchControl
    {
        static RepositoryItemCustomSearchEdit()
        {
            RegisterCustomEdit2();
        }

        public const string CustomEditName = "CustomSearchEdit";

        public RepositoryItemCustomSearchEdit()
        {
        }

        public override string EditorTypeName {
            get {
                return CustomEditName;
            }
        }

        public static void RegisterCustomEdit2()
        {
            Image img = null;
            EditorRegistrationInfo.Default.Editors.Add(new EditorClassInfo(CustomEditName, typeof(CustomSearchEdit), typeof(RepositoryItemCustomSearchEdit), typeof(SearchControlViewInfo), new ButtonEditPainter(), true, img));
        }

        public override void Assign(RepositoryItem item)
        {
            BeginUpdate();
            try
            {
                base.Assign(item);
                RepositoryItemCustomSearchEdit source = item as RepositoryItemCustomSearchEdit;
                if(source == null) return;
                //
            }
            finally
            {
                EndUpdate();
            }
        }

        protected override SearchControlQueryParamsEventArgs OnQueryCriteriaParams()
        {
            SearchControlQueryParamsEventArgs args = base.OnQueryCriteriaParams();
            if(Client.GetType().Name == "PopupCheckedListBoxControl" && !string.IsNullOrEmpty(args.SearchText))
            {
                args.SearchText += " \"(select all)\"";
            }
            return args;
        }
    }

    [ToolboxItem(true)]
    public class CustomSearchEdit : SearchControl
    {
        static CustomSearchEdit()
        {
            RepositoryItemCustomSearchEdit.RegisterCustomEdit2();
        }

        public CustomSearchEdit()
        {
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public new RepositoryItemCustomSearchEdit Properties {
            get {
                return base.Properties as RepositoryItemCustomSearchEdit;
            }
        }

        public override string EditorTypeName {
            get {
                return RepositoryItemCustomSearchEdit.CustomEditName;
            }
        }
    }
}

Tiếp đến, tạo tiếp một class với tên CustomEdit1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Drawing;
using DevExpress.XtraEditors.Registrator;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.ViewInfo;
using DevExpress.XtraEditors.Popup;
using System.Windows.Forms;

namespace DXSample {
    [UserRepositoryItem("RegisterCustomEdit1")]
    public class RepositoryItemCustomEdit1 : RepositoryItemCheckedComboBoxEdit {
        static RepositoryItemCustomEdit1() {
            RegisterCustomEdit1();
        }

        public const string CustomEditName = "CustomEdit1";

        public RepositoryItemCustomEdit1() {
        }

        public override string EditorTypeName {
            get {
                return CustomEditName;
            }
        }

        public static void RegisterCustomEdit1() {
            Image img = null;
            EditorRegistrationInfo.Default.Editors.Add(new EditorClassInfo(CustomEditName, typeof(CustomEdit1), typeof(RepositoryItemCustomEdit1), typeof(PopupContainerEditViewInfo), new ButtonEditPainter(), true, img));
        }

        public override void Assign(RepositoryItem item) {
            BeginUpdate();
            try {
                base.Assign(item);
                RepositoryItemCustomEdit1 source = item as RepositoryItemCustomEdit1;
                if (source == null) return;
                //
            }
            finally {
                EndUpdate();
            }
        }
    }

    [ToolboxItem(true)]
    public class CustomEdit1 : CheckedComboBoxEdit {
        static CustomEdit1() {
            RepositoryItemCustomEdit1.RegisterCustomEdit1();
        }

        public CustomEdit1() {
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public new RepositoryItemCustomEdit1 Properties {
            get {
                return base.Properties as RepositoryItemCustomEdit1;
            }
        }

        public override string EditorTypeName {
            get {
                return RepositoryItemCustomEdit1.CustomEditName;
            }
        }
        SearchControl searchControl;
        protected override PopupContainerControl CreatePopupCheckListControl() {
            PopupContainerControl popupCheckListControl = base.CreatePopupCheckListControl();
            CheckedListBoxControl checkedListBoxControl = popupCheckListControl.Controls.OfType<CheckedListBoxControl>().First();

            searchControl = new CustomSearchEdit();
            
            searchControl.Client = checkedListBoxControl;
            searchControl.Dock = DockStyle.Top;
            searchControl.Properties.FindDelay = 100;

            popupCheckListControl.Controls.Add(searchControl);
            return popupCheckListControl;
        }
       
    }
}

Cách sử dụng, các bạn chỉ cần kéo công cụ CustomEdit1 vào và setup datasource vào cho nó.

namespace DXSample {
    public partial class Main : XtraForm {
        public Main() {
            InitializeComponent();
            

            var data = new EmployeeDataExample.EmployeeData().GetEmployeesAsync().Result;

            customEdit11.Properties.DataSource = data;
            customEdit11.Properties.ValueMember = "Code";
            customEdit11.Properties.DisplayMember = "Name";
            
        }
    }
}

Thanks for watching!

DOWNLOAD SOURCE

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
Đăng bởi: Thảo Meo - Lượt xem: 4816 13:48:17, 21/07/2023DEVEXPRESS   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.