Hướng dẫn lập trình Visual Basic.NET

Architect của application software hiện giờcó nói chung ba tầng (three tiers): tầng giao diện (Presentation Tier),

tầng giữa (Middle Tier) và tầng dữkiện (Data Tier):

Presentation Tier: Trong desktop Client ta dùng VB6 và nối với middle tier qua DCOM. Trong browser based

Client ta dùng Javascript hay Java applet. Từbrowser based Client ta dùng http đểnối với middle tier qua

IIS/ASP (có thểdùng COM ở đây).

Middle Tier: Chứa các rules đểvalidate data trên client và các business rules khác. Ta dùng VB6 ở đây,

nhưng cách triển khai COM với những Object Oriented Programming concepts rắc rối hơn bình thường. Ta

phải thiết kếsao cho các components scale well (dùng cho mọi cở). Có khi dùng Microsoft Transaction Server

trên Windows NT hay COM+ Services trên Windows 2000. Lấp ráp các versions của components là một thách

thức lớn.

Nhiều khi middle tier còn nói chuyện với các database qua HTTP, ADO và CDO (Collaborative Data Objects),

.v.v.

Data Tier: Thường là relational database nhưMicrosoft SQL Server hay Oracle. Ngoài ra còn có Exchange hay

các database xưa của mainframe.

Do đó ta thấy:

• Desktop tools không thích hợp cho Distributed System hay Internet

Phải dùng nhiều thứcodes nhưVB6 Code, VBScript, JavaScript, Dynamic HTML, Cascading Style Sheet,

VC++, Stored Procedures (Transact-SQL trong SQLServer hay PL-SQL trong Oracle).

•Tùy thuộc quá nhiều vào central database: Ngay cảADO dù là tiện dụng cũng đòi hỏi Client luôn luôn

connect với Server. Điều nầy không thích hợp cho Internet applications, vì bản chất của Internet là

stateless(không giữtrạng thái), mỗi lần cần làm việc mới connect lại một chút thôi.

• DLL "Hell": Các ActiveX cần phải được registered với Windows Registry, chỉcó một version được chấp

nhận. Nếu version mới nhất của một DLL không compatible với các versions trước đó mà applications trên

máy đang cần thì có rắc rối

pdf133 trang | Chuyên mục: Visual Basic 6.0 | Chia sẻ: dkS00TYs | Lượt xem: 1856 | Lượt tải: 4download
Tóm tắt nội dung Hướng dẫn lập trình Visual Basic.NET, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
thì mới dùng command ấy được. Thí dụ Command Modify 
Username/Password/Level có level bằng 5 thì chỉ có MasterUser với level bằng 5 mới dùng nó được. 
Đến đây ta đã định nghĩa xong các Attributes của một Element operator mà ta sẽ dùng làm record trong Table 
operator trong cơ sỡ dữ liệu XML. Để có một XML hợp lệ ta cần phải gói các Element operator vào trong một 
Element gốc (root) mà ta sẽ gọi nó là operatorlist. 
Bạn hãy drag icon E Element từ XML Schema Toolbox vào khung vàng nhạt và sửa tên của Element đó thành 
operatorlist. Kế đó nắm góc trái trên (top left) của hình Element oparator và drag drop nó vào ngay hàng dưới 
chữ operatorlist của Element operatorlist. Bạn sẽ thấy hình dưới đây: 
 124
Nếu bây giờ bạn click Tab XML phía dưới của khung vàng nhạt bạn sẽ thấy mã nguồn XML của Schema 
operatorlist.xsd như sau: 
Mã nguồn XML của Schema operatorlist.xsd cho thấy Element operatorlist là Element gốc (root) còn gọi là 
DocumentElement của XML nầy. Bên trong Element operatorlist có Element operator. Mỗi Element 
operator có những Attributes là operatorid, username, password và level. Để ý datatype của Attributes 
operatorid và level là integer. 
Trở lại hình của Schema bằng cách click Tab Schema phía dưới, ta thấy hàng đầu tiên của mỗi khung chữ 
nhật chứa tên của Element chủ của khung ấy. Từ hàng thứ nhì trở xuống là định nghĩa những gì thuộc về 
Element ấy 
Bài 15 
DataGrid (phần III) 
Edit XML file dựa trên XML Schema 
Sau khi xác định cấu trúc và datatypes của các Elements và Attributes của 
table operator, bây giờ ta sẽ cho data vào table ấy. Bạn hãy dùng IDE 
menuCommand Project | Add New Item để thêm một XML file (click lên 
icon XML file) vào project. Sửa Name của file ấy từ XMLFile1 thành 
alarmlist.xml. 
Right click lên trang trống của XML, chỉ mới có câu: 
 125
