3. 3
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 toán
Hàm nhóm trên cột
4. 4
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
5. 5
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
6. 6
Sắp xếp, tìm kiếm, lọc trong DataTable
Tìm 1 dòng
Cú pháp phương thức Find
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
7. 7
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");
8. 8
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");
9. 9
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
Select *
From NhanVien
Where Ten like ‘Ta%’
Ví dụ:
10. 10
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);
DataRow[] rows = dt.Select("ho like '%Tr%'");
DataRow[] rows = dt.Select("ho like '%Tr%'“, “ten asc”);
Ví dụ
11. 11
Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính toán
“Cột tính toán”: là cột được sinh ra từ các
phép toán trên các cột khác
Database: Thực thi câu lệnh SQL
Select …, cot1 <pheptoan> cot2 … as TenCot, …
From tenBang
…
Ví dụ
Select ProductID,Price,Tax,(Price+Price*Tax) as TotalPrice
From Products
12. 12
Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính toán
DataTable: Chỉ ra expression (biểu thức) cho
cột mới (thuộc tính Expression của lớp
DataColumn)
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);
13. 13
Sắp xếp, tìm kiếm, lọc trong DataTable
Cột tính toán
Chú ý
• Cột tính toán trên DataSet có kiểu làm tương tự
• Điều kiện rất quan trọng để cột tính toán có thể
hoạt động được là 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);
14. 14
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;
15. 15
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
16. 16
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)”, “”);
Chú ý
• Dùng lớp Convert hay hàm Parse để chuyển
sang kiểu dữ liệu tương ứng
int p;
p = int.Parse(table.Compute(“sum(Price)”, “Price<100”);
17. 17
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
18. 18
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ệ (Chương 5)
ds.Relations.Add(new DataRelation(…));
19. 19
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
20. 20
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
21. 21
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, …
22. 22
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
23. 23
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)
In the case of a database, you’d simply execute a SQL
query, but a DataTable is not a table inside a database and cannot use a SQL query and a database
engine to help itself do this job.
In the case of a database, you’d simply execute a SQL
query, but a DataTable is not a table inside a database and cannot use a SQL query and a database
engine to help itself do this job.