- [VB.NET] Chia sẻ source code lịch âm dương và hẹn lịch nhắc việc
- [C#] Hướng dẫn đọc thông số thiết bị Thiết bị kiểm tra Pin (HIOKI BATTERY HiTESTER BT3562)
- [VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform
- [C#] Hướng dẫn chứng thực đăng nhập ứng dụng bằng vân tay (Finger Print) trên máy tính
- [C#] Color Thief cách xuất màu sắc thiết kế từ hình ảnh
- [C#] Cách tạo bản quyền và cho phép dùng thử ứng dụng Winform
- [C#] Hướng dẫn sử dụng trình duyệt web Chrome convert HTML sang tập tin file PDF
- [C#] Kết nôi điện thoại Android, IOS với App Winform via Bluetooth
- [DATABASE] Cách query cộng trừ dồn dần trong Sqlserver
- [C#] Thiết kế ứng dụng Console đẹp với thư viện Spectre.Console
- [C#] Thiết kế ứng dụng Single Instance và đưa ứng dụng lên trước nếu kiểm tra ứng dụng đang chạy
- [C#] Giới thiệu JSON Web Token và cách đọc chuỗi token
- [C#] Cách tăng giảm font chữ tất cả các control trên winform
- [DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
- [C#] Gởi email Metting Calendar Reminder kèm nhắc thời gian lịch họp
- [C#] Tìm kiếm xem danh sách từ khóa có tồn tại trong đoạn văn bản hay không
- [C#] Thiết kế giao diện ứng dụng trên Console sử dụng thư viện Terminal.Gui
- [C#] Hướng dẫn tạo mã VietQR Payment API Winform
- [C#] Sử dụng thư viện BenchmarkDotNet đo hiệu năng của hảm Method
- [DEVEXPRESS] Tìm kiếm không dấu tô màu highlight có dấu trên C# 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!