CheckedComboBoxEdit
của Devexpress
.
[DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
.
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
.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"; } } }
Chúc mọi người thành công với thủ thuật trên và tạo ra một chương trình tuyệt vời.