- [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
[C#] Chia sẻ source code sử dụng Object Listview trên Winform
Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn source code sample sử dụng Object Listview trên lập trình c#, winform.
[C#] How to use Object Listview in Winform
Trên bộ công cụ của Winform, có cung cấp cho chúng ta ListView.
Tuy nhiên, nếu chúng ta muốn thêm button hay hình ảnh, check box hoặc định dạng từng cell trên listview mặc định thì hơi phức tạp và khó sử dụng.
Với Object Listview các bạn có thể thao tác một cách dễ dàng hơn.
Hình ảnh demo ứng dụng sử dụng Object ListView:
Các bạn có thể cài đặt thư viện từ Nuget:
PM> NuGet\Install-Package ObjectListView.Official -Version 2.9.2-alpha2
Video demo ứng dụng sử dụng Object ListView C#:
Đầu tiên, mình có 1 danh sách các Employee như bên dưới:
private readonly List<Employee> _employees = new List<Employee>
{
new Employee
{
FirstName = "Alice",
LastName = "Smith",
Gender = Gender.Female,
Job = "Accountant",
Kpi = 4
},
new Employee
{
FirstName = "Bob",
LastName = "Smith",
Gender = Gender.Male,
Job = "Manager",
Kpi = 5
},
new Employee
{
FirstName = "Carol",
LastName = "Smith",
Gender = Gender.Female,
Job = "Programmer",
Kpi = 3
},
new Employee
{
FirstName = "James",
LastName = "Smith",
Gender = Gender.Male,
Job = "Programmer",
Kpi = 2
},
new Employee
{
FirstName = "Kate",
LastName = "Green",
Gender = Gender.Female,
Job = "Manager",
Kpi = 1
},
new Employee
{
FirstName = "Andy",
LastName = "Brown",
Gender = Gender.Male,
Job = "Intern",
Kpi = 0
},
new Employee
{
FirstName = "Bill",
LastName = "Gates",
Gender = Gender.Male,
Job = "CEO",
Photo = Program.AppDir + "bill.jpg",
Kpi = 5,
State = EmployeeState.Vacation
},
};
Tiếp đến, chúng ta cấu hình setup từng column vào object listview (OLVColumn)
colFullName.ImageGetter = obj =>
{
var emp = (Employee)obj;
// show a gender icon if no photo
if (String.IsNullOrEmpty(emp.Photo) || !File.Exists(emp.Photo))
{
return (obj as Employee)?.Gender.ToString().ToLower();
}
// load photo from the file if not loaded yet
if (!imglstPhotos.Images.ContainsKey(emp.Photo))
{
imglstPhotos.Images.Add(emp.Photo, Bitmap.FromFile(emp.Photo));
}
return emp.Photo;
};
// a render for big title + smaller description below
colFullName.Renderer = new DescribedTaskRenderer
{
ImageList = imglstPhotos,
DescriptionAspectName = "Job",
TitleFont = new Font(this.Font.FontFamily, 12, FontStyle.Bold),
DescriptionFont = new Font(this.Font.FontFamily, 10),
UseGdiTextRendering = true,
ImageTextSpace = 8,
TitleDescriptionSpace = 1
};
colFullName.CellPadding = new Rectangle(4, 2, 4, 2); // Put a little bit of space around the cell
// group by the first last name letter
colFullName.GroupKeyGetter = obj =>
{
var emp = (Employee)obj;
return String.IsNullOrWhiteSpace(emp.LastName) ? "" : emp.LastName.Substring(0, 1);
};
// a renderer displaying multiple images instead of a number (like stars in ratings)
colKpi.Renderer = new MultiImageRenderer("money", 5, 0, 6)
{
Spacing = -12 // overlap
};
colState.ImageGetter = obj => (obj as Employee)?.State.ToString().ToLower();
colState.AspectToStringConverter = val =>
{
switch ((EmployeeState)val)
{
case EmployeeState.Vacation:
return "On vacation";
default:
return val.ToString();
}
};
colAction.AspectToStringConverter = val =>
{
switch ((EmployeeState)val)
{
case EmployeeState.Working:
return "Take a vacation";
case EmployeeState.Vacation:
return "Return to work";
default:
throw new ArgumentOutOfRangeException(nameof(val), val, null);
}
};
lstEmployees.ButtonClick += (sender, e) =>
{
var emp = (Employee)e.Model;
switch (emp.State)
{
case EmployeeState.Working:
emp.State = EmployeeState.Vacation;
break;
case EmployeeState.Vacation:
emp.State = EmployeeState.Working;
break;
default:
throw new ArgumentOutOfRangeException(nameof(emp.State), emp.State, null);
}
};
Tiếp đến, chúng ta chỉ cần set object employee vào listview
lstEmployees.SetObjects(_employees);
Chi tiết, các bạn có thể download source code bên dưới về để chạy và tham khảo.
Thanks for watching!