Màn hình lọc dữ liệu

Một phần của tài liệu TÀI LIỆU HƯỚNG DẪN VISUAL BASIC (Trang 160)

IV.1. Màn hình lọc một điều kiện

Màn hình gồm các điều khiển cho bảng một và lưới (hoặc ListBox) cho bảng nhiều. Điều khiển của

bảng một thường cĩ một Combobox, ListBox liệt kê các giá trị giúp người dùng lựa chọn. Chúng ta dùng sự kiện SelectedIndexChanged để lọc dữ liệu

Trên đây là một dạng khác của màn hình lọc theo một điều kiện: (các bảng vở kịch, diễn viên, tham gia

được đọc khi mở màn hình)

ƒ Diễn viên được phân vai hiển thị dữ liệu THAM_GIA lọc theo vở kịch được chọn

ƒ Danh sách diễn viên hiển thị dữ liệu DIEN_VIEN đã loại trừ các diễn viên được phân vai

Ví dụ: bang_tham_gia và bang_dien_vien được khởi tạo khi mở màn hình

Private Sub MVK_SelectedIndexChanged(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Danh_sach_chon_vo_kich.SelectedIndexChanged bang_tham_gia.Loc_du_lieu("MVK=" & MVK.SelectedValue)

Dim chuoi As String = Lap_danh_sach_MDV(bang_tham_gia) If chuoi <>"" Then chuoi = "MDV Not In(" & chuoi & ")" bang_dien_vien.Loc_du_lieu(chuoi) End Sub

Private Function Lap_danh_sach_MDV(bang As XL_BANG) As String Dim ketqua As String = ""

For i As Integer = 0 To bang.So_dong - 1 ketqua &= bang.DefaultView(i)("MDV") & "," Next

If ketqua.Length > 0 Then ketqua = _

ketqua.SubString(0, ketqua.Length - 1)

End Function

ƒ Các nút >, >> thực hiện thêm các dịng chọn trên Danh sách diễn viên vào bang_tham_gia và lọc lại dữ liệu trên bang_dien_vien

ƒ Các nút <, << thực hiện hủy các dịng chọn trên Diễn viên được phân vai khỏi bang_tham_gia và lọc lại dữ liệu trên bang_dien_vien

IV.2. Màn hình lọc hai điều kiện

Màn hình gồm hai điều khiển (ComboBox, ListBox hoặc Option Group) và lưới để hiển thị dữ liệu lọc. Chúng ta dùng sự kiện SelectedIndexChanged của Combobox hoặc ListBox, CheckedChanged của Option để lọc dữ liệu.

V. Màn hình một-nhiều-nhiều

Màn hình này hiển thị dữ liệu của bảng một, dữ liệu của bảng nhiều thứ nhất ứng với dịng hiện hành trên bảng một và dữ liệu của bảng nhiều thứ hai ứng với dịng hiện hành trên bảng nhiều thứ nhất. Màn hình gồm các điều khiển cho bảng một, lưới cho bảng nhiều thứ nhất và lưới cho bảng nhiều thứ hai. Các điều khiển cho bảng một thường cĩ một ComboBox để lọc dữ liệu cho bảng nhiều thứ nhất. Khi chọn dịng trên lưới của bảng nhiều thứ nhất, lọc (hoặc đọc) dữ liệu của bảng nhiều thứ hai

VI. Một số kỹ thuật trong hiển thị dữ liệu

VI.1. Tạo lớp DataGridColumnStyle chuyển đổi dữ liệu hiển thị

Trên lưới, cĩ những trường hợp cần cột hiển thị dữ liệu khác với dữ liệu lưu trữ như cột MÃ hiển thị TÊN. Chúng ta cĩ thể thực hiện thơng qua việc tạo một kiểu DataGridColumnStyle mới đáp ứng nhu

cầu này kế thừa từ DataGridTextBoxColumn.

DataGridTextBoxColumn kế thừa từ DataGridColumnStyle và cĩ một DataGridTextBox (phát sinh từ lớp TextBox). Điều khiển TextBox được đưa vào tập hợp Controls của DataGrid. Mỗi lần người dùng bắt đầu soạn thảo trên ơ của cột cĩ kiểu DataGridTextBoxColumn, DataGridTextBox được di chuyển đến vị

trí soạn thảo và người dùng chỉnh sửa trên chính DataGridTextBox. Giá trị hiển thị trên lưới và cập nhật vào bảng thơng qua hai phương thức GetColumnValueAtRow, SetColumnValueAtRow.

Cách giải quyết :

ƒ Để cĩ giá trị hiển thị cho cột, chúng ta sử dụng một tập hợp (Collection) chứa tất cả những giá

trị cần hiển thị tương ứng.

ƒ Giá trị đưa vào tập hợp thuộc một Class với hai thuộc tính đọc ghi chứa giá trị hiển thị và giá trị lưu trữ do chúng ta xây dựng.

ƒ Lớp DataGridColumnStyle được tạo sẽ cĩ tập hợp (collection) các đối tượng của lớp vừa tạo ở

trên lấy giá trị do người dùng cung cấp thơng qua các phương thức thêm xĩa của collection.

ƒ Trong hàm GetColumnValueAtRow, chúng ta tìm và trả về giá trị hiển thị tương ứng trong tập hợp. Loại cột này dùng để hiển thị thơng tin, khơng cho cập nhật nên chúng ta sẽ khơng sử dụng thủ tục SetColumnValueAtRow.

VI.2. Tạo lớp DataGridColumnStyle cĩ ComboBox

Loại này cĩ một ComboBox chứa danh sách liệt kê để người dùng chọn lựa. Ngồi ra đây cũng là cột cĩ thể cĩ nhu cầu hiển thị khác nội dung lưu trữ nên chúng ta kế thừa từ lớp TranslateColumn ở trên. Các yêu cầu cho loại cột này là:

ƒ Đưa vào một ComboBox

ƒ Xử lý cập nhật khi giá trị trên cột thay đổi qua ComboBox Cách thực hiện:

ƒ Khai báo một ComboBox mới và đưa vào tập hợp Controls của lớp và diều khiển này sẽ ẩn hiện theo TextBox của cột và sẽ di chuyển đến vùng hiện hành của lưới.

ƒ DisplayMember, ValueMember và DataSource của ComboBox sẽ được gán thơng qua một

phương thức.

ƒ Để cập nhật dữ liệu cho lưới, chúng ta gán SelectedValue của ComboBox sau khi chọn thơng

qua phương thức SetColumnAtRowValue Xin xem thêm giáo trình.

VI.3. Tạo lớp DataGridColumnStyle cho phép định dạng chi tiết

Với lớp DataGridTextBoxColumn, chúng ta khơng thể định dạng riêng cho một ơ. Vì vậy, cần xây dựng một lớp cĩ thể cho phép định dạng riêng biệt qua việc tạo một kiểu DataGridColumnStyle mới kế thừa từ DataGridTextBoxColumn (xem thêm trong giáo trình)

VI.4. Minh họa sử dụng

VI.4.1. Lớp TranslateColumn

Chúng ta thiết kế lưới hiển thị các diễn viên sử dụng lớp TranslateColumn hiển thị dữ liệu cột Phai trên bảng

– Khai báo cột TranslateColumn khi thiết kế:

ƒ Định cột Phai kiểu DataGridTextBoxColumn (giả sử được đặt tên là cotPhai) với MappingName là

"Phai"

ƒ Sau đĩ chuyển sang cửa sổ Code, vùng Windows Form Designer generated code, tìm và sửa

kiểu của cột này từ DataGridTextBoxColumn -> TranslateColumn

ƒ Viết thủ tục cấp nguồn hiển thị cho cotPhai và gọi trong sự kiện Form_Load

Ví dụ:

Private Sub Nguon_hien_thi()

' Tri là lớp đã xây dựng (xem giáo trình) cotPhai.Tap_hop.Add(New Tri(False, "Nữ"))

cotPhai.Tap_hop.Add(New Tri(True, "Nam")) End Sub

– Thiết kế lưới bằng lệnh:

Ví dụ: Lưới cĩ tên LUOI_DIEN_VIEN

Private Sub Thiet_ke_luoi_dien_vien()

Dim kieu_the_hien As New DataGridTableStyle kieu_the_hien.MappingName = "DIEN_VIEN"

Dim cotHo_ten_DV As New DataGridTextBoxColumn ' các lệnh thiết kế cột ...

Dim cotPhai As New TranslateColumn cotPhai.HeaderText = "Phái"

cotPhai.MappingName = "Phai" cotPhai.NullText = ""

cotPhai.Width = 60

cotPhai.Tap_hop.Add(New Tri(False, "Nữ")) cotPhai.Tap_hop.Add(New Tri(True, "Nam")) Dim cotNgay_sinh As New DataGridTextBoxColumn ' các lệnh thiết kế cột ...

Dim cotDia_chi As New DataGridTextBoxColumn ' các lệnh thiết kế cột ...

kieu_the_hien.GridColumnStyles.AddRange(New DataGridColumnStyle() _

{cotHo_ten_DV, cotPhai, cotNgay_sinh, cotDia_chi})

LUOI_DIEN_VIEN.TableStyles.Add(kieu_the_hien) End Sub

Sau đĩ, gọi thực hiện Thiet_ke_luoi_dien_vien trong sự kiện Form_Load

VI.4.2. Lớp ComboBoxColumn

Với yêu cầu thiết kế màn hình như hình bên

– Khai báo cột ComboBoxColumn khi thiết kế

ƒ Định cột Diễn viên kiểu DataGridTextBoxColumn (giả

sử được đặt tên là cotMDV) với MappingName là

"MDV"

ƒ Sau đĩ chuyển sang cửa sổ Code, vùng Windows

Form Designer generated code, tìm và sửa kiểu của cột này từ DataGridTextBoxColumn -> ComboBoxColumn

ƒ Trong sự kiện Form_Load, sau khi cĩ dữ liệu của DIEN_VIEN (qua biến bang_dien_vien của lớp XL_DIEN_VIEN), gọi phương thức Cap_nguon_hien_thi_liet_ke

Ví dụ:

bang_dien_vien =New XL_DIEN_VIEN

cotMDV.Cap_nguon_hien_thi_liet_ke(bang_dien_vien, "MDV", "Ho_ten_DV") – Thiết kế lưới bằng lệnh

Ví dụ: Lưới cĩ tên LUOI_THAM_GIA

Private Sub Thiet_ke_luoi_tham_gia()

Dim kieu_the_hien As New DataGridTableStyle kieu_the_hien.MappingName = "THAM_GIA"

Dim cotMDV As New ComboBoxColumn cotMDV.HeaderText = "Diễn viên" cotMDV.MappingName = "MDV" cotMDV.NullText = "" cotMDV.Width = 190

cotMDV.Cap_nguon_hien_thi_liet_ke (bang_dien_vien, "MDV", "Ho_ten_DV") kieu_the_hien.GridColumnStyles.Add(cotMDV)

LUOI_THAM_GIA.TableStyles.Add(kieu_the_hien) End Sub

Sau đĩ, gọi thực hiện Thiet_ke_luoi_tham_gia trong sự kiện Form_Load

VI.4.3. Lớp ColoredColumn

Với yêu cầu thiết kế lưới hiển thị vở kịch như sau:

ƒ Tạo thêm cột số diễn viên tham gia vở kịch

ƒ Nếu số diễn viên tham gia vượt quá trị nào đĩ, sẽ đổi màu chữ, màu nền, hiệu ứng của font

chữ, canh lề nội dung: canh phải, tiêu đề: canh trái

– Khai báo cột ColoredColumn khi thiết kế:

ƒ Định cột Số diễn viên tham gia kiểu DataGridTextBoxColumn (giả sử được đặt tên là cotSo_dv)

với MappingName là "So_dv"

ƒ Chuyển sang cửa sổ Code, vùng Windows Form Designer generated code, tìm và sửa kiểu của cột này từ DataGridTextBoxColumn -> ColoredColumn. Sau đĩ định lại thuộc tính

Canh_le_noi_dung trên cửa sổ Properties là Far

ƒ Xử lý sự kiện Phat_sinh_bien_co_ve_o như sau:

Ví dụ:

Private Sub cotSo_dv_Phat_sinh_bien_co_ve_o (ByRef e As _

If CInt(e.Gia_tri) > 3 Then

e.Font_Chu = New Font(LUOI_VO_KICH.Font, FontStyle.Italic) e.Mau_nen = Brushes.Cyan

e.Mau_chu = Brushes.Blue End If

Bài 9

BÁO BIỂU CRYSTAL REPORT

Tĩm tắt

Lý thuyết 6 tiết - Thực hành 10 tiết

Mục tiêu Các mục chính Bài tập

Bài học này giúp cho học viên cách thiết kế báo biểu theo mơ hình Pul, Push trong VB.Net.

1. Giới thiệu CrysTal Reportl 2. Tạo báo biểu mơ hình Pull, Push

5.15, 5.16, 5.18, 5.19

I. Giới thiệu Crystal Report

Crystal Report là phần mềm thiết kế báo biểu chuyên nghiệp được tích hợp trong các phiên bản của

Visual Studio. Phiên bản Studio .NET của Microsoft được tích hợp Crystal Report 8.5.

Bản thân Crystal Report là một phần mềm tạo báo biểu độc lập với rất nhiều chức năng thiết kế báo biểu và dịch vụ. Người dùng cĩ thể kết nối với nhiều nguồn dữ liệu khác nhau bằng các ODBC Driver. Báo biểu khi tạo ra cũng cĩ thể được lưu trữ thành những file .rpt độc lập, ở dạng cĩ dữ liệu hay khơng cĩ dữ liệu. Sau đĩ, file .rpt cĩ thể được chuyển tới người dùng khác và mở bằng Crystal Report hay cĩ thể kết hợp với các ứng dụng viết bằng Visual Basic, Visual C++.

Xét về mặt thiết kế báo biểu, Crystal Report cung cấp đầy đủ các chức năng đinh dạng dữ liệu và các chức năng phân nhĩm, tính tốn, sub – report và kể cả khả năng lập trình bằng formula dựa trên các fomula field. Người dùng ngồi việc sử dụng formula field cịn cĩ thể tự xây dựng bộ thư viện hàm của riêng mình và đưa vào Crystal Report thơng qua các DLL. Bên cạnh khả năng thiết kế báo biểu thơng thường, Crystal Report cịn cung cấp chức năng thiết kế biểu đồ dựa trên nguồn dữ liệu lấy từ CSDL. Xét về mặt sử dụng báo biểu, cơng cụ hiển thị của Crystal Report cho phép người dùng tương tác rất linh hoạt. Báo biểu hiển thị cĩ thể được lọc lại các dữ liệu cần thiết hay xem một phần báo biểu bằng cách sử dụng cấu trúc hiển thị dữ liệu dạng cây. Các Section trong báo biểu cũng cĩ thể mở rộng hay thu hẹp để hiển thị hay che bớt những dữ liệu khơng cần thiết. Một khi báo biểu đã được xây dựng,

người dùng cịn cĩ thể Export sang các dạng file khác như Word, Excel, HTML,…

Bằng cách tích hợp Crystal Report 8.5, Visual Studio .NET đem lại cho người dùng một cơng cụ xây dựng báo biểu hiệu quả, tiết kiệm nhiều thời gian so với việc phải sử dụng các đối tượng in ấn để tự

phát sinh báo biểu. Chúng ta cĩ thể sử dụng Report Expert để tạo ra báo biểu dựa vào wizard và template định sẵn hay thiết kế chi tiết báo biểu bằng tay. Nội dung phần này khơng đề cập đến các chi tiết thiết kế cụ thể (cĩ thể tham khảo cách tạo báo biểu trên Crystal Report trong giáo trình Visual Basic tập hai) nhưng tập trung vào việc tạo mới báo biểu trong Visual Studio .Net, hiển thị báo biểu trong ứng dụng và sử dụng DataSet làm nguồn dữ liệu cho báo biểu.

Báo biểu là một phần của project do đĩ, để tạo mới một báo biểu chúng ta thực hiện thơng qua menu Project | Add new item… và lần lượt thực hiện

– Trong phần Templates, chọn mục Crystal Report để tạo mới một báo biểu.

– Trong phần Name của hộp thoại Add New Item nhập vào tên file báo biểu cần tạo.

– Khi nhấn nút Open, Visual Studio .Net tự động chuyển đổi sang giao diện của Crystal Report để

chúng ta thực hiện việc tạo mới báo biểu. Cĩ thể chọn tạo mới báo biểu ở một trong hai hình thức: Wizard (Using Report Expert) hay tự thiết kế từ đầu (Blank Report). Chúng ta cũng cĩ thể mở một báo biểu đã tạo sẵn để đưa vào project.

– Khi chọn Blank Report, khác với sử dụng phần mềm Crystal Report độc lập, Visual Studio .NET sẽ chuyển ngay sang màn hình thiết kế mà khơng chọn CSDL cho báo biểu (xem hình trên)

– Để chọn CSDL cho báo biểu, nhắp chuột phải trên mục Database Fields và chọn mục Add/Remove

Database

– Một điểm cần chú ý khác trong quá trình thiết kế báo biểu đĩ là một số thay đổi trong giao diện so với phần mềm Crystal Report chạy độc lập. Ví dụ, chúng ta sẽ tìm thấy TextObject trong phần

Toolbox hay thuộc tính của các đối tượng thiết kế cĩ thể thay đổi trực tiếp từ cửa sổ Properties như khi đang thiết kế form

– Cuối cùng, cũng giống như Crystal Report Designer trên Visual Basic 6.0, chúng ta khơng thể chuyển sang chế độ Preview để xem kết quả thiết kế báo biểu, thay vào đĩ cần phải sử dụng đối tượng Crystal Report Viewer của Visual Studio .NET.

Màn hình dưới là thiết kế của báo biểu hiển thị danh sách các mặt hàng theo từng loại, lấy nguồn dữ liệu từ CSDL Northwind của SQL Server.

II.1. Nguồn dữ liệu cho báo biểu

Crystal Report kết nối với nguồn dữ liệu thơng qua các trình dữ liệu của nĩ. Mỗi trình được viết để xử lý cho một loại dữ liệu hoặc cho một kỹ thuật truy xuất dữ liệu cụ thể.

Để tạo thuận lợi cho người lập trình, các trình dữ liệu của Crystal Report cung cấp hai mơ hình truy

xuất: PULL và PUSH

II.1.1. Pull Model (mơ hình kéo)

Mơ hình Pull

Trong mơ hình này, trình sẽ kết nối với nguồn dữ liệu và lấy về dữ liệu yêu cầu. Kết nối với nguồn và lệnh SQL truy xuất dữ liệu đều do Crystal Reports xử lý; chúng ta khơng phải viết dịng lệnh nào. Nếu

khơng cĩ dịng lệnh nào viết cho lúc thực hiện, báo biểu sử dụng mơ hình Pull.

II.1.2. Push Model (mơ hình đẩy)

Ngược lại, mơ hình đẩy (Push) địi hỏi chúng ta phải viết lệnh kết nối dữ liệu, thực hiện truy xuất dữ liệu để tạo Recordset hoặc DataSet chứa các field cần thiết cho báo biểu. Mơ hình này cho phép chia sẽ kết nối trong ứng dụng và lọc dữ liệu trước khi đưa vào báo biểu.

Mơ hình Push

II.2. Sử dụng Crystal Report Viewer để hiển thị báo biểu

Để hiển thị báo biểu, chúng ta cần cĩ điều khiển CrystalReportViewer. Cĩ thể thiết kế riêng một form

chứa điều khiển này để hiển thị báo biểu và cung cấp thêm các chức năng đặc biệt nào đĩ trong

chương trình. Trong trường hợp đơn giản, bản thân CrystalReportViewer cũng đã cung cấp khá đầy đủ các chức năng hiển thị báo biểu và tương tác với người dùng. Do đĩ, chúng ta cĩ thể sẽ tạo ra form và

đối tượng CrystalReportViewer ngay trong đoạn lệnh của chương trình.

CrystalReportViewer trên ToolBoox

Ví dụ: Sau đây khai báo một form và đối tượng CrystalReportViewer để hiển thị báo biểu

CrystalReport1.rpt vừa được tạo ở trên ' Tạo form mới

Dim f As New Form

' Tạo đối tượng CrystalReportViewer

Dim cv As New CrystalDecisions.Windows.Forms.CrystalReportViewer ' Đưa cv vào trong form, đặt cv.Dock = Fill để chiếm đầy màn hình f.Controls.Add(cv)

cv.Dock = DockStyle.Fill

' Gán report sẽ hiển thị trên cv là một thể hiện của CrystalRport1 cv.ReportSource = New CrystalReport1

f.ShowDialog()

Khi thực hiện chương trình với đoạn lệnh trên, chúng ta sẽ cĩ một màn hình hiển thị report tương tự như hình dưới.

CrystalReportViewer cĩ khá đầy đủ các chức năng, từ lật trang, in ấn, gửi mail, phĩng lớn/thu nhỏ cho tới tìm kiếm, định vị các group,…

II.3. Nguồn dữ liệu cho báo biểu từ DataSet

Một điểm đặc biệt trong Visual Studio .NET là cĩ thể tạo nguồn dữ liệu cho báo biểu từ một DataSet

(mơ hình Push). Sử dụng DataSet làm nguồn dữ liệu của báo biểu cho phép tạo ra những báo biểu khơng cần kết nối với CSDL hay thậm chí tạo ra những báo biểu trong các ứng dụng hoạt động khơng cần cĩ CSDL đi cùng. Chẳng hạn, cĩ thể lấy cấu trúc DataSet từ một file XML làm nguồn dữ liệu cho báo biểu.

Để gán nguồn dữ liệu cho báo biểu, chúng ta cần một biến đối tượng là một thể hiện của báo biểu đã

thiết kế. Khi đã cĩ một DataSet, chúng ta sử dụng phương thức SetDataSource của đối tượng báo biểu

để gán DataSet đĩ làm nguồn dữ liệu:

Ví dụ:

Dim Rpt As New CrystalReport1 Rpt.SetDataSource(ds)

Sau đây minh họa cách thiết kế báo biểu sử dụng DataSet làm nguồn dữ liệu.

ƒ Trong Project, tạo một DataSet mới

+ Menu Project | Add new item, chọn mục DataSet, trong phần Name, gõ vào tên của DataSet là: Products_Schema.xsd

+ Lưu DataSet lại sau khi tạo xong cấu trúc bảng

ƒ Tạo mới một báo biểu, khi chọn nguồn dữ liệu cho báo biểu chúng ta chọn mục ADO.NET DataSet

+ Chọn DataSet vừa tạo

+ Chọn 2 bảng Categories và Products làm nguồn dữ liệu + Chọn OK để lưu lại nguồn dữ liệu của báo biểu

ƒ Thiết kế báo biểu tương tự như của ví dụ trước

ƒ Trong đoạn lệnh hiển thị dữ liệu, sửa lại nội dung như sau:

Ví dụ:

Dim bo_doc_ghi As New Data.OleDb.OleDbDataAdapter _

("Select CategoryID, CategoryName From Categories;Select ProductID, ProductName, " _

& "UnitPrice, UnitsInStock, CategoryID From Products" & _

"Provider=SQLOLEDB;Server=NTH;Initial Catalog=Northwind; User ID=sa") bo_doc_ghi.TableMappings.Add ("Table", "Categories")

bo_doc_ghi.TableMappings.Add ("Table1", "Products")

Một phần của tài liệu TÀI LIỆU HƯỚNG DẪN VISUAL BASIC (Trang 160)

Tải bản đầy đủ (PDF)

(188 trang)