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

133 1.5K 8
Hướng dẫn lập trình VB .NET

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu hướng dẫn lập trình Hướng dẫn lập trình VB .NET

HƯỚNG DẪN LẬP TRÌNH VISUAL BASIC NET Tác giả www.vivosoft.com Bài Microsoft NET Framework Xin cáo lỗi: tiếc server không cho phép chứa files MP3 nên chúng tơi tìm cách khác đọc giả download sau Nếu bạn có ý kiến hay cách cho download MP3 files xin liên lạc với webmaster Thu âm giảng (MP3) download size Week 1.1 Week 1.2 Week 1.3 Week 1.4 Week 1.5 Week 1.6 Week 1.7 Week 1.8 1.2 mb 1.2 mb 0.6 mb 1.2 mb 1.2 mb 1.2 mb 1.4 mb 1.4 mb Cài đặt Visual Studio.NET Beta Visual Studio.NET nằm CDs, gồm có files: • • • • EN_VS_NET_BETA2_WINCUP.exe EN_VS_NET_BETA2_CD1.exe EN_VS_NET_BETA2_CD2.exe EN_VS_NET_BETA2_CD3.exe Chạy EN_VS_NET_BETA2_WINCUP.exe để Unzip vào folder harddisk (eg: E:\CD\WINCUP) Lần lượt chạy EN_VS_NET_BETA2_CD1.exe, EN_VS_NET_BETA2_CD2.exe EN_VS_NET_BETA2_CD3.exe để Unzip chúng vào chung folder harddisk (eg: E:\CD ) Việc Unzip files lâu, bạn phải kiên nhẫn chờ kết thúc Nếu khơng, cài đặt bị than phiền thiếu files Kế đó, trước hết chạy Setup.exe Windows Component Update đây, click No Warning dialog ra: Tiếp theo, chạy Setup.exe Visual Studio.NET: Bạn nên có CPU Pentium III, 500MHz trở lên, với 256 MB RAM 10GB Harddisk Về OS bạn nên dùng Windows 2000 (Professional hay Server) hay Windows XP Lý versions Windows nầy hổ trợ Unicode có Internet Information Server (IIS) hổ trợ ASPX để ta dùng cho ASP.NET Mở Samples QuickStart Trước expand Samples Quickstart bạn cần phải cài đặt IIS Nếu chưa làm việc bạn bỏ CD Windows2000 hay WindowsXP vào để install IIS component QuickStart Samples NET Framework chứa giải thích nhiều thí dụ Để expand Samples doubleclick Webpage Starthere.htm hình đây: Khi trang Web QuickStart ra, click QuickStart, tutorials and samples sau theo dẫn bước Trang Framework SDK QuickStart Tutorials cho ta tập ASP.NET, Windows Forms How Do I Nhớ để nguyên folders Unzipped files (E:\CD, E:\CD\WINCUP), đừng delete chúng, NET cịn dùng chúng Ngồi ra, sau nầy NET bị corrupted conflict với application software khác, bạn cài đặt NET lại Giới hạn Software Tools Architect application software có nói chung ba tầng (three tiers): tầng giao diện (Presentation Tier), tầng (Middle Tier) tầng kiện (Data Tier): Presentation Tier: Trong desktop Client ta dùng VB6 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 rules để validate data client business rules khác Ta dùng VB6 đây, cách triển khai COM với Object Oriented Programming concepts rắc rối bình thường Ta phải thiết kế cho components scale well (dùng cho cở) Có dùng Microsoft Transaction Server Windows NT hay COM+ Services Windows 2000 Lấp ráp versions components thách thức lớn Nhiều middle tier cịn nói chuyện với database qua HTTP, ADO CDO (Collaborative Data Objects), v.v Data Tier: Thường relational database Microsoft SQL Server hay Oracle Ngoài cịn có Exchange hay database xư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 VB6 Code, VBScript, JavaScript, Dynamic HTML, Cascading Style Sheet, VC++, Stored Procedures (Transact-SQL SQLServer hay PL-SQL Oracle) Tùy thuộc nhiều vào central database: Ngay ADO dù tiện dụng đòi hỏi Client ln ln connect với Server Điều nầy khơng thích hợp cho Internet applications, chất Internet stateless (không giữ trạng thái), lần cần làm việc connect lại chút DLL "Hell": Các ActiveX cần phải registered với Windows Registry, có version chấp nhận Nếu version DLL khơng compatible với versions trước mà applications máy cần có rắc rối Giới hạn VB6 • • • • • • Thiếu khả inheritance (thừa kế) số Object Oriented features khác Khả Error handling giới hạn: On Error Goto , On Error Resume Next Nhiều cần phải gọi Windows API để làm việc VB6 không hổ trợ: việc nầy không tự nhiên nguy hiểm Khơng có multi-threading: khơng thể đốn trước response code chạy windows VB6 application Ngay giải vấn đề multitasking Timers không đáng tin cậy Không dễ dùng chung với ngôn ngữ khác VC++ Không tiện cho Web development: WebClass khơng thành cơng Ít chịu cho ta cài ActiveX máy họ .NET Framework NET developed từ đầu năm 1998, lúc đầu có tên Next Generation Windows Services (NGWS) Nó thiết kế hồn tồn từ số không để dùng cho Internet Viển tượng Microsoft xây dựng globally distributed system, dùng XML (chứa databases tí hon) làm chất keo để kết hợp chức computers khác tổ chức hay khắp giới Những computers nầy Servers, Desktop, Notebook hay Pocket Computers, chạy software dựa platform nhất, độc lập với hardware ngôn ngữ lập trình Đó NET Framework Nó trở thành phần MS Windows port qua platform khác, Unix Mặc dầu Beta, NET Framework stable Visual Studio.NET bugs, dùng cho software development từ Hiện có số sách lập trình NET Wrox Oreilly xuất Các phần Microsoft.NET Framework: NET application chia làm hai loại: cho Internet gọi ASP.NET, gồm có Web Forms Web Services cho desktop gọi Windows Forms Windows Forms giống Forms VB6 Nó hổ trợ Unicode hồn tồn, tiện cho chữ Việt thật Object Oriented Web Forms có Server Controls làm việc giống Controls Windows Forms, dùng codes để xử lý Events y hệt Windows Forms Điểm khác biệt chánh ASP (Active Server Pages) ASP.NET ASP.NET, phần đại diện visual components code nằm riêng nhau, không lộn xộn ASP Ngoài ASP.NET code hoàn toàn Object Oriented Web Services giống Functions mà ta gọi dùng từ URL Internet, thí dụ Credit Card authorisation ADO.NET loại cache database nho nhỏ (gọi disconnected database) để thay ADO Thay application connects vĩnh viễn với database mẹ qua ADO, application NET làm việc với portable database chứa hai tables, copy từ database mẹ Khi cần, portable database nầy (ADO.NET) reconciled với database mẹ để update thay đổi Hai tables ADO.NET related Master/Details relationship Vì ADO.NET có chứa original data lẫn data nên Rollback ADO.NET dễ dàng nhẹ ký XML yểm trợ tối đa Nằm phía sau ADO.NET XML XML Table of records ADO.NET hay Tree of nodes DOM (Document Object Model) IO hổ trợ toàn Stream kể Memory Stream StreamReader/StreamWriter Thêm vào DataFormatting cho Serialisation để chứa Object xuống binary file hay text file TCP/IP http hai protocols thông dụng NET, chúng làm việc phía sau sân khấu giúp ta gọi remote procedure (nằm computer khác) dễ dàng local procedure Kỹ thuật gọi Remoting Security hổ trợ Cryptography, Permissions Policy Diagnostics cho ta Debug Trace Threading tiện đơn giản để implement Lightweight Process Vấn đề Timing NET program linh động, hiệu xác Việc thiết kế Common Language Runtime nhắm vào mục tiêu sau đây: • • • • • Việc triển khai đơn giản nhanh hơn: developers dành định ráp software components lại với nhiều lập trình thật Các cơng tác thiết yếu ("plumbing") memory management, process communication v.v lo liệu tự động Các công cụ hổ trợ đầy đủ (no more API): NET Framework Base classes phong phú cho file, network, serialisation, mã hóa, XML, database, v.v Cài đặt đơn giản an toàn (no more DLL "hell"): cần xcopy files, giống thời vàng son DOS Lý NET application chạy NET framework, ta cài NET framework vào máy có đầy đủ DLL cần thiết Có lẽ tương lai Microsoft cài NET framework chung với Windows Dùng cho từ WindowsCE đến Desktop, đến Web (scalability) Metadata Metadata kiện cắt nghĩa cho ta biết kiện Thí dụ XML Schema XML file metadata cắt nghĩa data structure data XML file Chính XML Schema XML file Các NET application components, gọi Assembly, chứa nhiều metadata để cắt nghĩa (self describing) Tìm biết NET application để làm việc với gọi Reflection Hổ trợ phối hợp ngơn ngữ lập trình Common Language Runtime (CLR) trung tâm điểm NET Famework, hầm máy để chạy tính NET Trong NET, ngơn ngữ lập trình compiled Microsoft Intermediate Language (IL) giống giống byte code Java Nhờ bắt buộc ngôn ngữ phải dùng loại data types (gọi Common Type System) nên Common Language Runtime kiểm sốt interface, gọi components cho phép ngôn ngữ hợp tác cách thơng suốt Tức NET, VB.NET program inherit C# program ngược lại cách hoàn toàn tự nhiên Điều nầy giúp VC++ hay Java programmers bắt đầu dùng C# cách dễ dàng mà làm dự án với VB.NET programmers Nếu VC++ linh động hiệu VB6, C# chẳng khác VB.NET Bạn port C# code qua VB.NET code dễ dàng Vì source code VC++ Java gần gũi C# VB6 với VB.NET nên đời có nhiều C# code VB.NET Do đó, hai ngôn ngữ VB.NET C# ngang nhau, dùng C# bạn lợi điểm có nhiều source code sẵn lâu người ta mang ấn tượng VC++ hay Java programmers thật cao thủ lập trình, có khuynh hướng trả lương guru VC++/Java cao VB programmers Khi chạy NET application, compiled JIT (Just-In-Time) compiler hiệu machine code để chạy Điểm nầy giúp NET application chạy nhanh Java interpreted code Java Virtual Machine Just-In-Time có nghĩa phần code cần xử lý lúc compiled IL code chạy CLR đuợc nói managed code .NET code chạy chung với ActiveX, code ActiveX gọi unmanaged code, tức CLR khơng chịu trách nhiệm Ngồi việc allocation management of memory, CLR giữ refrerence đến objects đỗ rác (handle garbage collection), tức thâu lại mảnh vụn memory chúng không cần dùng Trước đây, DLL đuợc loaded vào memory, system ghi nhận có task dùng để task cuối chấm dứt system unload DLL trả lại phần memory dùng trước để system dùng cho chuyện khác Chớ allocate memory để dùng mà khơng nhớ dispose bị memory leak (rỉ ), lần lần ta dùng hết memory, bị bắt buộc phải reboot OS Nhưng NET dùng process độc lập để làm việc garbage collection Cái phản ứng phụ việc nầy ta Dispose Object rồi, ta khơng biết chắn chừng thật biến Vì garbage collector low priority process làm việc background, system memory gần cạn nâng cao priority lên Dĩ nhiên, muốn, ta địi hỏi system Dispose Object Assembly NET application xây dựng từ assemblies Mỗi assembly phải có manifest Có thể nằm riêng file hay nằm bên module Manifest chứa metadata sau đây: 10 Dưới Sub BtnLoadXMLData_Click sửa lại chút để dùng DataView: Private Sub BtnLoadXMLData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnLoadXMLData.Click ' Instantiate a DataSet type alarmlist DS = New alarmlist() ' Load the XML data from file AlarmList.xml in the source code folder Note that the program EXE resides ' in the bin subfolder DS.ReadXml(" /AlarmList.xml") ' Bind the Datagrid DataSource to this new DataSet table alarm ' DataGrid1.DataSource = DS.alarm ' Create a Dataview from DS DV1 = New System.Data.DataView(DS.alarm) ' Sort alarms by priority, then datetime ' DESC stands for descending order,i.e biggest on top DV1.Sort = "priority DESC, datetime DESC" ' Bind the Datagrid DataSource to Dataview DataGrid1.DataSource = DV1 AddCustomDataTableStyle() ' Display the number of alarms in each priority DisplayTotal() End Sub Để ý Dataview object DV1 derived từ DS.alarm Sau ta Sort alarms theo thứ tự ưu tiên, số alarm có priority ta lại Sort chúng theo datetime (ở data type datetime string) Ngoài để đếm số alarms thuộc priority ta dùng Dataview với filter xem property Count sau: Private Sub DisplayTotal() ' Create a Dataview object from table DS.alarm Dim DVP1 As New System.Data.DataView(DS.alarm) ' Apply filter DVP1.RowFilter = "priority = 1" ' Display Count of records in this Dataview NumPrio1.Text = "Prio1: " & DVP1.Count.ToString Dim DVP2 As New System.Data.DataView(DS.alarm) DVP2.RowFilter = "priority = 2" NumPrio2.Text = "Prio2: " & DVP2.Count.ToString Dim DVP3 As New System.Data.DataView(DS.alarm) DVP3.RowFilter = "priority = 3" NumPrio3.Text = "Prio3: " & DVP3.Count.ToString NumTotal.Text = "Total: " & DS.alarm.Rows.Count.ToString Dim bmb As BindingManagerBase = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) NumDisplayed.Text = "Displayed: " & bmb.Count.ToString End Sub Chắc bạn để ý thấy thay iterate qua record để đếm số alarms thuộc priority 1,2 hay 3, ta dùng ba Dataviews để filter alarms thuộc ba priorities khác lấy trị số Count Dataview Đây lối lập trình dựa vào có sẵn nhiều tốt để tránh tạo bugs Ngoài ra, để đếm số hàng alarms thật hiển thị lúc ta dùng BindingManagerBase object hai hàng code đây: Dim bmb As BindingManagerBase = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) NumDisplayed.Text = "Displayed: " & bmb.Count.ToString Ta đặt thêm ba buttons để filter alarms với code sau đây: Private Sub Btn1and2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Btn1and2.Click DV1.RowFilter = "priority < 3" Dim bmb As BindingManagerBase = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) NumDisplayed.Text = "Displayed: " & bmb.Count.ToString End Sub 119 Private Sub Btn1Only_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Btn1Only.Click DV1.RowFilter = "priority = 1" Dim bmb As BindingManagerBase = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) NumDisplayed.Text = "Displayed: " & bmb.Count.ToString End Sub Private Sub BtnAllAlarms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnAllAlarms.Click DV1.RowFilter = "" Dim bmb As BindingManagerBase = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) NumDisplayed.Text = "Displayed: " & bmb.Count.ToString End Sub Bạn chay chương trình bấm nút vừa thêm vào để xem alarms filtered Làm việc với Row DataGrid Khi alarm báo cáo hiển thị, hệ thống điều khiển real-time thường hay phát tiếng Beep nho nhỏ để nhắc Operator xử lý cố tạo alarm Việc Operator làm Acknowledge (xác nhận biết rồi, khổ lắm, nói mãi!) alarm cách right click lên Row hiển thị alarm click menuCommand Acknowledge từ PopupMenu Khi bạn Acknowledge alarm ACKN checkbox đánh dấu hệ thống khơng cịn alarm chưa acknowledged ngừng Beep Ngồi ra, có bạn biết lý gây alarm khơng quan trọng (thí dụ nhân viên kỹ thuật sửa thử sensor alarm ấy) bạn không muốn alarm báo cáo tương lai, bạn Isolate (cơ lập hóa) Khi muốn cho hoạt động bình thường trở lại, bạn Enable (tác động) Bây bạn đặt ContextMenu control vào form Edit cho ba menuCommands tên mnuAckn(Acknowledge), mnuIsolate(Isolate) mnuEnable(Enable) hình đây: Mỗi user right click lên hàng alarm, ContextMenu1 hiển thị menuCommands thích hợp với tình Tức alarm chưa acknowledged có menuCommand Acknowledge, alarm 120 chưa bị isolated có menuCommand Isolate, bị isolated có MenuCommand Enable Bình thường, bạn click lên checkbox trống DataGrid1, checkbox đánh dấu Nhưng chương trình ta không muốn cho user làm việc mà phải Acknowlege, Isolate hay Enable PopupMenu Do bạn cho property ReadOnly DataGrid1 True Lúc chương trình nhận Event MouseDown từ DataGrid1 ta tìm cách xác định lúc Mouse nằm alarm line cách chạy Method HitTest DataGrid1 Khi DataGrid1 HitTest vị trí Mouse với instruction myGrid.HitTest(e.X, e.Y), cho ta Object HitTestInfo Property Row HitTestInfo hàng thứ DataGrid1 Để lấy DataRowView hiển thị HitTestInfo.Row ta phải dựa vào BindingManagerBase Cái DataRowView mà ta tìm DataRowView BindingManagerBase với position HitTestInfo.Row Trong chương trình nầy, ta chứa DataRowView variable drv Dưới code để xử lý Event MouseDown DataGrid1, để ý ta hiển thị bên description alarm clicked statement Label1.Text = drv("description") user feedback: ' Variable used to store selected DataRowView Dim drv As DataRowView Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles DataGrid1.MouseDown ' Only proceed when Mouse Right Button was clicked If e.Button MouseButtons.Right Then Exit Sub ' Typecast sender to DataGrid data type myGrid is actually DataGrid1 Dim myGrid As DataGrid = CType(sender, DataGrid) ' Declare a HitTestInfo variable Dim hti As DataGrid.HitTestInfo ' Obtain the info about Mouse location hti = myGrid.HitTest(e.X, e.Y) ' Only proceed when a Cell was hit If hti.Type = DataGrid.HitTestType.Cell Then Try ' Obtain BindingManagerBase of DataGrid1 Dim bmb As BindingManagerBase = Me.BindingContext(myGrid.DataSource, myGrid.DataMember) ' Position at DataRowView corresponding to the physical row that was hit bmb.Position = hti.Row ' Store the found DataRowView in temporary variable drv drv = bmb.Current ' Display description of the alarm line as a feedback Label1.Text = drv("description") If Not (drv Is Nothing) Then ' Only display the MenuCommands that are appropriate to this context Dim ctx As DataRow = drv.Row If Not (ctx Is Nothing) Then If drv("ackn") = True Then mnuAckn.Visible = False Else ' Only display menuCommand Ackn when alarm is not yet acknowledged mnuAckn.Visible = True End If If drv("isolate") = True Then ' If alarm is already isolated then only display MenuCommand Enable mnuIsolate.Visible = False mnuEnable.Visible = True Else mnuIsolate.Visible = True mnuEnable.Visible = False End If ' Popup context menu ContextMenu1.Show(myGrid, New Point(e.X, e.Y)) End If End If Catch ex As Exception 121 MessageBox.Show(ex.ToString()) End Try End If End Sub Khi User click Popup menu commands ta thay đổi boolean value Ackn hay Isolate viết xuống AlarmList.xml data file sau: Private Sub mnuAckn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuAckn.Click If Not drv Is Nothing Then drv("ackn") = True UpdatePoint() End If End Sub Private Sub mnuIsolate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuIsolate.Click If Not drv Is Nothing Then drv("isolate") = True UpdatePoint() End If End Sub Private Sub mnuEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEnable.Click If Not drv Is Nothing Then drv("isolate") = False UpdatePoint() End If End Sub Private Sub UpdatePoint() ' Accept the changes in DataSet DS.AcceptChanges() ' Write updated data to XML file to persist the information DS.WriteXml(" \AlarmList.xml") End Sub Khi khởi động chương trình right click lên alarm point 402-2-9 để Acknowledge bạn thấy sau: Bạn tải chương trình AlarmList nầy Edit XML Schema Trong chương trình nầy ta có áp dụng khác cho DataGrid Ta muốn tạo DataForm để Edit chi tiết Operators, người phép dùng hệ thống điều khiển Real-time On-line để Acknowledge alarm, mở, tắt quạt, máy bơm,.v.v DataForm nầy có DataGrid nằm bên cho ta hình spreadsheet tất Operator records, ta chọn làm việc với record cách click bên trái record spreadsheet 122 Trước hết bạn khởi động project tên Operators Kế dùng IDE MenuCommand Project | Add New Item để thêm XML Schema cách click lên icon XML Schema Chỗ Name XMLSchema1.xsd sửa thành operatorlist.xsd hình đây: Để Edit schema nầy, bạn doubleclick lên tên operatorlist.xsd Solution Explorer Một khung vàng nhạt trống Bạn drag icon E Element từ XML Schema Toolbox (nằm bên trái ) vào khung vàng nhạt Hãy click lên chữ Element1 (nằm bên phải chữ E) hình tạo sửa thành operator hình đây: Kế drag icon A Attribute từ XML Schema Toolbox vào drop hàng nằm Element operator Sửa tên Attribute thành operatorid Click bên phải chữ string operatorid để chọn datatype integer từ ComboBox Lập lại thao tác cho Attributes username, password level Click bên phải chữ string level để chọn datatype integer từ ComboBox Hể trị số level operator lớn operator có quyền để làm nhiều chuyện MasterUser người có level cao Mỗi command hệ thống điều khiển Real-time cho level mà user phải có level với trị số dùng command Thí dụ Command Modify Username/Password/Level có level có MasterUser với level dùng Đến ta định nghĩa xong Attributes Element operator mà ta dùng làm record Table operator sỡ liệu XML Để có XML hợp lệ ta cần phải gói Element operator vào Element gốc (root) mà ta gọi operatorlist Bạn drag icon E Element từ XML Schema Toolbox vào khung vàng nhạt sửa tên Element thành operatorlist Kế nắm góc trái (top left) hình Element oparator drag drop vào hàng chữ operatorlist Element operatorlist Bạn thấy hình đây: 123 Nếu bạn click Tab XML phía khung vàng nhạt bạn thấy mã nguồn XML Schema operatorlist.xsd sau: Mã nguồn XML Schema operatorlist.xsd cho thấy Element operatorlist Element gốc (root) gọi DocumentElement XML nầy Bên Element operatorlist có Element operator Mỗi Element operator có Attributes operatorid, username, password level Để ý datatype Attributes operatorid level integer Trở lại hình Schema cách click Tab Schema phía dưới, ta thấy hàng khung chữ nhật chứa tên Element chủ khung Từ hàng thứ nhì trở xuống định nghĩa thuộc Element Bài 15 DataGrid (phần III) Edit XML file dựa XML Schema Sau xác định cấu trúc datatypes Elements Attributes table operator, ta cho data vào table Bạn dùng IDE menuCommand Project | Add New Item để thêm XML file (click lên icon XML file) vào project Sửa Name file từ XMLFile1 thành alarmlist.xml Right click lên trang trống XML, có câu: 124 Chọn PopupMenu command Properties để hiển thị dialog DOCUMENT Property Pages Trong Dropdown Combo, chọn http://tempuri.org/operatorlist.xsd làm Target Schema cho operatorlist.xml Sau bạn thấy Element operatorlist có thêm Attribute tên xmlns (chữ ns xmlns viết tắc cho namespace) với trị số http://tempuri.org/operatorlist.xsd Điều nầy có nghĩa ta áp đặt Schema operatorlist.xsd lên cấu trúc kiện bên XML file operatorlist.xml Bây giờ, bạn bắt đầu đánh data vào trang operatorlist.xml Để ý IDE biết ta dùng Schema operatorlist.xsd, nên áp dụng Intellisense để giúp ta edit xác nhanh hình đây: Mỗi bạn đánh xong opening Tag operator closing Tag tự động Bên opening Tag operator, Intellisense hiển thị tên Attributes để bạn chọn Mỗi bạn đánh dấu = sau tên Attribute IDE tự động insert cặp dấu ngoặc kép Sau đánh xong kiện số operators, bạn click MenuCommand XML | Validate XML Data để IDE validate kiện ta vừa cho vào để xem có định nghĩa Schema operatorlist.xsd khơng thấy IDE than phiền sau: E:\NET\HongDevelopment\LessonPreparation\Operators\operatorlist.xml(4): Element 'http://tempuri.org/operatorlist.xsd:operatorlist' has invalid child element 'http://tempuri.org/operatorlist.xsd:operator' 125 Đó Schema khơng có nói rõ bên Element operatorlist có nhiều Element operator Để giải trở ngại nầy ta phải edit trực tiếp mã nguồn XML Schema Bạn doubleclick lên file name operatorlist.xsd Solution Explorer cần click Tab XML trang Schema để hiển thị mã nguồn XML operatorlist.xsd Thay cặp Tags cặp Tags hình để nói có nhiều Elements operator Element operatorlist : Typed Dataset Trong 13 ta tạo Dataset từ Schema cách dùng IDE MenuCommand XML | Schema Generate Dataset Sau muốn nói đến datafield record ta dùng tên datafield Thí dụ để nói đến datafield description DataRowView drv ta viết sau: Label1.Text = drv("description") Một cách viết dễ đọc tự nhiên là: Label1.Text = drv.description Coding cách nầy thêm lợi điểm trước chạy chương trình, compiler cho biết ta đánh vần không chữ description chẳng hạn Thêm nữa, Intellisense hổ trợ ta lúc đánh code vào cách hiển thị danh sách tất datafields drv So với trường hợp ta dùng tên datafield, đánh vần không chữ description run-time chương trình khám phá việc 126 Loại Dataset cho phép ta code drv.description gọi Typed Dataset ta phát sinh (generate) từ Schema XML file cách dùng line command: xsd.exe /d /l:VB operatorlist.xsd /n:operatorlistDS Ở ta dùng chương trình dụng cụ xsd.exe để phát sinh từ Schema operatorlist.xsd dataset 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 tìm folder \Program Files\Microsoft Visual Studio NET\FrameworkSDK\Bin copy vào project folder Lưu ý xsd.exe dùng final version VS.NET khác với xsd.exe dùng version Beta Kế đó, bạn thêm Typed Dataset nầy vào project cách dùng IDE MenuCommand Project | Add Existing Item chọn operatorlist.vb từ project folder Dùng Dataform wizard để phát sinh form từ Dataset Ta dùng Dataform Wizard để generate dataform Nhưng trước đó, ta cần phải compile project với IDE menuCommand Build | Build Operators để chốc Wizard thấy Typed Dataset Bạn dùng IDE MenuCommand Project | Add Windows Form, click lên icon Data Form Wizard đổi Name form thành frmOperator.vb hình đây: 127 Tiếp theo bạn thấy Data Form Wizard dialog với tên Typed Dataset ComboBox Option Use the following dataset: đây: Để y nguyên click Next: 128 Click Checkbox Include an Update button, click Next: Để y nguyên click Next: 129 Chọn options hình bên click Finish Form frmOperator generated tự động cho vào Project Bây bạn right click lên tên file Form1.vb Solution Explorer để delete right click tên project Operators chọn command Properties từ PopupMenu để đổi Startup object thành frmOperator Kế xếp object form frmOperator cho gọn lại hình đây: Để hiển thị operator records Spreadsheet phía dưới, bạn thêm DataGrid tên DataGrid1 vào form Và để dấu chữ Password Dataform, ta Edit Property PasswordChar TextBox editpassword thành * đây: 130 Để load data vào DataForm sau khởi động chương trình bạn doubleclick lên button Load viết code sau 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 gọi Sub AddCustomDataTableStyle để hiển thị records operators DataGrid1 RowHeaders DataGrid1 để yên visible user click bên trái record muốn làm việc với record Đồng thời ta cố ý không hiển thị Datafield password Coding Sub AddCustomDataTableStyle liệt kê đâ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() 131 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 chạy chương trình click nút Load Data operators loaded vào DataForm lẫn DataGrid1 Khi bạn click nút navigators để di chuyển đến record sau hay record trước, hình tam giác nho nhỏ DataGrid RowHeaders nằm bên trái DataGrid1 di chuyển theo hình đây: Ngược lại, bạn click bên trái row DataGrid1, DataForm hiển thị chi tiết kiện record Tuy nhiên hàng chữ cho biết vị trí record (nằm nút navigators) không thay đổi theo Để giải chuyện ta tạm dùng Event TextChanged TextBox editoperatorid 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() 132 End Sub Để cho đầy đủ, ta viết code cho Event Click button Update để lưu trử data 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 133 ... động hiệu VB6 , C# chẳng khác VB. NET Bạn port C# code qua VB. NET code dễ dàng Vì source code VC++ Java gần gũi C# VB6 với VB. NET nên đời có nhiều C# code VB. NET Do đó, hai ngôn ngữ VB. NET C# ngang... VB. NET (phần I) V B.NET khắc phục giới hạn Đối Tượng (Object-Oriented) VB6 mang đến cho ta ngơn ngữ lập trình hồn toàn Object-Oriented (OO) Gần thứ VB. NET liên hệ với Object Nếu bạn với lập trình. .. chương trình Quyết định bạn Sau biết qua NET, câu hỏi bạn đặt bạn có nên học lập trình NET hay khơng Nói chung, lập trình có nhiều tơn giáo VC++/Java, VB6 , Delphi v.v Bạn chọn C# VB. NET Đối với VB6