Chọn PopupMenu command Properties để hiển thị dialog DOCUMENT 
Property Pages. 
Trong cái Dropdown Combo, chọn  
làm Target Schema cho operatorlist.xml của chúng ta. Sau đó bạn sẽ thấy 
Element operatorlist có thêm một Attribute mới tên xmlns (chữ ns trong 
xmlns là viết tắc cho namespace) với trị số 
 Điều nầy có nghĩa là ta áp đặt Schema 
operatorlist.xsd lên cấu trúc và các dữ kiện bên trong XML file operatorlist.xml. 
Bây giờ, bạn có thể bắt đầu đánh data vào trang operatorlist.xml. Để ý là vì 
IDE biết ta đang dùng Schema operatorlist.xsd, nên nó có thể áp dụng 
Intellisense để giúp ta edit chính xác và nhanh như trong hình dưới đây: 
Mỗi khi bạn đánh xong opening Tag operator là closing Tag của nó tự động 
hiện ra. Bên trong opening Tag của operator, Intellisense sẽ hiển thị tên các 
Attributes để bạn chọn. Mỗi khi bạn đánh dấu = sau tên một Attribute thì IDE 
sẽ tự động insert một cặp dấu ngoặc kép. 
Sau khi đánh xong dữ kiện của một số operators, nếu bạn click MenuCommand 
XML | Validate XML Data để IDE validate các dữ kiện ta vừa mới cho vào 
để xem nó có đúng như định nghĩa trong cái Schema operatorlist.xsd không thì 
sẽ thấy IDE than phiền như sau: 
E:\NET\HongDevelopment\LessonPreparation\Operators\operatorlist.xml(4): Element 
' has invalid child element 
' 
 126
Đó là vì trong Schema không có nói rõ là bên trong Element operatorlist có 
nhiều Element operator. Để giải quyết trở ngại nầy ta phải edit trực tiếp trong 
mã nguồn XML của Schema. Bạn hãy doubleclick lên file name operatorlist.xsd 
của Solution Explorer và nếu cần thì click Tab XML của trang Schema để hiển 
thị mã nguồn XML của operatorlist.xsd. 
Thay thế cái cặp Tags bằng cặp Tags 
 như trong hình 
dưới đây để nói rằng có nhiều Elements operator trong Element 
operatorlist : 
Typed Dataset 
Trong bài 13 ta đã tạo Dataset từ Schema bằng cách dùng IDE MenuCommand 
XML | Schema Generate Dataset. Sau đó mỗi khi muốn nói đến một 
datafield của record ta dùng tên của datafield ấy. Thí dụ để nói đến datafield 
description trong DataRowView drv ta viết như sau: 
 Label1.Text = drv("description") 
Một cách viết dễ đọc và tự nhiên hơn là: 
 Label1.Text = drv.description 
Coding cách nầy được thêm lợi điểm là ngay trước khi chạy chương trình, 
compiler sẽ cho biết ngay nếu ta đánh vần không đúng chữ description 
chẳng hạn. Thêm nữa, Intellisense có thể hổ trợ ta trong lúc đánh code vào 
bằng cách hiển thị danh sách của tất cả datafields của drv. So với trường hợp 
ta dùng tên datafield, nếu đánh vần không đúng chữ description thì cho đến 
run-time chương trình mới khám phá ra việc ấy. 
 127
Loại Dataset cho phép ta code drv.description được gọi là Typed Dataset 
và ta có thể phát sinh (generate) nó từ Schema của XML file bằng cách dùng 
line command: 
 xsd.exe /d /l:VB operatorlist.xsd /n:operatorlistDS 
Ở đây ta dùng chương trình dụng cụ xsd.exe để phát sinh từ Schema 
operatorlist.xsd một dataset trong ngôn ngữ (language) lập trình VB với 
namespace tên operatorlistDS. 
Nếu bạn không thấy xsd.exe thì tìm nó trong folder \Program 
Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin rồi có thể copy 
nó vào project folder. Lưu ý là bản xsd.exe dùng trong final version của 
VS.NET thì khác với bản xsd.exe dùng trong version Beta 2. 
Kế đó, bạn có thể thêm Typed Dataset nầy vào project bằng cách dùng IDE 
MenuCommand Project | Add Existing Item rồi chọn operatorlist.vb từ 
project folder. 
Dùng Dataform wizard để phát sinh form từ Dataset 
Ta sẽ dùng Dataform Wizard để generate một dataform. Nhưng trước đó, ta 
cần phải compile project với IDE menuCommand Build | Build Operators để 
chốc nữa Wizard thấy được Typed Dataset. 
Bạn hãy dùng IDE MenuCommand Project | Add Windows Form, click lên 
icon Data Form Wizard và đổi Name của form thành frmOperator.vb như 
trong hình dưới đây: 
 128
Tiếp theo đó bạn sẽ thấy Data Form Wizard dialog với tên của Typed Dataset 
hiện ra trong ComboBox của Option Use the following dataset: như dưới 
đây: 
Để y nguyên và click Next: 
 129
