- [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#] Hướng dẫn sắp xếp column listview (sort column header listview)
Xin chào các bạn, hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách sort dữ liệu trên column của listview C#.
Sort list view trên C#, cũng tương tự như các bạn sử dụng ứng dụng File Explorer của Windows, chúng sẽ cho chúng ta dễ dàng sắp xếp dữ liệu theo các trường.
Ví dụ: Muốn sắp xếp danh sách nhân viên từ A->Z, hoặc sắp xếp lại theo tuổi từ nhỏ ->lớn...
Dưới đây là giao diện demo ứng dụng Sort Column Listview C#
- Đầu tiên các bạn cần tạo một class ItemComparer.cs
được implement từ Interface IComparer
.
Source code class ItemComparer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
namespace ListViewSortAnyColumn
{
public class ItemComparer : IComparer
{
//column used for comparison
public int Column { get; set; }
//Order of sorting
public SortOrder Order { get; set; }
public ItemComparer(int colIndex)
{
Column = colIndex;
Order = SortOrder.None;
}
public int Compare(object a, object b)
{
int result;
ListViewItem itemA = a as ListViewItem;
ListViewItem itemB = b as ListViewItem;
if (itemA == null && itemB == null)
result = 0;
else if (itemA == null)
result = -1;
else if (itemB == null)
result = 1;
if (itemA == itemB)
result = 0;
// datetime comparison
DateTime x1, y1;
// Parse the two objects passed as a parameter as a DateTime.
if (!DateTime.TryParse(itemA.SubItems[Column].Text, out x1))
x1 = DateTime.MinValue;
if (!DateTime.TryParse(itemB.SubItems[Column].Text, out y1))
y1 = DateTime.MinValue;
result = DateTime.Compare(x1, y1);
if (x1 != DateTime.MinValue && y1 != DateTime.MinValue)
goto done;
//numeric comparison
decimal x2, y2;
if (!Decimal.TryParse(itemA.SubItems[Column].Text, out x2))
x2 = Decimal.MinValue;
if (!Decimal.TryParse(itemB.SubItems[Column].Text, out y2))
y2 = Decimal.MinValue;
result = Decimal.Compare(x2, y2);
if (x2 != Decimal.MinValue && y2 != Decimal.MinValue)
goto done;
//alphabetic comparison
result = String.Compare(itemA.SubItems[Column].Text, itemB.SubItems[Column].Text);
done:
// if sort order is descending.
if (Order == SortOrder.Descending)
// Invert the value returned by Compare.
result *= -1;
return result;
}
}
}
- Tiếp tục, là source code C# cho form main.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ListViewSortAnyColumn
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//fill the list with data
FillItems();
}
private void listViewSample_ColumnClick(object sender, ColumnClickEventArgs e)
{
ItemComparer sorter = listViewSample.ListViewItemSorter as ItemComparer;
if (sorter == null)
{
sorter = new ItemComparer(e.Column);
sorter.Order = SortOrder.Ascending;
listViewSample.ListViewItemSorter = sorter;
}
// if clicked column is already the column that is being sorted
if (e.Column == sorter.Column)
{
// Reverse the current sort direction
if (sorter.Order == SortOrder.Ascending)
sorter.Order = SortOrder.Descending;
else
sorter.Order = SortOrder.Ascending;
}
else
{
// Set the column number that is to be sorted; default to ascending.
sorter.Column = e.Column;
sorter.Order = SortOrder.Ascending;
}
listViewSample.Sort();
}
private void FillItems()
{
// Add items
ListViewItem item1 = new ListViewItem("Nguyễn Thảo");
item1.SubItems.Add("10/11/2000");
item1.SubItems.Add("Email@domain.com");
item1.SubItems.Add("123.456");
ListViewItem item2 = new ListViewItem("Hoàng Thị Thảo");
item2.SubItems.Add("12/12/2010");
item2.SubItems.Add("test@test.com");
item2.SubItems.Add("123.4561");
ListViewItem item3 = new ListViewItem("Võ Sơn Băng");
item3.SubItems.Add("12/01/1800");
item3.SubItems.Add("sample@Sample.net");
item3.SubItems.Add("123.4559");
ListViewItem item4 = new ListViewItem("Nguyễn Đình Tuyên");
item4.SubItems.Add("05/30/1900");
item4.SubItems.Add("user@sample.com");
item4.SubItems.Add("-123.456000");
ListViewItem item5 = new ListViewItem("Cái Trí Minh");
item5.SubItems.Add("05/30/1900");
item5.SubItems.Add("user@sample.com");
item5.SubItems.Add("-123.456000");
// Add the items to the ListView.
listViewSample.Items.AddRange(
new ListViewItem[] { item1, item2, item3, item4, item5 });
}
}
}
CHÚC CÁC BẠN THÀNH CÔNG!