Xây dựng đối tượng thể hiện
Xây dựng điều khiển người dùng - user control rất cần thiết cho việc tái sử dụng các đoạn mã lệnh mà ta đã xây dựng chúng, đây là một trong những tiêu chí quan trọng trong lĩnh vực xây dựng phần mềm nói chung và xây dựng ứng dụng web nói ...
Xây dựng điều khiển người dùng - user control rất cần thiết cho việc tái sử dụng các đoạn mã lệnh mà ta đã xây dựng chúng, đây là một trong những tiêu chí quan trọng trong lĩnh vực xây dựng phần mềm nói chung và xây dựng ứng dụng web nói riêng.
Xây dựng điều khiển người dùng cũng tương tự như việc xây dựng các trang web mà chúng ta đã làm trước đây. Chỉ có điều khác biệt chính là trong trang web, chúng ta có nhiều thành phần giao diện và xử lý tương ứng còn trong điều khiển người dùng, chúng ta chỉ thiết kế và xây dựng cho một chức năng hay yêu cầu cụ thể.
Điều khiển người dùng cũng có các thuộc tính, phương thức và sự kiện như các Web Server control, lẽ đương nhiên là các thuộc tính, phương thức và sự kiện đều do chúng ta thiết kế và xây dựng.
Tạo mới đối tượng thể hiện
Để tạo mới đối tượng thể hiện, chọn Add | Add Web User Control… từ thực đơn ngữ cảnh của ứng dụng.
Chức năng tạo mới đối tượng thể hiện – Web User Control
Tạo mới đối tượng thể hiện: TH_SACH
Việc thiết kế và xây dựng các đối tượng thể hiện hoàn toàn tương tự như các bạn đã từng làm với
trang web. Chúng ta cùng xây dựng đối tượng thể hiện thông tin sách.
Thiết kế thể hiện thông tin sách sử dụng DataList
Khi hoàn tất thiết kế đối tượng thể hiện, công việc tiếp theo là viết các xử lý cần thiết cho các điều khiển có trên đối tượng thể hiện theo yêu cầu sử dụng.
Viết các xử lý cho đối tượng thể hiện:
Private Sub Page_Load(…, e …) Handles MyBase.Load If Not IsPostBack Then 'Khởi tạo chuỗi kết nối Dim lSach As New XL_SACH dtlSach.DataSource = lSach dtlSach.DataKeyField = "Ms" dtlSach.DataBind() End If End Sub Private Sub dtlSach_ItemDataBound(…, e …) … 'Xử lý hiển thị Tên sách 'Xử lý hiển thị hình ảnh minh họa 'Xử lý hiển thị thông tin tóm tắt nội dung 'Xử lý hiển thị thông tin chủ đề 'Xử lý hiển thị thông tin nhà xuất bản 'Xử lý hiển thị giá tiền của sách End Sub
Sử dụng đối tượng thể hiện
Sau khi thiết kế và viết các xử lý, chúng ta tiến hành đưa đối tượng thể hiện đã được xây dựng vào trang Web. Các bước thực hiện:
Bước 1. Mở trang web ở chế độ thiết kế - design.
Bước 2. Từ cửa sổ Solution Explorer, chọn đối tượng thể hiện cần sử dụng, nhấn và kéo rê vào trang web đã được mở.
Kéo đối tượng thể hiện vào trang Web
Bước 3. Thiết lập các thuộc tính cho điều khiển vừa được kéo vào
Khi thi hành, kết quả hiển thị của đối tượng thể hiện trên trang Web:
Tạo phương thức cho đối tượng thể hiện
Trong ví dụ trên, chúng ta đã xây dựng đối tượng thể hiện Sách. Khi tạo mới một thể hiện Sách vào trang web, thông tin sách sẽ được hiển thị. Tuy nhiên, chắc hẳn các bạn sẽ hài lòng hơn khi chúng ta thiết kế đối tượng thể hiện sách: TH_SACH, chỉ với 1 đối tượng, nhưng chúng ta có thể hiển thị thông tin sách theo yêu cầu như: Hiển thị sách mới vừa nhập, hiển thị sách bán chạy nhất, hiển thị sách được nhiều đọc giả xem và bình chọn nhất, hiển thị sách của một nhà xuất bản hay hiển thị thông tin sách của một tác giả nào đó. Thú vị quá phải không các bạn?
Để làm được điều đó, rất đơn giản. Chúng ta chỉ việc tạo cho đối tượng thể hiện các phương thức - hành vi tương ứng với những yêu cầu cụ thể.
Chúng ta sẽ tiến hành bổ sung các phương thức sau vào đối tượng thể hiện vừa được xây dựng.
Lưu ý: Khi bổ sung các phương thức hiển thị dữ liệu cho đối tượng thể hiện, chúng ta không xử lý hiển thị dữ liệu trong sự kiện PageLoad.
Private Sub Page_Load(…, e …) Handles MyBase.Load 'Khởi tạo giá trị cho chuỗi kết nối End Sub Public Sub Hien_thi_sach_co_ma(ByVal pMS As Long) Dim lSach As New XL_SACH(pMS) dtlSach.DataSource = lSach dtlSach.DataBind() End Sub Public Sub Hien_thi_sach_ban_chay() Dim lSach As New XL_SACH() dtlSach.DataSource = lSach.Doc_sach_ban_chay() dtlSach.DataBind() End Sub Public Sub Hien_thi_sach_moi() Dim lSach As New XL_SACH() dtlSach.DataSource = lSach.Doc_sach_moi() dtlSach.DataBind() End Sub Public Sub Hien_thi_sach_theo_nxb(ByVal pMNxb As Long) Dim lSach As New XL_SACH() dtlSach.DataSource = lSach.Doc_sach_theo_nxb(pMNxb) dtlSach.DataBind() End Sub Public Sub Hien_thi_sach_theo_chu_de(ByVal pMcd As Long) Dim lSach As New XL_SACH() dtlSach.DataSource = lSach.Doc_sach_theo_chu_de(pMaCD) dtlSach.DataBind() End Sub
Tạo sự kiện cho đối tượng thể hiện
Chắc các bạn không quên sự kiện Click của các điều khiển Button (Button, LinkButton,
ImageButton). Sự kiện Click xảy ra khi Button được nhấn vào. Và mới đây thôi, với điều khiển DataGrid, DataList, chúng ta đã làm việc với các sự kiện: ItemCommand, EditCommand, UpdateCommand, … Mỗi sự kiện xảy ra bởi một hành động tương ứng trước đó của người dùng.
Các đối tượng thể hiện mà chúng ta vừa xây dựng cũng vậy, có khả năng phát ra các sự kiện nếu được chúng ta xây dựng.
Chúng ta cùng tạo sự kiện cho thể hiện Sách. Trong thể hiện sách có các thông tin mô tả liên quan:
Tên sách, Chủ đề, Nhà xuất bản. Khi người dùng chọn chức năng nào thì điều khiển sẽ phát ra sự kiện tương ứng:
- Tên sách -> Điều khiển sẽ phát ra sự kiện Chon_sach(pMs)
Trong đó: pMs là Mã sách được người dùng chọn.
- Chủ đề -> Điều khiển sẽ phát ra sự kiện Chon_chu_de(pMcd)
Trong đó: pMcd là Mã chủ đề được người dùng chọn.
- Nhà xuất bản -> Điều khiển sẽ phát ra sự kiện Chon_nha_xuat_ban(pMnxb)
Trong đó: pMnxb là Mã nhà xuất bản được người dùng chọn.
Điều khiển phát ra các sự kiện tương ứng
Phát ra sự kiện
Chon_sach
Phát ra sự kiện
Chon_chu_de
Phát ra sự kiện
Chon_nha_xuat_ban
Thiết kế
Thiết lập thuộc tính CommandName cho các LinkButton: Tên sách, Chủ đề và Nhà xuất bản.
Thiết kế thông tin sách với DataList
Bảng mô tả thuộc tính của các điều khiển | |||
Điều khiển | Loại | Thuộc tính | Giá trị |
lnkTen_sach | LinkButton | Text | Tên sách |
CommandName | Ten_sach | ||
lnkChu_de | LinkButton | Text | Chủ đề |
CommandName | Chu_de | ||
lnkNha_xb | LinkButton | Text | Nhà xuất bản |
CommandName | Nha_xuat_ban |
Xử lý
Bước 1. Khai báo các sự kiện:
Imports System.Web.UI.WebControls Public Class TH_SACH Inherits System.Web.UI.UserControl Public Event Chon_sach(ByVal pMs As Long) Public Event Chon_chu_de(ByVal pMcd As Long) Public Event Chon_nha_xuat_ban(ByVal pMnxb As Long) End Class
Bước 2. Xử lý sự kiện ItemDataBound
Trong xử lý sau, chúng ta gán giá trị cho thuộc tính CommandArgument của các LinkButton để lưu trữ các mã tương ứng cho từng điều khiển.
'Xử lý cho Tên sách Dim lnkTen_sach As LinkButton lnkTen_sach = e.Item.FindControl("lnkTen_sach") lnkTen_sach.Text = e.Item.DataItem("Ten_sach") lnkTen_sach.CommandArgument = e.Item.DataItem("Ms") 'Xử lý cho chủ đề Dim lChu_de As New XL_CHU_DE Dim lnkChu_de As LinkButton lnkChu_de = e.Item.FindControl("lnkChu_de") Dim Mcd As Integer = e.Item.DataItem("Mcd") lnkChu_de.Text = lChu_de.Thuoc_tinh(Mcd, "Ten_chu_de") lnkChu_de.CommandArgument = Mcd 'Xử lý cho nhà xuất bản Dim lNXB As New XL_NHA_XB Dim lnkNha_xb As LinkButton lnkNha_xb = e.Item.FindControl("lnkNha_xb") Dim Mnxb As Integer = e.Item.DataItem("Mnxb") lnkNha_xb.Text = lNXB.Thuoc_tinh(Mnxb, "Ten_nha_xuat_ban") lnkNha_xb.CommandArgument = MNXB
Bước 3. Bẫy biến cố ItemCommand để phát sự kiện tương ứng
Private Sub dtlSach_ItemCommand(…, e …) … If e.CommandName = "Ten_sach" Then Dim Ms As Long = e.CommandArgument RaiseEvent Chon_sach(Ms) ElseIf e.CommandName = "Chu_de" Then Dim Mcd As Long = e.CommandArgument RaiseEvent Chon_chu_de(Mcd) ElseIf e.CommandName = "Nha_xuat_ban" Then Dim Mnxb As Long = e.CommandArgument RaiseEvent Chon_nha_xuat_ban(Mnxb) End If End Sub
Chúng ta có thể đồng thời vừa xử lý biến cố và phát ra sự kiện:
Private Sub dtlSach_ItemCommand(…, e …) … If e.CommandName = "Ten_sach" Then Dim Ms As Long = e.CommandArgument RaiseEvent Chon_sach(Ms) ElseIf e.CommandName = "Chu_de" Then Dim Mcd As Long = e.CommandArgument Hien_thi_sach_theo_chu_de(Mcd) RaiseEvent Chon_chu_de(Mcd) ElseIf e.CommandName = "Nha_xuat_ban" Then Dim Mnxb As Long = e.CommandArgument Hien_thi_sach_theo_nxb(Mnxb) RaiseEvent Chon_nha_xuat_ban(Mnxb) End If End Sub
Hiển thị sách theo chủ đề Công nghệ thông tin
Các sách của chủ đề Công nghệ thông tin