Đánh giá chủ đề:
  • 1 Votes - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sắp xêp, lọc dữ liệu trong Continuous Form dùng Class
#1
Chào các bạn,

Tôi chia sẻ với các bạn một kiểu thiết kế Form kết hợp tìm kiếm, lọc dữ liệu kèm theo sắp xếp dữ liệu tăng giảm tuỳ theo cột dữ liệu bạn bấm chọn trên form.

[Hình: 45732203834_fa7d7bf9e3_o.png]


- Đây là Form dạng Continuous và kiểu thiết kế này tôi thường dùng cho việc liệt kê cách danh sách, danh mục.
- Kết hợp tìm kiếm, sắp xếp dữ liệu theo cách này để tăng tiện ích cho người dùng và tiết kiệm không gian trên Form. 
- Form dạng Continuous này có cái hạn chế là không dùng được tính năng Freeze Panel như Datasheet Form.

Về thiết kế:
- Do form có dùng nhiều icon sắp xếp và icon ComboBox tương ứng với mỗi cột tiêu đề nên tôi viết Class cho nó để tái sử dụng, dễ sửa và code cũng gọn gàng hơn chút trong form. Khi form có nhiều cột thì việc gọi class cũng tương tự, không phải thêm code.
- Để Class chạy đúng yêu cầu thì phải tuân thủ các cách đặt tên cho các control trong form. Tôi luôn dùng các tiền tố đại diện cho control + tên Field để đặt Name cho nó. Trong Form có dùng thuộc tính Tag để lưu tên Field. Các Control.Name, Control.Tag này đều phục vụ cho Class sắp xếp, lọc dữ liệu.

Form này chủ yếu demo cho các bạn việc sắp xếp và lọc dữ liệu của subform nên các nút lệnh trên mainform toi chỉ làm thiết kế cơ bản để chạy test thôi nhé.
Class chạy cũng chưa thật sự trơn tru vì nó còn bị Flick (nhấp nháy) khi di chuyển chuột trên các control.
File này tôi làm trên Access 2013 và không chuyển về Access 2003 được nhé các bạn vì câu lệnh sắp xếp dữ liệu ở 2 phiên bản khác nhau. Muốn chuyển về 2003 phải vô đổi code lại chút nên làm biếng 014 .
Vd: lệnh Form.SetOrderBy chỉ có ở Acces 2007 trở lên, còn Access 2003 là Form.OrderBy...

Link file demo: http://www.mediafire.com/file/q64zjg7604..._Class.rar

[Hình: t7N0jWs.gif]
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tranthanhan1962 , DooHoaangPhuuc , huuduy.duy , conmeo
#2
Sort ADO recordset từ SQL server bạn hay dùng kiểu nào, sort bằng order by trong câu SQL lấy recordset về, hay dùng recordset.sort.
Cách nào sẽ tối ưu hơn.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#3
(25-12-18, 05:01 PM)mrsiro Đã viết: Sort ADO recordset từ SQL server bạn hay dùng kiểu nào, sort bằng order by trong câu SQL lấy recordset về, hay dùng recordset.sort.
Cách nào sẽ tối ưu hơn.

Khi bạn đã load Recordset về rồi thì dùng rs.Sort luôn cho nó nhanh thay vì kết nối lại sqlserver .
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
Chào bạn, nếu form đang sử dụng conditionformating, mình dùng recordset.sort thì bị vấn đề sau khi sort form bị tình trạng kéo các thanh kéo ngang kéo dọc rất "lag" (kiểu không mượt mà, mà bị chậm chậm, đứng đứng).

Nếu form mở lên thì không bị, sau khi sử dụng sort thì form mới bị tình trạng "lag" như trên. Mình test thử nếu bỏ conditionformating thì sau khi sort form không bị trạng "lag" nữa.

Không hiểu lí do vì sao.

Vì gặp phải vấn đề này cho nên mỗi lần muốn sort mình đều phải gọi lại kết nối SQLserver rồi cho sort bằng orderby trong câu query. Mong bạn nghiên cứu giúp mình vấn đề này.