Click Checkbox Include an Update button, rồi click Next: 
Để y nguyên và click Next: 
 130
Chọn các options như trong hình bên trên rồi click Finish. 
Form frmOperator sẽ được generated và tự động cho vào Project. Bây giờ 
bạn hãy right click lên tên file Form1.vb trong Solution Explorer để delete nó 
và right click tên project Operators rồi chọn command Properties từ 
PopupMenu để đổi Startup object thành frmOperator. Kế đó hãy sắp xếp 
các object trên form frmOperator cho gọn lại như trong hình dưới đây: 
Để hiển thị các operator records như một Spreadsheet phía dưới, bạn hãy 
thêm một DataGrid tên DataGrid1 vào form. Và để dấu các chữ của Password 
trong Dataform, ta sẽ Edit Property PasswordChar của TextBox 
editpassword thành * như dưới đây: 
 131
Để load data vào DataForm sau khi khởi động chương trình bạn hãy 
doubleclick lên button Load rồi viết code sau đây cho Event Click: 
Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
btnLoad.Click 
 ' Read operator data from XML file 
 Me.objoperatorlist.ReadXml("..\operatorlist.xml") 
 ' Bind DataGrid1's Datasource to table operator 
 DataGrid1.SetDataBinding(Me.objoperatorlist, "operator") 
 ' Define our owned display style. Do not display Passwords 
 AddCustomDataTableStyle() 
 ' Display current record position 
 Me.objoperatorlist_PositionChanged() 
End Sub 
Ta sẽ gọi một Sub AddCustomDataTableStyle để hiển thị các records của 
operators trong DataGrid1. RowHeaders của DataGrid1 sẽ được để yên 
visible để cho user có thể click bên trái một record khi muốn làm việc với 
record ấy. Đồng thời ta cũng cố ý không hiển thị Datafield password. 
Coding của Sub AddCustomDataTableStyle được liệt kê dưới đây: 
Private Sub AddCustomDataTableStyle() 
 ' Instantiate a DataGridTableStyle object 
 Dim ts1 As New DataGridTableStyle() 
 ' Map table operator to it 
 ts1.MappingName = "operator" 
 ' Set other properties. 
 ts1.AlternatingBackColor = Color.Beige 
 ' Add a first column style. 
 Dim TextCol1 As New DataGridTextBoxColumn() 
 TextCol1.MappingName = "operatorid" 
 TextCol1.HeaderText = "OperId" 
 TextCol1.Width = 50 
 ts1.GridColumnStyles.Add(TextCol1) 
 DataGrid1.TableStyles.Add(ts1) 
 ' Add a second column style. 
 Dim TextCol2 As New DataGridTextBoxColumn() 
 132
 TextCol2.MappingName = "username" 
 TextCol2.HeaderText = "Operator" 
 TextCol2.Width = 120 
 ts1.GridColumnStyles.Add(TextCol2) 
 ' Add a third column style. 
 Dim TextCol3 As New DataGridTextBoxColumn() 
 TextCol3.MappingName = "level" 
 TextCol3.HeaderText = "Level" 
 TextCol3.Width = 35 
 ts1.GridColumnStyles.Add(TextCol3) 
 ' Now add ts1 to the Datagrid1's collection of TableStyles 
 DataGrid1.TableStyles.Add(ts1) 
End Sub 
Bây giờ hãy chạy chương trình và click nút Load. Data của các operators sẽ 
được loaded vào cả DataForm lẫn DataGrid1. Khi bạn click các nút navigators 
để di chuyển đến record sau hay record trước, cái hình tam giác nho nhỏ trong 
DataGrid RowHeaders nằm bên trái DataGrid1 cũng di chuyển theo như trong 
hình dưới đây: 
Ngược lại, khi bạn click bên trái một row trong DataGrid1, DataForm sẽ hiển thị 
chi tiết các dữ kiện của record ấy. Tuy nhiên hàng chữ cho biết vị trí của record 
(nằm giữa các nút navigators) vẫn không được thay đổi theo. 
Để giải quyết chuyện đó ta tạm dùng Event TextChanged của TextBox 
editoperatorid như sau: 
Private Sub editoperatorid_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
editoperatorid.TextChanged 
 ' Show position of current record 
 objoperatorlist_PositionChanged() 
 133
End Sub 
Để cho đầy đủ, ta cũng sẽ viết code cho Event Click của button Update để lưu 
trử data trong một XML file tên operatorlistNew.xml: 
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
btnUpdate.Click 
 ' Accept all changes in Dataset 
 Me.objoperatorlist.AcceptChanges() 
 ' Write Dataset to XML file 
 Me.objoperatorlist.WriteXml("..\operatorlistNew.xml") 
End Sub 

File đính kèm:

  • pdfHướng dẫn lập trình Visual Basic.NET.pdf
Tài liệu liên quan