Composite control
User control:
Cho phép kết hợp nhiều web control lại tạo thành một phần của trang web, và chỉ sử dụng trong ứng dụng chứa nó
Custom control:
Tùy biến lại dựa trên control chuẩn:
TextBox, Button, Label…
Tạo ra web control mới hoàn toàn dựa trên WebControl
Export ra file DLL, cho phép reuse trong nhiều ứng dụng
Composite control
Kết hợp các đặc tính của user control và custom control
14 trang |
Chia sẻ: candy98 | Lượt xem: 519 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lập trình Asp.Net - Phần 9: Composite Control - Nguyễn Hà Giang, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Nguyễn Hà Giang2009Composite ControlNguyen Ha Giang1Nội dungComposite control2Nguyen Ha GiangComposite controlUser control:Cho phép kết hợp nhiều web control lại tạo thành một phần của trang web, và chỉ sử dụng trong ứng dụng chứa nóCustom control:Tùy biến lại dựa trên control chuẩn:TextBox, Button, LabelTạo ra web control mới hoàn toàn dựa trên WebControlExport ra file DLL, cho phép reuse trong nhiều ứng dụngComposite controlKết hợp các đặc tính của user control và custom control3Nguyen Ha GiangComposite controlCách tạo composite controlTạo ứng dụng ASP.NET Server Control (Web control library)Tạo lớp composite control kế thừa từ lớp cơ sở CompositeControlBổ sung các web control vào composite controlViết các xử lý khởi tạo cho các control conOverride phương thức CreateChildControls: bổ sung các control con vào danh sách controlOverride phương thức RenderControl (nếu cần)Sắp đặt cách thể hiện các control con trên composite control4Nguyen Ha GiangMinh họa DateControlDateControl là composite control cho phép user nhập vào ngày tháng năm5Nguyen Ha GiangngàythángnămMinh họa DateControlTạo composite controlTạo ứng dụng ASP.NET Web Control (VS 2008)6Nguyen Ha GiangMinh họa DateControlKhai báo lớp cơ sở cho DataControl là CompositeControl7Nguyen Ha GiangCompositeControlMinh họa DateControlTạo 3 biến control dạng TextBox, để nhập các giá trị ngày, tháng, năm8Nguyen Ha Giangpublic class HaGDateControl : CompositeControl{ // Tạo 3 textbox cho user nhập ngày tháng năm private TextBox txtDay = new TextBox(); private TextBox txtMonth = new TextBox(); private TextBox txtYear = new TextBox();}Minh họa DateControlTạo một property Value kiểu DateTime tham chiếu đến ngày tháng năm9Nguyen Ha Giang// Thuộc tính chứa giá trị DateTimepublic DateTime Value{ get { return new DateTime(Convert.ToInt32(txtYear.Text), Convert.ToInt32(txtMonth.Text), Convert.ToInt32(txtDay.Text)); } set { txtDay.Text = value.Day.ToString(); txtMonth.Text = value.Month.ToString(); txtYear.Text = value.Year.ToString(); }}Minh họa DateControlKhởi tạo các textbox10Nguyen Ha Giangprotected override void OnInit(EventArgs e) { // thực thi OnInit của lớp cơ sở base.OnInit(e); // khởi tạo cho textbox Day txtDay.ID = this.ID +"_day"; txtDay.MaxLength = 2; txtDay.Width = this.Width; // khởi tạo cho textbox Month txtMonth.ID = this.ID +"_month"; txtMonth.MaxLength = 2; txtMonth.Width = Width; // khởi tạo cho textbox Year txtYear.ID = this.ID + "_year"; txtYear.MaxLength = 4; txtYear.Width = Width;}Minh họa DateControlOverride phương thức CreateChildControls:Bổ sung các textbox vào danh sách control11Nguyen Ha Giangprotected override void CreateChildControls(){ // bổ sung các control con vào danh sách controls this.Controls.Add(txtDay); this.Controls.Add(txtMonth); this.Controls.Add(txtYear); // gọi lớp cơ sở base.CreateChildControls();}Minh họa DateControlRender lại phần thể hiện composite control12Nguyen Ha Giangpublic override void RenderControl(HtmlTextWriter writer){ writer.RenderBeginTag(HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.RenderBeginTag(HtmlTextWriterTag.Td); txtDay.RenderControl(writer); // texbox render writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("/"); writer.RenderEndTag(); writer.RenderEndTag(); // end td ///.}Minh họa DateControl13Nguyen Ha Giang writer.RenderBeginTag(HtmlTextWriterTag.Td); txtMonth.RenderControl(writer); // textbox render writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("/"); writer.RenderEndTag(); // end td writer.RenderEndTag(); // end td writer.RenderBeginTag(HtmlTextWriterTag.Td); txtYear.RenderControl(writer); // textbox render writer.RenderEndTag(); // end td writer.RenderEndTag(); // end tr writer.RenderEndTag();} // end RenderControlMinh họa DateControlBiên dịch composite controlKết quả là file dạng thư viện DLLTạo project ASP.NET Web App để test composite control Bổ sung composite vừa tạo vào thanh công cụ ToolBoxKéo thả composite control vào trang web testChạy project14Nguyen Ha Giang