Ngày đăng: 16/08/2012, 15:07

Hình ảnh liên quan

Trong hình dưới đây, tac ốý comment out hàng Dim sw As StreamWriter: - Hướng dẫn lập trình VB .NET

rong.

hình dưới đây, tac ốý comment out hàng Dim sw As StreamWriter: Xem tại trang 14 của tài liệu.
Button bây giờ chẳng những có thể chứa hình mà còn cho bạn chọn vị tríc ủa hình trong button bằng ImageAlign nữa - Hướng dẫn lập trình VB .NET

utton.

bây giờ chẳng những có thể chứa hình mà còn cho bạn chọn vị tríc ủa hình trong button bằng ImageAlign nữa Xem tại trang 18 của tài liệu.
Namespace Chức năng Classes điển hình - Hướng dẫn lập trình VB .NET

amespace.

Chức năng Classes điển hình Xem tại trang 28 của tài liệu.
Polymorphism thể hiện dưới nhiều hình thức: - Hướng dẫn lập trình VB .NET

olymorphism.

thể hiện dưới nhiều hình thức: Xem tại trang 42 của tài liệu.
Class. Dialog AddNew Item sẽ hiện ra, chọn Class trong số hình các Icons nằm trong khung bên phải của Dialog. - Hướng dẫn lập trình VB .NET

