Bài 4:LẬP TRÌNH VỚI CSDLADO.NET & KIẾN TRÚC KHÔNG KẾT NỐI& LẬP TRÌNH GIAO DIỆN
Các nhóm điều khiển trên formCác điều khiển thường dùngCác điều khiển chứaCác điều khiển menuCác điều khiển dữ liệuCác thà...
Mục tiêu bài họcGiới thiệu về ADO.NETCác thành phần của ADO.NETDataProviderDataSetCác loại DataProviderSql Data ProviderSq...
ADO.NET (ActiveX Data Objects .NET) là một thànhphần trong .NET Framework đảm nhiệm vai trò thaotác với CSDLADO.NETADO.NET...
ADO.NET là cầu nối giữa ứng dụng và CSDLADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trịCSDL như SQL Server, Micr...
Hỗ trợ lập trìnhCung cấp các lớp thao tác với CSDL giúp lập trình viên lậptrình nhanh hơn và giảm bớt lỗiCung cấp các công...
Kiến trúc không kết nốiKết nối được thiết lập và tạo một bản sao của CSDL ngaytrên máy tính, sau đó kết nối được đóngThao ...
ADO gồm hai phần.NET data provider: cung cấp các lớp để kết nối, thực thilệnh SQL trên CSDL và lấy kết quả trả vềDataset: ...
Data provider cung cấp các lớp để tương tác với CSDLData provider gồm 4 thành phần chínhConnection: kết nối với CSDLComman...
Ví dụ thực tiễnVấn đề: Một ngân hàng đa quốc gia có rất nhiều chinhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cậpthông...
Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữliệuMỗi dataset gồm nhiều bảngCác bảng có ràng buộc với nhauMỗi bảng c...
DataAdapter kết nối với CSDL thông qua Connection, lấydữ liệu lưu vào DataSet.Ứng dụng sẽ lấy và thay đổi dữ liệu trên Dat...
Các data provider được đặt trong các namespace khác nhauCác lớp cho các data providerCác loại Data providerProvider Namesp...
Các lớp của các loại data provider về cơ bản giốngnhau vì cùng kế thừa từ một lớpVí dụ OleDbDataAdpater và SqlDataAdapter ...
Thực hiện kết nối với CSDLPhương thức khởi tạoThuộc tính và phương thứcCác giá trị trên chuỗi kết nốiSqlConnectionnew SqlC...
DataAdapter hoạt động như cầu nối giữa dataset vàCSDLSqlDataAdapterLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 16
Phương thức khởi tạoThuộc tínhSqlDataAdapternew SqlDataAdapter()new SqlDataAdapter(lệnh-truy-vấn, Connection)Thuộc tính Mô...
Phương thứcSqlDataAdapterPhương thức Mô tảFill (dataset) Lấy dữ liệu đổ vào datasetUpdate(dataset) Cập nhật những dữ liệu ...
Sử dụng phương thức DataAdapter để fill DatasetĐọc dữ liệu vào form từ DatasetThay đổi dữ liệu trên DatasetUpdate lại dữ l...
Các bước thực hiện Lập trình cơ sở dữ liệu1. Khai báo các biếnSqlConnection conn; // biến connection kết nối đến CSDLSqlCo...
Demo load dữ liệu vào ListViewprivate void frmBookDetails_Load(object sender, EventArgs e){com = new SqlCommand("Select * ...
Demo hiển thị dữ liệukhi một dòng trên ListView được chọnprivate void lvwBookDetails_Click(object sender, EventArgs e){int...
ỨNG DỤNGGỒM NHIỀU FORMLập trình giao diện - ứng dụng gồm nhiều form 23ỨNG DỤNGGỒM NHIỀU FORM
Ứng dụng Payment gồm 2 formForm Payment được mở khi nhấn vào button SelectPayment trên form CustomerThao tác trên form Pay...
Có thể thêm một form mới hoặc một form có sẵn vàoProjectThêm form vào ProjectThêm một form mớiLập trình giao diện - ứng dụ...
Thêm form frmPayment và thiết kế như sauDemo thêm form Payment vào ProjectLập trình giao diện - ứng dụng gồm nhiều form 26
Khi ứng dụng nhiều form chạy, theo mặc định ứng dụngsẽ tải form được tạo đầu tiên trướcĐối với ứng dụng nhiều form, với fo...
Thông tin về form được tải đầu tiên của project được lưutrong file Program.csDemo hiển thị form đầu tiên của Projectstatic...
Có hai cách hiển thị form mớiHiển thị theo kiểu dialog: Người dùng phải thao tác vớiform mới này trước tiênHiển thị thông ...
Demo hiển thị form Payment khi người dùng nhấn vàobutton Select Payment trên form CustomerDemo hiển thị form Paymentprivat...
DialogResult result = MessageBox.Show("Bạn muốn xóa không", "Xóa",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if ...
Form PaymentForm CustomerDemo lấy phản hồi từ form Paymentprivate void btnOK_Click(object sender, EventArgs e){this.Dialog...
Form cung cấp thuộc tính Tag để lưu đối tượng chứa dữliệu của formCũng có thể tự khai báo thuộc tính bất kỳ để lưu dữ liệu...
Form PaymentForm CustomerDemo truyền dữ liệutừ form Payment cho form Customerprivate void btnOK_Click(object sender, Event...
Sự kiện xẩy ra khi người dùng nhấn vào button gọi đếnphương thức Close của form nhưng trước khi form đượcđóng thực sựSự ki...
Demo xử lý sự kiệnFormClosing cho frmCustomerprivate void frmCustomer_FormClosing(object sender,FormClosingEventArgs e){if...
Ứng dụng SDI (single document interface – giao diệnđơn tài liệu) là ứng dụnggồm nhiều form độc lập với nhaumỗi form có thể...
Chạy thửứng dụng SDI Financial CalculationLập trình giao diện - ứng dụng gồm nhiều form 38Form chính
Gọi đến form frmFutureValue khi nhấn vào buttonCalculate Future Value trên form frmMainGọi đến form frmDepreciation khi nh...
Đóng tất cả các form (khi người dùng nhấn vào buttonExit của form chính)Đóng từng form (khi người dùng nhấn vào button Clo...
Có thể sử dụng điều khiển Tab thay cho kiểu giao diệnSDIMỗi điều khiển Tab có nhiều page, có thể thêm và xóa cácpage nàySử...
Xử lý sự kiện cho button CalculateXử lý sự kiện SelectedIndexChanged của điều khiển TabDemo sử dụng điều khiển Tabprivate ...
MDI (multiple-document interface – giao diện đa tài liệu)là giao diện có một form cha chứa nhiều form conSử dụng menu trên...
Chạy thử ứng dụngMDI Financial CalculationsLập trình giao diện - ứng dụng gồm nhiều form 44
Trong cửa sổ Properties, thiết lập thuộc tínhIsMdiContainer của form là trueTạo form chaLập trình giao diện - ứng dụng gồm...
Viết code thiết lập thuộc tính MdiParent chỉ ra form chacho form conĐoạn mã này mở form FutureValue khi người dùng nhấnvào...
Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếuđến form con đang được kích hoạtĐóng form con đang được kích hoạtprivat...
Sử dụng phương thức LayoutMdi(KieuLayOut) để sắpxếp các form conCó các kiểu sắp xếp như Cascade, TileVertical,TileHorizont...
Thiết lập thuộc tính MDIWindowListItem của điều khiểnMenuStrip cho menu muốn hiển thịHiển thị danh sáchcủa tất cả các form...
Thêm menu riêng cho mỗi form conThêm menu riêng cho form con giống như thêm menucho form thông thườngMenu này sẽ được thêm...
Toolbar được dùng để chứa các công cụ cho formSử dụng điều khiển ToolStripThêm ToolbarToolbar được dùng để chứa các công c...
Có thể thêm Toolbar tiêu chuẩn hoặc Toolbar tùy chỉnhDemo Thêm ToolbarLập trình giao diện - ứng dụng gồm nhiều form 52Tạo ...
Thêm Tool vào ToolbarB1. Chọn kiểu Tool B2. Thêm ToolB3. Thiết lậpảnh đại diệncho ToolLập trình giao diện - ứng dụng gồm n...
Nhấn vào button đầu tiên trên Toolbar để hiển thị formFuture ValueDemo thêm ToolbarLập trình giao diện - ứng dụng gồm nhiề...
Tooltip được sử dụng để giải thích ý nghĩa cho các điềukhiển trên form khi người dùng di chuột lên điều khiểnKhi thêm Tool...
Trợ giúp theo ngữ cảnh sẽhiển thị văn bản trợ giúp chođiều khiển được focus khingười dùng nhấn F1Trợ giúp theo ngữ cảnhKhi...
Tổng kết bài họcADO.NET gồm hai phần data provider và dataset.NET data provider cung cấp các lớp để kết nối, thực thi lệnh...
Một ứng dụng có thể bao gồm nhiều form. Từ một formcó thể mở form mới theo kiểu form thông thường hoặcdialogĐối với form d...
Upcoming SlideShare
Loading in...5
×

Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao diện - Lập trình winform - Giáo trình FPT

7,806

Published on

Giới thiệu về ADO.NET
Các thành phần của ADO.NET
DataProvider
DataSet
Các loại DataProvider
Sql Data Provider
SqlConnection
SqlDataAdapter
Ứng dụng nhiều form
Ứng dụng SDI
Ứng dụng MDI
Thêm Toolbar, Tooltip vào form

Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao diện - Lập trình winform - Giáo trình FPT

  1. 1. Bài 4:LẬP TRÌNH VỚI CSDLADO.NET & KIẾN TRÚC KHÔNG KẾT NỐI& LẬP TRÌNH GIAO DIỆN
  2. 2. Các nhóm điều khiển trên formCác điều khiển thường dùngCác điều khiển chứaCác điều khiển menuCác điều khiển dữ liệuCác thành phầnCác điều khiển hỗ trợ inCác điều khiển hộp thoạiSự kiện và xử lý sự kiện trong C#Hệ thống bài cũCác nhóm điều khiển trên formCác điều khiển thường dùngCác điều khiển chứaCác điều khiển menuCác điều khiển dữ liệuCác thành phầnCác điều khiển hỗ trợ inCác điều khiển hộp thoạiSự kiện và xử lý sự kiện trong C#Lập trình giao diện - ứng dụng gồm nhiều form 2
  3. 3. Mục tiêu bài họcGiới thiệu về ADO.NETCác thành phần của ADO.NETDataProviderDataSetCác loại DataProviderSql Data ProviderSqlConnectionSqlDataAdapterỨng dụng nhiều formỨng dụng SDIỨng dụng MDIThêm Toolbar, Tooltip vào formGiới thiệu về ADO.NETCác thành phần của ADO.NETDataProviderDataSetCác loại DataProviderSql Data ProviderSqlConnectionSqlDataAdapterỨng dụng nhiều formỨng dụng SDIỨng dụng MDIThêm Toolbar, Tooltip vào formLập trình giao diện - ứng dụng gồm nhiều form 3
  4. 4. ADO.NET (ActiveX Data Objects .NET) là một thànhphần trong .NET Framework đảm nhiệm vai trò thaotác với CSDLADO.NETADO.NET (ActiveX Data Objects .NET) là một thànhphần trong .NET Framework đảm nhiệm vai trò thaotác với CSDLLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 4
  5. 5. ADO.NET là cầu nối giữa ứng dụng và CSDLADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trịCSDL như SQL Server, Microsoft Access, Oracle…ADO.NETADO.NET là cầu nối giữa ứng dụng và CSDLADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trịCSDL như SQL Server, Microsoft Access, Oracle…Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 5
  6. 6. Hỗ trợ lập trìnhCung cấp các lớp thao tác với CSDL giúp lập trình viên lậptrình nhanh hơn và giảm bớt lỗiCung cấp các công cụ để thao tác với CSDL ngay trênphần Designer giúp lập trình viên tương tác với CSDL màkhông cần hiểu sâu về CSDLKhả năng mở rộngSử dụng kiến trúc không kết nối chỉ kết nối với dữ liệulúc khi cần thiết nên giảm tải cho server CSDL  Ứngdụng có thể đáp ứng nhiều người dùng hơnKhả năng tích hợpADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗtrợ XMLTính năng của ADO.NETHỗ trợ lập trìnhCung cấp các lớp thao tác với CSDL giúp lập trình viên lậptrình nhanh hơn và giảm bớt lỗiCung cấp các công cụ để thao tác với CSDL ngay trênphần Designer giúp lập trình viên tương tác với CSDL màkhông cần hiểu sâu về CSDLKhả năng mở rộngSử dụng kiến trúc không kết nối chỉ kết nối với dữ liệulúc khi cần thiết nên giảm tải cho server CSDL  Ứngdụng có thể đáp ứng nhiều người dùng hơnKhả năng tích hợpADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗtrợ XMLLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 6
  7. 7. Kiến trúc không kết nốiKết nối được thiết lập và tạo một bản sao của CSDL ngaytrên máy tính, sau đó kết nối được đóngThao tác với bản sao và update lại CSDL khi cần thiếtƯu điểmTiết kiệm tài nguyênBảo mật vì kết nối được mở trong thời gian ngắnKiến trúc không kết nốiKiến trúc không kết nốiKết nối được thiết lập và tạo một bản sao của CSDL ngaytrên máy tính, sau đó kết nối được đóngThao tác với bản sao và update lại CSDL khi cần thiếtƯu điểmTiết kiệm tài nguyênBảo mật vì kết nối được mở trong thời gian ngắnLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 7
  8. 8. ADO gồm hai phần.NET data provider: cung cấp các lớp để kết nối, thực thilệnh SQL trên CSDL và lấy kết quả trả vềDataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấpcác phương thức cho phép ứng dụng thao tác với bản saoCác thành phần chính của ADO.NETADO gồm hai phần.NET data provider: cung cấp các lớp để kết nối, thực thilệnh SQL trên CSDL và lấy kết quả trả vềDataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấpcác phương thức cho phép ứng dụng thao tác với bản saoLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 8
  9. 9. Data provider cung cấp các lớp để tương tác với CSDLData provider gồm 4 thành phần chínhConnection: kết nối với CSDLCommand: thực thi các lệnh sql để lấy dữ liệu từ CSDLhoặc thay đổi CSDLDataReader: đọc dữ liệu tuần tự từ CSDLDataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cậpnhật CSDLData providerData provider cung cấp các lớp để tương tác với CSDLData provider gồm 4 thành phần chínhConnection: kết nối với CSDLCommand: thực thi các lệnh sql để lấy dữ liệu từ CSDLhoặc thay đổi CSDLDataReader: đọc dữ liệu tuần tự từ CSDLDataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cậpnhật CSDLLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 9
  10. 10. Ví dụ thực tiễnVấn đề: Một ngân hàng đa quốc gia có rất nhiều chinhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cậpthông tin.Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộdưới dạng datasetDataset là bản sao của CSDL hay một phần CSDL trênbộ nhớDataSet Hỗ trợ kiến trúc không kết nốiKết nối đến CSDL chỉ được mở khi lấy dữ liệu về datasetvà cập nhật dữ liệu trở lại CSDLMọi thao tác sẽ được thực hiện trên DataSetDataSet không phụ thuộc vào loại CSDLDatasetVí dụ thực tiễnVấn đề: Một ngân hàng đa quốc gia có rất nhiều chinhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cậpthông tin.Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộdưới dạng datasetDataset là bản sao của CSDL hay một phần CSDL trênbộ nhớDataSet Hỗ trợ kiến trúc không kết nốiKết nối đến CSDL chỉ được mở khi lấy dữ liệu về datasetvà cập nhật dữ liệu trở lại CSDLMọi thao tác sẽ được thực hiện trên DataSetDataSet không phụ thuộc vào loại CSDLLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 10
  11. 11. Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữliệuMỗi dataset gồm nhiều bảngCác bảng có ràng buộc với nhauMỗi bảng có nhiều dòng và cộtMỗi cột có nhiều dòngMỗi dòng có nhiều cộtDataSetCấu trúc của DataSet giống hệt cấu trúc của cơ sở dữliệuMỗi dataset gồm nhiều bảngCác bảng có ràng buộc với nhauMỗi bảng có nhiều dòng và cộtMỗi cột có nhiều dòngMỗi dòng có nhiều cộtLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 11
  12. 12. DataAdapter kết nối với CSDL thông qua Connection, lấydữ liệu lưu vào DataSet.Ứng dụng sẽ lấy và thay đổi dữ liệu trên DataSetDataAdapter kết nối với CSDL thông qua Connection vàcập nhật lại CSDLKiến trúc không kết nốiLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 12
  13. 13. Các data provider được đặt trong các namespace khác nhauCác lớp cho các data providerCác loại Data providerProvider NamespaceSQL Server System.Data.SqlClientOLE DB System.Data.OleDbODBC System.Data.OdbcOracle System.Data.OracleClientCác data provider được đặt trong các namespace khác nhauCác lớp cho các data providerLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 13Oracle System.Data.OracleClientObject SQL Server OLE DB ODBC OracleConnection SqlConnection OleDbConnection OdbcConnection OracleConnectionCommand SqlCommand OleDbCommand OdbcCommand OracleCommandData reader SqlDataReader OldeDbDataReader OdbcDataReader OracleDataReaderDataadapterSqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter
  14. 14. Các lớp của các loại data provider về cơ bản giốngnhau vì cùng kế thừa từ một lớpVí dụ OleDbDataAdpater và SqlDataAdapter cùngkế thừa từ lớp DbDataAdapterVới môn này sẽ học về SQL data provider để thao tác vớiCSDL Microsoft SQL Server 2008Các loại Data providerCác lớp của các loại data provider về cơ bản giốngnhau vì cùng kế thừa từ một lớpVí dụ OleDbDataAdpater và SqlDataAdapter cùngkế thừa từ lớp DbDataAdapterVới môn này sẽ học về SQL data provider để thao tác vớiCSDL Microsoft SQL Server 2008Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 14
  15. 15. Thực hiện kết nối với CSDLPhương thức khởi tạoThuộc tính và phương thứcCác giá trị trên chuỗi kết nốiSqlConnectionnew SqlConnection()new SqlConnection(chuỗi-kết-nối)Thuộc tính/Phương thức Mô tảConnectionString Cung cấp thông tin để truy cập đến CSDL SQL ServerThực hiện kết nối với CSDLPhương thức khởi tạoThuộc tính và phương thứcCác giá trị trên chuỗi kết nốiLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 15ConnectionString Cung cấp thông tin để truy cập đến CSDL SQL ServerOpen() Mở kết nốiClose() Đóng kết nốiGiá trị Mô tảData source/Server Tên Server CSDLInitial catalog/DataBase Tên của CSDLUserID Tên của user đăng nhập vào CSDL
  16. 16. DataAdapter hoạt động như cầu nối giữa dataset vàCSDLSqlDataAdapterLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 16
  17. 17. Phương thức khởi tạoThuộc tínhSqlDataAdapternew SqlDataAdapter()new SqlDataAdapter(lệnh-truy-vấn, Connection)Thuộc tính Mô tảDeleteCommand Lệnh sql hoặc sp để xóa dữliệu từ datasetLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 17DeleteCommand Lệnh sql hoặc sp để xóa dữliệu từ datasetSelectCommand Lệnh sql hoặc sp để lấy dữliệu từ datasetInsertCommand Lệnh sql hoặc sp để thêm dữliệu vào datasetUpdateCommand Lệnh sql hoặc sp để cập nhậtdữ liệu cho dataset
  18. 18. Phương thứcSqlDataAdapterPhương thức Mô tảFill (dataset) Lấy dữ liệu đổ vào datasetUpdate(dataset) Cập nhật những dữ liệu thayđổi trên dataset lên CSDLLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 18
  19. 19. Sử dụng phương thức DataAdapter để fill DatasetĐọc dữ liệu vào form từ DatasetThay đổi dữ liệu trên DatasetUpdate lại dữ liệu trên CSDLDemo thao tác vớidữ liệu bằng kiến trúc không kết nốiLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 19
  20. 20. Các bước thực hiện Lập trình cơ sở dữ liệu1. Khai báo các biếnSqlConnection conn; // biến connection kết nối đến CSDLSqlCommand com; // thực thi các lệnh sql để lấy dữ liệu từ hoặc là thay//đổi CSDLSqlDataAdapter da; // biến có kiểuDataSet ds; // biến dataset2. Khởi tạo biếnconn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist SecurityInfo=True;User ID=sa;Password=sa");conn.Open(); // Thực hiện mở kết nối đến CSDLda = new SqlDataAdapter();ds = new DataSet();com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDLda.SelectCommand = com;da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào datasetLập trình với CSDL - ADO.Net & Kiến trúc không kết nối 202. Khởi tạo biếnconn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist SecurityInfo=True;User ID=sa;Password=sa");conn.Open(); // Thực hiện mở kết nối đến CSDLda = new SqlDataAdapter();ds = new DataSet();com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDLda.SelectCommand = com;da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset3. Lấy 1 dòng dữ liệu trong bảngds.Tables[0].Rows.Count; // trả về tổng số bản ghids.Tables[0].Rows[i].ItemArray[j].ToString() // Lấy cột thứ J của hàng thứ i
  21. 21. Demo load dữ liệu vào ListViewprivate void frmBookDetails_Load(object sender, EventArgs e){com = new SqlCommand("Select * from Products",conn);da.SelectCommand = com;da.Fill(ds, "Products");for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++){lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhấtlvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());}}Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 21private void frmBookDetails_Load(object sender, EventArgs e){com = new SqlCommand("Select * from Products",conn);da.SelectCommand = com;da.Fill(ds, "Products");for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++){lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhấtlvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());}}
  22. 22. Demo hiển thị dữ liệukhi một dòng trên ListView được chọnprivate void lvwBookDetails_Click(object sender, EventArgs e){int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọnDataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọntxtCode.Text = dr[0].ToString();txtTitle.Text = dr[1].ToString();txtPrice.Text = dr[2].ToString();txtQuantity.Text = dr[3].ToString();}Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 22private void lvwBookDetails_Click(object sender, EventArgs e){int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọnDataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọntxtCode.Text = dr[0].ToString();txtTitle.Text = dr[1].ToString();txtPrice.Text = dr[2].ToString();txtQuantity.Text = dr[3].ToString();}
  23. 23. ỨNG DỤNGGỒM NHIỀU FORMLập trình giao diện - ứng dụng gồm nhiều form 23ỨNG DỤNGGỒM NHIỀU FORM
  24. 24. Ứng dụng Payment gồm 2 formForm Payment được mở khi nhấn vào button SelectPayment trên form CustomerThao tác trên form Payment mới được thao tác trên formCustomerChạy thử ứng dụng PaymentLập trình giao diện - ứng dụng gồm nhiều form 24
  25. 25. Có thể thêm một form mới hoặc một form có sẵn vàoProjectThêm form vào ProjectThêm một form mớiLập trình giao diện - ứng dụng gồm nhiều form 25Thêm một form mớiThêm một form có sẵn
  26. 26. Thêm form frmPayment và thiết kế như sauDemo thêm form Payment vào ProjectLập trình giao diện - ứng dụng gồm nhiều form 26
  27. 27. Khi ứng dụng nhiều form chạy, theo mặc định ứng dụngsẽ tải form được tạo đầu tiên trướcĐối với ứng dụng nhiều form, với form này gọi form kia.Có thể lập trình viên muốn chạy từng form để kiểm thửtừng formHiển thị form đầu tiên của ProjectLập trình giao diện - ứng dụng gồm nhiều form 27
  28. 28. Thông tin về form được tải đầu tiên của project được lưutrong file Program.csDemo hiển thị form đầu tiên của Projectstatic void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new frmCustomer());}Mặc định frmCustomer được loadtrước tiênLập trình giao diện - ứng dụng gồm nhiều form 28static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new frmCustomer());}static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new frmPayment());}frmPayment được load trước tiên
  29. 29. Có hai cách hiển thị form mớiHiển thị theo kiểu dialog: Người dùng phải thao tác vớiform mới này trước tiênHiển thị thông thường: Người dùng có thể thao tác vớiform tùy ýCách hiển thị form mớiB1. Sử dụng từ khóa new để tạo form mớiB2. Sử dụng phương thức ShowDialog hoặc Show củaform mới để hiển thị formHiển thị form mớiCó hai cách hiển thị form mớiHiển thị theo kiểu dialog: Người dùng phải thao tác vớiform mới này trước tiênHiển thị thông thường: Người dùng có thể thao tác vớiform tùy ýCách hiển thị form mớiB1. Sử dụng từ khóa new để tạo form mớiB2. Sử dụng phương thức ShowDialog hoặc Show củaform mới để hiển thị formLập trình giao diện - ứng dụng gồm nhiều form 29Form paymentForm = new frmPayment();paymentForm.ShowDialog(); //Hiển thị form dialogpaymentForm.Show(); //Hiển thị form thông thường
  30. 30. Demo hiển thị form Payment khi người dùng nhấn vàobutton Select Payment trên form CustomerDemo hiển thị form Paymentprivate void btnSelectPayment_Click(object sender, System.EventArgs e){Form paymentForm = new frmPayment();DialogResult selectedButton = paymentForm.ShowDialog();}Lập trình giao diện - ứng dụng gồm nhiều form 30private void btnSelectPayment_Click(object sender, System.EventArgs e){Form paymentForm = new frmPayment();DialogResult selectedButton = paymentForm.ShowDialog();}
  31. 31. DialogResult result = MessageBox.Show("Bạn muốn xóa không", "Xóa",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if (result==DialogResult.OK){//Đoạn mã xóa dữ liệu}Form Dialog được tạo sẵnForm Dialog tự tạoXử lý sự kiện cho các button trên form dialog tự tạoThiết lập giá trị cho thuộc tính DialogResultLấy phản hồi của người dùng từ DialogForm Dialog được tạo sẵnForm Dialog tự tạoXử lý sự kiện cho các button trên form dialog tự tạoThiết lập giá trị cho thuộc tính DialogResultLập trình giao diện - ứng dụng gồm nhiều form 31this.DialogResult = DialogResult.OK;
  32. 32. Form PaymentForm CustomerDemo lấy phản hồi từ form Paymentprivate void btnOK_Click(object sender, EventArgs e){this.DialogResult = DialogResult.OK;}private void btnCancel_Click(object sender, EventArgs e){this.DialogResult = DialogResult.Cancel;}Form PaymentForm CustomerLập trình giao diện - ứng dụng gồm nhiều form 32private void btnCancel_Click(object sender, EventArgs e){this.DialogResult = DialogResult.Cancel;}private void btnSelectPayment_Click(object sender, System.EventArgs{Form paymentForm = new frmPayment();DialogResult selectedButton = paymentForm.ShowDialog();if (selectedButton == DialogResult.OK){MessageBox.Show("Bạn vừa chọn OK");}}
  33. 33. Form cung cấp thuộc tính Tag để lưu đối tượng chứa dữliệu của formCũng có thể tự khai báo thuộc tính bất kỳ để lưu dữ liệucho form và truyền cho form khác bằng cách truy cậpđến thuộc tính đó trên form khácTruyền dữ liệu giữa các formLập trình giao diện - ứng dụng gồm nhiều form 33
  34. 34. Form PaymentForm CustomerDemo truyền dữ liệutừ form Payment cho form Customerprivate void btnOK_Click(object sender, EventArgs e){string msg = null;//Đoạn mã gán dữ liệu của form cho biến msg//…this.Tag = msg;this.DialogResult = DialogResult.OK;}Form PaymentForm CustomerLập trình giao diện - ứng dụng gồm nhiều form 34private void btnOK_Click(object sender, EventArgs e){string msg = null;//Đoạn mã gán dữ liệu của form cho biến msg//…this.Tag = msg;this.DialogResult = DialogResult.OK;}private void btnSelectPayment_Click(object sender,System.EventArgs e){Form paymentForm = new frmPayment();DialogResult selectedButton = paymentForm.ShowDialog();if (selectedButton == DialogResult.OK){lblPayment.Text = (string) paymentForm.Tag;}}
  35. 35. Sự kiện xẩy ra khi người dùng nhấn vào button gọi đếnphương thức Close của form nhưng trước khi form đượcđóng thực sựSự kiện này thường được dùng để ngăn người dùngđóng form chứa dữ liệu chưa được lưuNếu muốn đóng form, thiết lập e.Cancel = false (mặcđịnh)Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = trueSự kiện FormClosingprivate void frmCustomer_FormClosing(object sender,FormClosingEventArgs e){//Viết mã ở đây}Sự kiện xẩy ra khi người dùng nhấn vào button gọi đếnphương thức Close của form nhưng trước khi form đượcđóng thực sựSự kiện này thường được dùng để ngăn người dùngđóng form chứa dữ liệu chưa được lưuNếu muốn đóng form, thiết lập e.Cancel = false (mặcđịnh)Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = trueLập trình giao diện - ứng dụng gồm nhiều form 35private void frmCustomer_FormClosing(object sender,FormClosingEventArgs e){//Viết mã ở đây}
  36. 36. Demo xử lý sự kiệnFormClosing cho frmCustomerprivate void frmCustomer_FormClosing(object sender,FormClosingEventArgs e){if (isDataSaved == false){string message ="This form contains unsaved data.nn" +"Do you want to save it?";DialogResult button =MessageBox.Show(message, "Customer",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);if (button == DialogResult.Yes){//Đoạn mã lưu dữ liệu}if (button == DialogResult.Cancel){e.Cancel = true;}}}Lập trình giao diện - ứng dụng gồm nhiều form 36private void frmCustomer_FormClosing(object sender,FormClosingEventArgs e){if (isDataSaved == false){string message ="This form contains unsaved data.nn" +"Do you want to save it?";DialogResult button =MessageBox.Show(message, "Customer",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);if (button == DialogResult.Yes){//Đoạn mã lưu dữ liệu}if (button == DialogResult.Cancel){e.Cancel = true;}}}
  37. 37. Ứng dụng SDI (single document interface – giao diệnđơn tài liệu) là ứng dụnggồm nhiều form độc lập với nhaumỗi form có thể có menu và toolbar riêngmỗi form chạy trên một cửa sổ riêngVới loại ứng dụng này cần có một form chính cung cấptruy cập đến các form khác của ứng dụngỨng dụng SDIỨng dụng SDI (single document interface – giao diệnđơn tài liệu) là ứng dụnggồm nhiều form độc lập với nhaumỗi form có thể có menu và toolbar riêngmỗi form chạy trên một cửa sổ riêngVới loại ứng dụng này cần có một form chính cung cấptruy cập đến các form khác của ứng dụngLập trình giao diện - ứng dụng gồm nhiều form 37
  38. 38. Chạy thửứng dụng SDI Financial CalculationLập trình giao diện - ứng dụng gồm nhiều form 38Form chính
  39. 39. Gọi đến form frmFutureValue khi nhấn vào buttonCalculate Future Value trên form frmMainGọi đến form frmDepreciation khi nhấn vào buttonCalculate SYD Depreciation trên form frmMainDemo gọi đến các form từ form chínhprivate void btnFutureValue_Click(object sender, System.EventArgs e){Form newForm = new frmFutureValue();newForm.Show();}Gọi đến form frmFutureValue khi nhấn vào buttonCalculate Future Value trên form frmMainGọi đến form frmDepreciation khi nhấn vào buttonCalculate SYD Depreciation trên form frmMainLập trình giao diện - ứng dụng gồm nhiều form 39private void btnFutureValue_Click(object sender, System.EventArgs e){Form newForm = new frmFutureValue();newForm.Show();}private void btnCalculateDepreciation_Click(object sender, System.Event{Form newForm = new frmDepreciation();newForm.Show();}
  40. 40. Đóng tất cả các form (khi người dùng nhấn vào buttonExit của form chính)Đóng từng form (khi người dùng nhấn vào button Closecủa từng form)Demo đóng formprivate void btnExit_Click(object sender, System.EventArgs e){Application.Exit();}Đóng tất cả các form (khi người dùng nhấn vào buttonExit của form chính)Đóng từng form (khi người dùng nhấn vào button Closecủa từng form)Lập trình giao diện - ứng dụng gồm nhiều form 40private void btnClose_Click(object sender, EventArgs e){this.Close();}
  41. 41. Có thể sử dụng điều khiển Tab thay cho kiểu giao diệnSDIMỗi điều khiển Tab có nhiều page, có thể thêm và xóa cácpage nàySử dụng thuộc tính SelectedIndex để xác định tab nàođang được focusSử dụng TabCó thể sử dụng điều khiển Tab thay cho kiểu giao diệnSDIMỗi điều khiển Tab có nhiều page, có thể thêm và xóa cácpage nàySử dụng thuộc tính SelectedIndex để xác định tab nàođang được focusLập trình giao diện - ứng dụng gồm nhiều form 41
  42. 42. Xử lý sự kiện cho button CalculateXử lý sự kiện SelectedIndexChanged của điều khiển TabDemo sử dụng điều khiển Tabprivate void btnCalculate_Click(object sender, System.EventArgs e){if (tabCalculations.SelectedIndex == 0)DisplayFutureValue();else if (tabCalculations.SelectedIndex == 1)DisplayDepreciation();}Xử lý sự kiện cho button CalculateXử lý sự kiện SelectedIndexChanged của điều khiển TabLập trình giao diện - ứng dụng gồm nhiều form 42private void btnCalculate_Click(object sender, System.EventArgs e){if (tabCalculations.SelectedIndex == 0)DisplayFutureValue();else if (tabCalculations.SelectedIndex == 1)DisplayDepreciation();}private void tabCalculations_SelectedIndexChanged(object sender,EventArgs e){if (tabCalculations.SelectedIndex == 0)txtMonthlyInvestment.Focus();else if (tabCalculations.SelectedIndex == 1)txtInitialCost.Focus();}
  43. 43. MDI (multiple-document interface – giao diện đa tài liệu)là giao diện có một form cha chứa nhiều form conSử dụng menu trên form cha để có thể truy cập đến cácform conỨng dụng MDILập trình giao diện - ứng dụng gồm nhiều form 43
  44. 44. Chạy thử ứng dụngMDI Financial CalculationsLập trình giao diện - ứng dụng gồm nhiều form 44
  45. 45. Trong cửa sổ Properties, thiết lập thuộc tínhIsMdiContainer của form là trueTạo form chaLập trình giao diện - ứng dụng gồm nhiều form 45
  46. 46. Viết code thiết lập thuộc tính MdiParent chỉ ra form chacho form conĐoạn mã này mở form FutureValue khi người dùng nhấnvào menu New Future Value trên form chaTạo form conprivate void mnuNewFutureValue_Click(object sender, System.EventArgs e){Form newForm = new frmFutureValue();newForm.MdiParent = this;newForm.Show();}Lập trình giao diện - ứng dụng gồm nhiều form 46private void mnuNewFutureValue_Click(object sender, System.EventArgs e){Form newForm = new frmFutureValue();newForm.MdiParent = this;newForm.Show();}
  47. 47. Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếuđến form con đang được kích hoạtĐóng form con đang được kích hoạtprivate void mnuClose_Click(object sender, System.EventArgs e){Form activeForm = this.ActiveMdiChild;if (activeForm != null)activeForm.Close();}Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếuđến form con đang được kích hoạtLập trình giao diện - ứng dụng gồm nhiều form 47private void mnuClose_Click(object sender, System.EventArgs e){Form activeForm = this.ActiveMdiChild;if (activeForm != null)activeForm.Close();}
  48. 48. Sử dụng phương thức LayoutMdi(KieuLayOut) để sắpxếp các form conCó các kiểu sắp xếp như Cascade, TileVertical,TileHorizontal…Sắp xếp các form conprivate void mnuCascade_Click(object sender, System.EventArgs e){this.LayoutMdi(MdiLayout.Cascade);}Lập trình giao diện - ứng dụng gồm nhiều form 48private void mnuCascade_Click(object sender, System.EventArgs e){this.LayoutMdi(MdiLayout.Cascade);}
  49. 49. Thiết lập thuộc tính MDIWindowListItem của điều khiểnMenuStrip cho menu muốn hiển thịHiển thị danh sáchcủa tất cả các form con đang được mởLập trình giao diện - ứng dụng gồm nhiều form 49
  50. 50. Thêm menu riêng cho mỗi form conThêm menu riêng cho form con giống như thêm menucho form thông thườngMenu này sẽ được thêm vào sau thanh menu của formcha khi menu con được kích hoạtNÂNG CẤP ỨNG DỤNG FINANCIAL CALCULATIONLập trình giao diện - ứng dụng gồm nhiều form 50
  51. 51. Toolbar được dùng để chứa các công cụ cho formSử dụng điều khiển ToolStripThêm ToolbarToolbar được dùng để chứa các công cụ cho formSử dụng điều khiển ToolStripLập trình giao diện - ứng dụng gồm nhiều form 51ToolStrip ToolStrip
  52. 52. Có thể thêm Toolbar tiêu chuẩn hoặc Toolbar tùy chỉnhDemo Thêm ToolbarLập trình giao diện - ứng dụng gồm nhiều form 52Tạo Toolbar tiêu chuẩnTạo Toolbar tùy chỉnh
  53. 53. Thêm Tool vào ToolbarB1. Chọn kiểu Tool B2. Thêm ToolB3. Thiết lậpảnh đại diệncho ToolLập trình giao diện - ứng dụng gồm nhiều form 53B4. Thiết lậpvăn bản giảithích mục đíchcủa Tool
  54. 54. Nhấn vào button đầu tiên trên Toolbar để hiển thị formFuture ValueDemo thêm ToolbarLập trình giao diện - ứng dụng gồm nhiều form 54//Hoặc là
  55. 55. Tooltip được sử dụng để giải thích ý nghĩa cho các điềukhiển trên form khi người dùng di chuột lên điều khiểnKhi thêm Tooltip vào form (theo mặc định có tên làtoolTip1), tất cả điều khiển đều có thêm thuộc tínhTooltip on toolTip1Thiết lập giá trị cho thuộc tính này cho mỗi điều khiểnhoặc cho formThêm TooltipTooltip được sử dụng để giải thích ý nghĩa cho các điềukhiển trên form khi người dùng di chuột lên điều khiểnKhi thêm Tooltip vào form (theo mặc định có tên làtoolTip1), tất cả điều khiển đều có thêm thuộc tínhTooltip on toolTip1Thiết lập giá trị cho thuộc tính này cho mỗi điều khiểnhoặc cho formLập trình giao diện - ứng dụng gồm nhiều form 55Thuộc tính ToolTip ontoolTip1 được thêm vàocác điều khiển
  56. 56. Trợ giúp theo ngữ cảnh sẽhiển thị văn bản trợ giúp chođiều khiển được focus khingười dùng nhấn F1Trợ giúp theo ngữ cảnhKhi thêm HelpProvider vàoform (theo mặc định có tên làhelpProvider1), tất cả điềukhiển đều có thêm thuộc tínhHelpString on helpProvider1Lập trình giao diện - ứng dụng gồm nhiều form 56Thuộc tính HelpString on helpProvider1được thêm vào các điều khiểnKhi thêm HelpProvider vàoform (theo mặc định có tên làhelpProvider1), tất cả điềukhiển đều có thêm thuộc tínhHelpString on helpProvider1Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặccho form
  57. 57. Tổng kết bài họcADO.NET gồm hai phần data provider và dataset.NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQLvà lấy kết quả trả vềDataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộnhớ. Cung cấp các phương thức cho phép ứng dụng thao tác vớibản saoData provider gồm 4 thành phần chính là Connection,Command, DataReader và DataAdapterCommand và DataReader thực hiện theo kiến trúc kết nối, nênphải mở và đóng kết nối trước vào sau khi thao tácDataAdapter thực hiện theo cơ chế không kết nối, đối tượng nàytự động mở và đóng kết nối khi cần thiếtADO.NET gồm hai phần data provider và dataset.NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQLvà lấy kết quả trả vềDataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộnhớ. Cung cấp các phương thức cho phép ứng dụng thao tác vớibản saoData provider gồm 4 thành phần chính là Connection,Command, DataReader và DataAdapterCommand và DataReader thực hiện theo kiến trúc kết nối, nênphải mở và đóng kết nối trước vào sau khi thao tácDataAdapter thực hiện theo cơ chế không kết nối, đối tượng nàytự động mở và đóng kết nối khi cần thiết
  58. 58. Một ứng dụng có thể bao gồm nhiều form. Từ một formcó thể mở form mới theo kiểu form thông thường hoặcdialogĐối với form dialog, khi mở form có giá trị trả về kiểuDialogResult cho biết thao tác của người dùng trên formỨng dụng SDI gồm nhiều form độc lập với nhau, mỗiform có thể có menu và toolbar riêng và mỗi form chạytrên một cửa sổ riêngỨng dụng SDI này cần có một form chính cung cấp truycập đến các form khác của ứng dụngỨng dụng MDI là giao diện có một form cha chứa nhiềuform conTổng kết bài họcMột ứng dụng có thể bao gồm nhiều form. Từ một formcó thể mở form mới theo kiểu form thông thường hoặcdialogĐối với form dialog, khi mở form có giá trị trả về kiểuDialogResult cho biết thao tác của người dùng trên formỨng dụng SDI gồm nhiều form độc lập với nhau, mỗiform có thể có menu và toolbar riêng và mỗi form chạytrên một cửa sổ riêngỨng dụng SDI này cần có một form chính cung cấp truycập đến các form khác của ứng dụngỨng dụng MDI là giao diện có một form cha chứa nhiềuform conLập trình giao diện - ứng dụng gồm nhiều form 58
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×