NEWS

[C#] Chia sẻ source code sử dụng Object Listview trên Winform

[C#] Chia sẻ source code sử dụng Object Listview trên Winform
Đăng bởi: Thảo Meo - Lượt xem: 3210 14:24:13, 18/10/2023C#   In bài viết

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:

OBJECT_LISTVIEW_THUMB

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!

 

Download source

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Chia sẻ source code sử dụng Object Listview trên Winform
Đăng bởi: Thảo Meo - Lượt xem: 3210 14:24:13, 18/10/2023C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.