25/05/2018, 08:50

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
0