Sử dụng phương thức Select() để lọc dữ liệu từ DataTable trong C#

DataTable có một phương thức là Select. Phương pháp này nhận một chuỗi biểu thức (expression) để chỉ ra những dòng dữ liệu (DataRow)mà bạn muốn lọc để xử lý  mà chỉ những hàng bạn muốn xử lý. Lúc này, DataTable được xem như là một cơ sở dữ liệu nhỏ.

Xem thêm:

Trong bài viết này, chúng ta sẽ sử dụng phương thức Select() để lọc ra tất cả nhân viên có giới tính “Nam” và năm sinh lớn hơn 1985 từ DataTable chứa danh sách nhân viên.

Chúng ta tạo 1 project có các đối tượng như sau:

  • Form chính tên là frmDanhSachNhanVien
  • Trong form này có DataGridView có ID là grvNhanVien
  • Trong form này còn có 1 button có ID là btnSelect dùng để gọi hàm lọc dữ liệu từ DataTable
  • Khởi tạo đối tượng DataTable có tên là dataNhanVien để chứa danh sách nhân viên, gồm 4 cột: MaNV, TenNV, GioiTinh, NamSinh

Download source code của project tại đây

Sử dụng phương thức Select() để lọc dữ liệu từ DataTable trong C#

Các bước thực hiện:

  • Khởi tạo DataTable chứa danh sách 4 nhân viên và load lên lưới dữ liệu
  • Viết code xử lý sự kiện click vào button Lọc dữ liệu

Chuỗi điều kiện lọc dữ liệu như sau:

// Chuỗi biểu thức lọc ra các nhân viên nam có năm sinh lớn hơn 1985
            string stringExpression = "GioiTinh ='Nam' and NamSinh > 1985";

Sau đó, dùng phương thức Select để lọc ra dữ liệu:

//Dữ liệu lọc ra là một mảng các đối tượng DataRow
            DataRow[] rows = dataNhanVien.Select(stringExpression);

Chuyển đổi các dòng dữ liệu lọc ra thành kiểu DataTable và hiển thị kết quả lên lưới dữ liệu:

//Chuyển đổi các dòng dữ liệu rows thành DataTable với method CopyToDataTable()
            DataTable filterData = rows.CopyToDataTable();
            // Hiển thị dữ liệu đã được lọc ra
            grvNhanVien.DataSource = filterData;

DataTableSelect(2)

Dưới đây là đoạn code đầy đủ:

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 DataTableSelect
{
    public partial class frmDanhSachNhanVien : Form
    {
        public frmDanhSachNhanVien()
        {
            InitializeComponent();
        }
        //Khởi tạo đối tượng DataTable dataNhanVien để có thể dùng lại 
        public DataTable dataNhanVien = new DataTable();
        private void frmDanhSachNhanVien_Load(object sender, EventArgs e)
        {
            // Khai báo DataTable dataNhanVien ở trên với 4 cột (DataColumn) là:
            // Mã nhân viên (MaNV), tên nhân viên (TenNV), giới tính (GioiTinh) và năm sinh (NamSinh)
            
            dataNhanVien.Columns.Add("MaNV", typeof(string));
            dataNhanVien.Columns.Add("TenNV", typeof(string));
            dataNhanVien.Columns.Add("GioiTinh", typeof(string));
            dataNhanVien.Columns.Add("NamSinh", typeof(int));
            
            // Tạo dữ liệu mẫu cho DataTable dataNhanVien với 4 nhân viên 
            // Nhân viên 1

            DataRow nv1 = dataNhanVien.NewRow();
            nv1["MaNV"] = "NV01";
            nv1["TenNV"] = "Nguyễn Đức Anh";
            nv1["GioiTinh"] = "Nam";
            nv1["NamSinh"] = 1986;
            dataNhanVien.Rows.Add(nv1);

            // Nhân viên 2
            DataRow nv2 = dataNhanVien.NewRow();
            nv2["MaNV"] = "NV02";
            nv2["TenNV"] = "Khổng Tú Quỳnh";
            nv2["GioiTinh"] = "Nữ";
            nv2["NamSinh"] = 1985;
            dataNhanVien.Rows.Add(nv2);

            // Nhân viên 3
            DataRow nv3 = dataNhanVien.NewRow();
            nv3["MaNV"] = "NV03";
            nv3["TenNV"] = "Nguyễn Đức Hùng";
            nv3["GioiTinh"] = "Nam";
            nv3["NamSinh"] = 1987;
            dataNhanVien.Rows.Add(nv3);

            // Nhân viên 4
            DataRow nv4 = dataNhanVien.NewRow();
            nv4["MaNV"] = "NV03";
            nv4["TenNV"] = "Nguyễn Hoàng Phúc";
            nv4["GioiTinh"] = "Nam";
            nv4["NamSinh"] = 1984;
            dataNhanVien.Rows.Add(nv4);
            // Hiển thị dữ liệu mẫu lên DataGridVidew
            grvNhanVien.DataSource = dataNhanVien;
        }

        private void btnSelect_Click(object sender, EventArgs e)
        {
            // Chuỗi biểu thức lọc ra các nhân viên nam có năm sinh lớn hơn 1985
            string stringExpression = "GioiTinh ='Nam' and NamSinh > 1985";
            //Dữ liệu lọc ra là một mảng các đối tượng DataRow
            DataRow[] rows = dataNhanVien.Select(stringExpression);
            //Chuyển đổi các dòng dữ liệu rows thành DataTable với method CopyToDataTable()
            DataTable filterData = rows.CopyToDataTable();
            // Hiển thị dữ liệu đã được lọc ra
            grvNhanVien.DataSource = filterData;
        }
    }
}

Lưu ý:

  • Đối với kiểu dữ liệu chữ sẽ có cặp dấu nháy đơn bao bọc ví dụ ‘Nam’
  • Đối với dữ liệu sô ví dụ như năm sinh thì không có dấu nháy đơn bao bọc.

Chúc các bạn thành công! Có gì thắc mắc, bạn có thể để lại bình luận để cùng nhau giải quyết nhé.

Download source code của project tại đây

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x
()
x