lass..

Dialog AddNew Item sẽ hiện ra, chọn Class trong số hình các Icons nằm trong khung bên phải của Dialog Xem tại trang 43 của tài liệu.
combobox bên phải như trong hình dưới đây: - Hướng dẫn lập trình VB .NET

combobox.

bên phải như trong hình dưới đây: Xem tại trang 63 của tài liệu.
Thừa kế hình ảnh (Visual Inheritance) - Hướng dẫn lập trình VB .NET

h.

ừa kế hình ảnh (Visual Inheritance) Xem tại trang 71 của tài liệu.
WindowApplication4 nầy. Kế đó bạn chạy Object Browser bằng cách click hình tam giác nhỏ - Hướng dẫn lập trình VB .NET

indow.

Application4 nầy. Kế đó bạn chạy Object Browser bằng cách click hình tam giác nhỏ Xem tại trang 74 của tài liệu.
chúng được chứa trong một cái mâm riêng phía dưới. Thí dụ như trong hình dưới đây ta có Timer, Tooltip, Menus và các Dialogs được cho nằm trong một component Tray - Hướng dẫn lập trình VB .NET

ch.

úng được chứa trong một cái mâm riêng phía dưới. Thí dụ như trong hình dưới đây ta có Timer, Tooltip, Menus và các Dialogs được cho nằm trong một component Tray Xem tại trang 75 của tài liệu.
Thử chạy chương trình và click Button2, bạn sẽ thấy hình dưới đây: - Hướng dẫn lập trình VB .NET