Form có gần 20 column, hơn 1000 record.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#5
Bạn gửi file demo lên đi.
Thông thường khi kéo dữ liệu về bạn phải lọc trước chứ kéo về cả ngàn dòng vậy thì nặng hệ thống quá.
A LeHongDuc có đưa giải pháp mỗi lần load về 100 records, khi nào cần xem tiếp thì mới load tiếp. Hơn nữa bạn cân nhắc lại có thường xuyên phải thao tác trên cả ngàn record đó không mà phải load về để sẳn cho tốn bộ nhớ.
Còn về chuyện lag, flicker thì đối với Access nó vô chừng lắm, có máy bị, máy không. Bạn có thể thay thế thay vì dùng Conditional Formating có sẳn trên menu thì dùng code xem như thế nào.
Để hiệu ứng đẹp thì phải đánh đổi về hiệu suất vậy thôi. Giống như bạn xài Office 2003 so với 2013, Win 7 vs Win 10 thì thấy rõ đó. Giao diện càng ngon, càng bóng bẩy thì tốn tài nguyên máy quá trời.
Muốn giao diện đẹp kết hợp hiệu suất thì dùng các ngôn ngữ khác hỗ trợ tốt hơn, nếu thích dùng Access thì phải chấp nhận những cái nó chưa làm tốt được.  007
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
Cháu đã tải về và sử dụng, nhận thấy khi nhập trên header hay dùng combo để lọc, khi muốn lọc tiếp phải xoá dữ liệu cũ rồi mới dùng combo lọc tiếp được. Như có sự ràng buộc liên kết giữa ô search và combo. Combo chỉ hoạt động khi ô search (header) trống rỗng.
Chữ ký của DooHoaangPhuuc DooHoaangPhuuc,gia nhập Thủ Thuật Access từ 27-06 -17.
ღღღღღTài sản của DooHoaangPhuuc (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#7
(27-12-18, 11:40 PM)DooHoaangPhuuc Đã viết: Cháu đã tải về và sử dụng, nhận thấy khi nhập trên header hay dùng combo để lọc, khi muốn lọc tiếp phải xoá dữ liệu cũ rồi mới dùng combo lọc tiếp được. Như có sự ràng buộc liên kết giữa ô search và combo. Combo chỉ hoạt động khi ô search (header) trống rỗng.

Đúng rồi bạn.
- Các combobox này có liên hệ (cascade) với nhau để giới hạn dữ liệu tìm kiếm. Dữ liệu combobox này phụ thuộc vào điều kiện đã lọc của combobox khác.
- Còn về ô Search và combo: là do tôi đơn giản hoá cho người dùng. người dùng chỉ cần lọc các dữ liệu trong các ô Search thôi, còn combo là để hỗ trợ thao tác chọn dữ liệu cho ô search cho nhanh. Ô search là thể hiện nội dung thay thế cho combo.

Cái thủ thuật này còn cái hạn chế là tôi chưa làm sự kiện OnChange cho ô search để lọc dữ liệu ngay khi gõ từng ký tự. Hiện tại nó chạy lung tung. Bạn có thời gian thì ngâm cứu đổi sang search bằng câu lệnh SQL thì tôi nghĩ sẽ khắc phục được so với phương thức Form.Filter tôi đang dùng.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
Tôi vừa cập nhật lại cái Form Lọc và Sắp xếp cho gọn hơn như sau:
- Thay đổi icon mũi tên sắp xếp lên xuống từ file Image (2 control ẩn hiện) sang dùng Label. Đối với label này chỉ cần dùng 1 control. Để thay đổi biểu tượng mũi tên lên xuống thì tôi dùng font "Marlett" - font có sẳn trong hệ thống. Số 5 là mũi tên lên, số 6 là mũi trên xuống.
-  Tinh chỉnh code sắp xếp trong class module cho gọn hơn với 1 label Sort. 

Đã cập nhật link file trong bài #1.

Hình ảnh font marlett: bạn có thể dùng thay thế cho checkbox.

[Hình: 45864119234_5fbeed4c1f.jpg]
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Photo Hướng Dẫn Thay đổi logo trong table Bao Khang 2 114 19-04-19, 03:58 PM
Bài mới nhất: Bao Khang
Exclamation [Help] Mong giúp đỡ về form login và form lấy mã đăng ký ổ cứng vietnc 8 347 15-04-19, 07:10 PM
Bài mới nhất: ongke0711
  Hướng Dẫn Hướng dẫn tạo form login trong access (Form đăng nhập) quan_pc 6 325 09-04-19, 10:59 AM
Bài mới nhất: ongke0711
  Tìm kiếm Record ngay khi gõ trong Combobox - Class ongke0711 14 1,734 28-03-19, 05:07 PM
Bài mới nhất: toidjtjmtoi
Photo Hướng Dẫn Cách tạo nhiều Button cho Continuous Form jeck09nt 3 250 27-02-19, 08:36 AM
Bài mới nhất: lmthu

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line| Phần mềm quản lý bán hàng, công nợ- tồn kho- nhà phân phối