Tải bản đầy đủ (.pptx) (25 trang)

Bài giảng Lập trình trên Windows: Chương 5.3 - Trần Minh Thái

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.08 MB, 25 trang )

Lập trình Windows
Chương 5.3. Sắp xếp, tìm kiếm và lọc dữ liệu

1


Nội dung

• Sắp xếp, tìm kiếm, lọc trong DataTable
• Lớp DataRelation
• Lớp DataView

2


Sắp xếp, tìm kiếm, lọc trong DataTable

• Tìm 1 dịng
• Chọn một số dịng
• Cột tính tốn
• Hàm nhóm trên cột

3


Sắp xếp, tìm kiếm, lọc trong DataTable
Tìm 1 dịng

• “Tìm 1 dịng”: Là lấy thơng tin chi tiết của 1 ID hay khóa chính nào đó
• Ví dụ:
• Tìm thơng tin chi tiết của một khách hàng có mã khách hàng cho trước


• Tìm thơng tin chi tiết của hóa đơn có mã hóa đơn cho trước

4


Sắp xếp, tìm kiếm, lọc trong DataTable
Tìm 1 dịng

• Database: Thực thi câu lệnh SQL
Select …
From tenBang
Where CotKhoaChinh=giatri



DataTable: Dùng phương thức Find của DataTable.Rows (đối tượng của lớp DataRowCollection

5


Sắp xếp, tìm kiếm, lọc trong DataTable
Tìm 1 dịng

DataRow DataRowCollection.Find(object key)

 Chú ý



Hàm Find tìm giá trị key chỉ trên cột khóa chính  table phải có khóa chính

Để tạo khóa chính:

– Dùng DataSet có kiểu mạnh
– Dùng hàm FillSchema
– Tự tạo khóa bằng code

6


Sắp xếp, tìm kiếm, lọc trong DataTable
Tìm 1 dịng

• Ví dụ
myTable.PrimaryKey = new DataColumn[]
{ myTable.Columns["CustomerID"] };

string s = "primaryKeyValue";

DataRow foundRow = myTable.Rows.Find(s);

if (foundRow != null)
MessageBox.Show(foundRow[1].ToString());
else
MessageBox.Show("A row with the primary key of " +
s + " could not be found");

7


Sắp xếp, tìm kiếm, lọc trong DataTable

Tìm 1 dịng

• DataSet kiểu mạnh: Cung cấp sẵn phương thức FindBy<TenCotkhoaChinh>(...)

NhanVienDataTable nv;

string s = "primaryKeyValue";

NhanVienRow foundRow = nv.FindByMaNV(s);

if (foundRow != null)
MessageBox.Show(foundRow.MaNV);
else
MessageBox.Show("A row with the primary key of " +
s + " could not be found");

8


Sắp xếp, tìm kiếm, lọc trong DataTable
Chọn một số dịng

• “Chọn một số dòng”: truy vấn 1 số dòng từ 1 bảng cho trước theo 1 điều kiện nào đó
• Database: Thực thi câu lệnh SQL

Select …
From tenBang
Where tenCot=giatri

 Ví dụ:

Select *
From NhanVien
Where Ten like ‘Ta%’
9


Sắp xếp, tìm kiếm, lọc trong DataTable
Chọn một số dịng

• DataTable: Dùng phương thức Select của đối tượng DataTable

DataRow[] rows = tenBang.Select();
DataRow[] rows = tenBang.Select(string dk);
DataRow[] rows = tenBang.Select(string dk, string sort);
DataRow[] rows = tenBang.Select(string dk, string sort,
DataRowState state);

 Ví dụ
DataRow[] rows = dt.Select("ho like '%Tr%'");
DataRow[] rows = dt.Select("ho like '%Tr%'“, “ten asc”);

10


Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính tốn

• “Cột tính tốn”: là cột được sinh ra từ các phép tốn trên các cột khác
• Database: Thực thi câu lệnh SQL


Select …, cot1 cot2 … as TenCot, …
From tenBang


 Ví dụ
Select ProductID,Price,Tax,(Price+Price*Tax) as TotalPrice
From Products
11


Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính tốn

• DataTable: Chỉ ra expression cho cột mới
DataTable table;

DataColumn col = new DataColumn(“TenCot”);
col.Expression = “bieu thuc”;

table.Columns.Add(col);



Ví dụ

DataColumn totalPrice = new DataColumn(“Total Price”);
totalPrice.Expression = “Price + Price*Tax”;

table.Columns.Add(col);
12



Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính tốn

• Chú ý
• Cột tính tốn trên DataSet có kiểu làm tương tự
• Các cột tham gia vào biểu thức phải có kiểu tương ứng với phép toán (các cột mặc định có kiểu
string)
Dùng DataSet có kiểu
Chỉ rõ kiểu bằng thuộc tính DataType của lớp DataColumn




DataColumn col;

col.DataType = typeof(kieu);

13


Sắp xếp, tìm kiếm, lọc trong DataTable
Hàm nhóm trên cột

• Database: Thực thi câu lệnh SQL
• Select min(…) From …
• Select max(…) From …
• Select avg(…) From …
• Select count(…) From …

• Select sum(…) From …

Select sum(price)
From Products;

14


Sắp xếp, tìm kiếm, lọc trong DataTable
Hàm nhóm trên cột

• DataTable: Dùng phương thức Compute của lớp DataTable
object table.Compute(“biểu thức”, “bộ lọc”)



“biểu thức”: giống mệnh đề select

– Max(cột)
– Min(cột)
– Sum(cột)
– Count(cột)
– Avg(cột)



“bộ lọc”: giống mệnh đề where

15



Sắp xếp, tìm kiếm, lọc trong DataTable
Hàm nhóm trên cột

• Ví dụ:
int p;
p = int.Parse(table.Compute(“sum(Price)”, “”);

int p;
p = int.Parse(table.Compute(“sum(Price)”, “Price<100”);

 Chú ý


Dùng lớp Convert hay hàm Parse để chuyển sang kiểu dữ liệu tương ứng

16


Lớp DataRelation

• Database
• Cho phép tạo quan hệ giữa các bảng
• Cho phép kết (join) giữa các bảng
• DataTable:
• Cho phép tạo quan hệ giữa các bảng bằng đối tượng DataRelation
• Khơng cho phép kết (join) giữa các bảng
• Cho phép lấy các “dịng con” của 1 dịng
• Cho phép lấy “dòng cha” của 1 dòng


17


Lớp DataRelation

• Lấy các “dịng con” và “dịng cha”
DataRow[] rows;
DataRow row;

rows = parentTable.Rows[index].GetChildRows(relation);
row = childTable.Rows[index].GetParentRow(relation);

 Tạo quan hệ
ds.Relations.Add(new DataRelation(…));

18


Lớp DataView

• Khái niệm DataView
• Tạo DataView
• Sắp xếp, tìm kiếm, lọc trong DataView
• Chuyển DataView thành DataTable

19


Lớp DataView
Khái niệm DataView


• Đối tượng DataView thay thế cho câu lệnh Select của đối tượng DataTable
• Đặc điểm DataView
• DataView có thể binding vào control (Kết quả của câu lệnh Select thì khơng thể)
• DataView chỉ cho phép làm việc trên 1 bảng – không cho phép chọn 1 tập con các cột
• Nếu DataTable gồm có các DataRows thì DataView gồm có các DataRowViews

20


Lớp DataView
Tạo DataView

• Các cách tạo DataView
DataView vw = new DataView();
DataView vw = new DataView(table);
DataView vw = new DataView(table, “ĐKLoc”,

“CotSXep”, ĐK

RowState);

 Trong đó




ĐKLoc: điều kiện lọc dữ liệu
CotSXep: Tên cột dùng để sắp xếp
ĐK RowState: DataViewRowState.Unchanged, …


21


Lớp DataView

Sắp xếp, tìm kiếm, lọc trong DataView

• Thuộc tính của DataView
• RowFilter: Chỉ ra điều kiện lọc giống câu lệnh Select. Ví dụ: “Ho like ‘Tr%’”
• Sort: chỉ ra thứ tự sort. Ví dụ: “MaSV asc”

• Phương thức của DataView
• int Find(object): Trả về chỉ số dịng thỏa điều kiện tìm kiếm
• DataRowView[] FindRows(object hay object[]): Trả về 1 số DataRowView thỏa điểu kiện tìm kiếm
• Chú ý: 2 Hàm này chỉ tìm kiếm trên các cột được chỉ ra trong thuộc tính Sort của DataView

22


Lớp DataView
Chuyển DataView sang DataTable

• Cú pháp
DataTable vw.ToTable()
DataTable vw.ToTable("ten bang")
DataTable vw.ToTable(boolean, mảng chuỗi cột)
DataTable vw.ToTable("ten bang", boolean, mảng chuỗi cột)

 Trong đó



boolean: true – loại bỏ những dịng trùng lắp (distinct)

23


Bài tập

comboBang: Danh sách các bảng có
trong CSDL

Bổ sung thêm cột Thuế
(10% của DoanhSo) vào
DataTable PhanCong

gridNoiDung: Các dòng trong bảng
tương ứng

24


Q&A

25

25



×