h.

ử chạy chương trình và click Button2, bạn sẽ thấy hình dưới đây: Xem tại trang 83 của tài liệu.
Khi chạy chương trình, hình dưới đây sẽ hiển thị: - Hướng dẫn lập trình VB .NET

hi.

chạy chương trình, hình dưới đây sẽ hiển thị: Xem tại trang 96 của tài liệu.
Khi chạy thử chương trình ta sẽ thấy hình giống như dưới đây: - Hướng dẫn lập trình VB .NET

hi.

chạy thử chương trình ta sẽ thấy hình giống như dưới đây: Xem tại trang 103 của tài liệu.
Khi chạy chương trình, bạn sẽ thấy hình như dưới đây. Trong hình ấy, MaxDropDownItems của ComboBox1 đã được set bằng 4 - Hướng dẫn lập trình VB .NET

hi.

chạy chương trình, bạn sẽ thấy hình như dưới đây. Trong hình ấy, MaxDropDownItems của ComboBox1 đã được set bằng 4 Xem tại trang 111 của tài liệu.
.NET IDE cho ta hình của Schema để ta có thể Edit dễ dàng. Thông thường, IDE chỉ xác nhận thứ nào là Element (có chữ E nằm bên trái), thứ nào là Attribute (có chữ A nằm bên trái) - Hướng dẫn lập trình VB .NET

