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