Thứ Tư, 25 tháng 7, 2012

Sử dụng DataView để filter dữ liệu từ DataTable C#

Khi chúng ta được cung cấp 1 DataTable chứa dữ liệu nhưng chỉ cần lấy ra 1 số dòng thỏa điều kiện nào đó thôi. Cách truyền thống vấn là duyệt từng dòng rồi so sánh giá trị nếu phù hợp thì lấy, không phù hợp thì bỏ qua.
Sử dụng DataView để lấy dữ liệu theo điều kiện nào đó 1 cách nhanh chóng.

Demo:
Tạo 1 DataTable chứa thông tin tên và tuổi của một số người:
  1. DataTable table = new DataTable("table");  
  2. table.Columns.Add(new DataColumn("Name"typeof(string)));  
  3. table.Columns.Add(new DataColumn("Age"typeof(int)));  
  4. for (int i = 0; i < 5; i++)  
  5. {  
  6.     DataRow NewRow = table.NewRow();  
  7.     NewRow["Name"] = "Nguyễn Văn " + i;  
  8.     NewRow["Age"] = i;  
  9.     table.Rows.Add(NewRow);  
  10. }  
Bây giờ nếu chỉ muốn lấy những người có tuổi lớn hơn 2:
  1. // new 1 DataView  
  2. DataView dataView = new DataView(table);  
  3.   
  4. // chỉ lấy những người có tuổi lớn hơn 2  
  5. dataView.RowFilter = "Age > 2";  
Vậy là Ok, lúc này DataView chỉ chứa những dòng có giá trị thỏa điều kiện filter. Có thể dùng DataView này để đưa vào DataGridView.

Sử dụng 2 hàm sau để test kết quả:
  1. private static void PrintTable(DataTable table)  
  2. {  
  3.     for (int i = 0; i < table.Rows.Count; i++)  
  4.     {  
  5.         Console.WriteLine("\t" + table.Rows[i]["Name"] +": "+ table.Rows[i]["Age"] + " tuổi.");  
  6.     }  
  7.     Console.WriteLine();  
  8. }  
  9.   
  10. private static void PrintView(DataView view)  
  11. {  
  12.     for (int i = 0; i < view.Count; i++)  
  13.     {  
  14.         Console.WriteLine("\t" + view[i]["Name"] + ": " + view[i]["Age"] + " tuổi.");  
  15.     }  
  16.     Console.WriteLine();  
  17. }  
Thực hiện test:
  1. DataTable table = new DataTable("table");  
  2. table.Columns.Add(new DataColumn("Name"typeof(string)));  
  3. table.Columns.Add(new DataColumn("Age"typeof(int)));  
  4. for (int i = 0; i < 5; i++)  
  5. {  
  6.     DataRow NewRow = table.NewRow();  
  7.     NewRow["Name"] = "Nguyễn Văn " + i;  
  8.     NewRow["Age"] = i;  
  9.     table.Rows.Add(NewRow);  
  10. }  
  11.   
  12. // new 1 DataView  
  13. DataView dataView = new DataView(table);  
  14.   
  15. // chỉ lấy những người có tuổi lớn hơn 2  
  16. dataView.RowFilter = "Age > 2";  
  17.   
  18. PrintTable(table);  
  19. PrintView(dataView);  
  20. Console.ReadLine();  
Kết quả sau khi filter chỉ còn Nguyễn Văn 3 và Nguyễn Văn 4:

Không có nhận xét nào :

Đăng nhận xét