cho.

ta hình của Schema để ta có thể Edit dễ dàng. Thông thường, IDE chỉ xác nhận thứ nào là Element (có chữ E nằm bên trái), thứ nào là Attribute (có chữ A nằm bên trái) Xem tại trang 115 của tài liệu.
operator như trong hình dưới đây: - Hướng dẫn lập trình VB .NET

operator.

như trong hình dưới đây: Xem tại trang 123 của tài liệu.
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 - Hướng dẫn lập trình VB .NET

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 Xem tại trang 123 của tài liệu.
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ữ - Hướng dẫn lập trình VB .NET

r.

ở 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ữ Xem tại trang 124 của tài liệu.
DataGrid (phần III) Edit XML file dự a trên XML Schema - Hướng dẫn lập trình VB .NET

ata.

Grid (phần III) Edit XML file dự a trên XML Schema Xem tại trang 124 của tài liệu.
Intellisense để giúp ta edit chính xác và nhanh như trong hình dưới đây: - Hướng dẫn lập trình VB .NET

ntellisense.

để giúp ta edit chính xác và nhanh như trong hình dưới đây: Xem tại trang 125 của tài liệu.
&lt;xs:choice maxOccurs=&#34;unbounded&#34;&gt;&lt;/xs:choice&gt; như trong hình dưới đây để nói rằng có nhiều Elements operator trong Element  - Hướng dẫn lập trình VB .NET

lt.

;xs:choice maxOccurs=&#34;unbounded&#34;&gt;&lt;/xs:choice&gt; như trong hình dưới đây để nói rằng có nhiều Elements operator trong Element Xem tại trang 126 của tài liệu.
Chọn các options như trong hình bên trên rồi click Finish. - Hướng dẫn lập trình VB .NET

h.

ọn các options như trong hình bên trên rồi click Finish Xem tại trang 130 của tài liệu.
Chọn các options như trong hình bên trên rồi click Finish. - Hướng dẫn lập trình VB .NET

h.

ọn các options như trong hình bên trên rồi click Finish Xem tại trang 130 của tài liệu.
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 - Hướng dẫn lập trình VB .NET

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 Xem tại trang 132 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan