- [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] Hướng dẫn sử dụng TreeList C# để hiển thị danh sách theo dạng cây thư mục
Trong các bài viết trước về Devexpress, mình đã có nhiều bài hướng dẫn các bạn sử dụng GridView, nhưng muốn các bạn muốn hiển thị danh sách theo dạng cây, thì TreeList Devexpress C# sẽ giúp bạn thực hiện dễ dàng.
[C#] TUTORIAL TREELIST IN DEVEXPRESS WINFORM
Khi sử dụng TreeList vào ứng dụng thì mình sẽ nhìn trực quan hơn.
TreeList thường được sử dụng nhiều trong các ứng dụng như: Explorer
, cây tài khoản kế toán.
Dưới đây, giao diện sử dụng TreeList C#:
- Để danh sách dữ liệu các bạn hiển thị theo dạng cây, mình sẽ phải sử dụng coloum để phân chia cấp dữ liệu:
1. ParentID
2. ID
Các bạn theo dõi bảng Database của mình bên dưới:
- Mỗi dòng đều có 1 parent ID, những cột nào có chung Parent ID sẽ thành một nhóm (group).
+ Tiếp theo, các bạn cấu hình cho component TreeList 2 thuộc tính ParentFieldName
và KeyFieldName
, để cho nó biết được đâu là node cha và đâu là khóa.
Các bạn set 2 thuộc tính bên bên tab Properties nhé.
ParentFieldName = ParentID
KeyFieldName = Id
- Trong bài viết, mình sử dụng đọc dữ liệu từ file EmployeesGroups.xml, file data demo của Devexpress.
Nếu các bạn muốn xem bảng dữ liệu thì đặt Debug, và xem bảng chi tiết ở dataset nhé.
Trong ví dụ, mình cũng có hướng dẫn thêm cách chèn image theo cấp vào từng nhánh của Treelist ( Sử dụng ImageCollection)
Cái này, mình sẽ viết trong sự kiện GetStateImage
với code C# như sau:
private void treeList1_GetStateImage(object sender, GetStateImageEventArgs e)
{
string[] groupNames = new string[] { "Administration", "Inventory", "Manufacturing", "Quality", "Research", "Sales" };
currentGroupName = (string)e.Node.GetValue("GroupName");
e.NodeImageIndex = Array.FindIndex(groupNames, new Predicate(IsCurrentGroupName));
}
- Dưới đây, là full source code demo Treelist Devexpress trên cho các bạn tham khảo:
using DevExpress.XtraTreeList;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TreeListDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string DBFileName = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, "EmployeesGroups.xml");
if (DBFileName != "")
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(DBFileName);
treeList1.DataSource = dataSet.Tables[0].DefaultView;
treeList1.ForceInitialize();
treeList1.ExpandAll();
treeList1.BestFitColumns();
}
}
string currentGroupName;
private bool IsCurrentGroupName(string groupName)
{
return currentGroupName.Contains(groupName);
}
private void treeList1_GetStateImage(object sender, GetStateImageEventArgs e)
{
string[] groupNames = new string[] { "Administration", "Inventory", "Manufacturing", "Quality", "Research", "Sales" };
currentGroupName = (string)e.Node.GetValue("GroupName");
e.NodeImageIndex = Array.FindIndex(groupNames, new Predicate(IsCurrentGroupName));
}
}
}
Bạn nào thực hiện không được, có thể download source code ở bên dưới để tham khảo nhé.
Happy Coding :)