Giả sử chúng ta đã có
các đối tượng sau:
- Form chính tên FormSelectData
- Đối tượng DataGridView tên
grvData
- Đối tượng Button tên btnSelect
và sự kiện khi click chuột lên nút btnSelect là btnSelect_Click()
- Đối tượng DataTable tên data
dùng để chứa thông tin nhân viên, đối tượng data có 3 cột: mã nhân viên,
tên nhân viên, giới tính
- Bước 1: Khởi tạo 3 nhân viên
& hiển thị 3 nhân viên đó lên grvData
- Bước 2: Khi nhấn nút “Lọc dữ
liệu”, chương trình sẽ gọi sự kiện btnSelect_Click(), và sự kiện
btnSelect_Click() sẽ gọi hàm SelectData().
- Bước 3: Khi gọi hàm SelectData() ở bước 2, chuỗi điều kiện lọc được tạo ra như sau:
// Lọc ra các nhân viên nam string filterExpression = ""; filterExpression = "GioiTinh ='Nam'";
Sau đó dùng hàm Select để lọc ra dữ liệu:
DataRow[] rows = pData.Select(filterExpression);
Bước 4: Cuối cùng là hiển thị dữ liệu đã được lọc ra lên đối tượng grvDataDữ liệu sau khi lọc sẽ trả về một mãng các dòng đối tượng là DataRow
Dưới đây là đoạn code
mình họa:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MyProject
{
public partial class FormSelectData : Form
{
public FormSelectData()
{
InitializeComponent();
}
private void FormSelectData_Load(object sender, EventArgs e)
{
// Bước 1
// Tạo ra 3 nhân viên cho đối tượng DataGridView tên grvData
// Tạo đối tượng DataTable tên data
DataTable data = new DataTable();
// Đối tượng data có 3 cột: Mã nhân viên, tên nhân viên và giới tính
data.Columns.Add("MaNhanVien", typeof(string));
data.Columns.Add("TenNhanVien", typeof(string));
data.Columns.Add("GioiTinh", typeof(string));
// Khởi tạo 3 nhân viên cho đối tượng data
// Nhân viên 1
DataRow empployee1 = data.NewRow();
empployee1["MaNhanVien"] = "NV01";
empployee1["TenNhanVien"] = "Nguyễn Khánh Hưng";
empployee1["GioiTinh"] = "Nam";
data.Rows.Add(empployee1);
// Nhân viên 2
DataRow empployee2 = data.NewRow();
empployee2["MaNhanVien"] = "NV02";
empployee2["TenNhanVien"] = "Đoàn Thanh Thúy";
empployee2["GioiTinh"] = "Nữ";
data.Rows.Add(empployee2);
// Nhân viên 3
DataRow empployee3 = data.NewRow();
empployee3["MaNhanVien"] = "NV03";
empployee3["TenNhanVien"] = "Trần Xuân Vũ";
empployee3["GioiTinh"] = "Nam";
data.Rows.Add(empployee3);
// Hiển thị dữ liệu lên DataGridVidew
grvData.DataSource = data;
}
private void btnSelect_Click(object sender, EventArgs e)
{
// Bước 2
SelectData((DataTable)grvData.DataSource);
}
private void SelectData(DataTable pData)
{
// Bước 3
// Lọc ra các nhân viên nam
string filterExpression = "";
filterExpression = "GioiTinh ='Nam'";
DataRow[] rows = pData.Select(filterExpression);
// Bước 4
// Hiển thị dữ liệu đã được lọc ra
pData = ((DataTable)grvData.DataSource).Clone();
for (int i = 0; i < rows.Length; i++)
{
DataRow row = pData.NewRow();
row[0] = rows[i].ItemArray[0].ToString();
row[1] = rows[i].ItemArray[1].ToString();
row[2] = rows[i].ItemArray[2].ToString();
pData.Rows.Add(row);
}
grvData.DataSource = pData;
}
}
}
Mở rộng:
Ngoài ra, bạn có thể
sử dụng các điều kiện lọc tương tự như SQL để làm điều kiện lọc. Như thế sẽ làm
cho việc lọc dữ liệu của bạn thêm phong phú. Góc Kinh Nghiệm đưa ra một vài
điều kiện lọc mở rộng bên dưới để bạn có thể tham khảo:
- “GioiTinh=’Nam’ AND MaNhanVien=’NV01’”
-> kết quả trả về là chỉ có một nhân viên tên “Nguyễn Khánh Hưng”;
- “MaNhanVien in (‘NV01’,’NV02’)”
-> Kết quả trả về là 2 nhân viên tên “Nguyễn Khánh Hưng” & “Đoàn
Thanh Thúy”
- “MaNhanVien in (‘NV01’,’NV02’)
AND GioiTinh=’Nữ’” -> Kết quả trả về là 1 nhân viên tên “Đoàn Thanh
Thúy”
Tuy nhiên chúng ta cần
lwu ý những điểm sau:
- Điều kiện lọc tương tự như SQL,
nếu bạn biết SQL thì đây là một lợi thế rất lớn cho bạn
- Đối với kiểu dữ liệu chữ sẽ có
cặp dấu nháy đơn bao bọc ví dụ ‘NV01’
- Đối với dữ liệu sô ví dụ như
tuổi thì không có dấu nháy đơn bao bọc.
Chúc các bạn thành
công!
(theo gockinhnghiem.com)
Không có nhận xét nào:
Đăng nhận xét