- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
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.
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!