cshape full
TRANSCRIPT
LẬP TRÌNH WINDOWS FORMS (C#)
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HCM Khoa Toán – Tin học
-------���-------
Slide bài giảng
ÌNH WINDOWS FORMS (C#)
Giảng viên: Lương Trần Hy HiếnEmail: [email protected]
TP.HCM – 09/2009 Version 1.0
ÌNH WINDOWS FORMS (C#)
ần Hy Hiến [email protected]
Giới thi ệu môi tr ường lập trình VS 2005
Lương Trần Hy HiếnLương Trần Hy Hiếnwww.fit.hcmup.edu.vn/~hienlth
Chủ đề
� Cài đặt môi trường VS 2005/2008� Tạo ứng dụng mẫu� Thay đổi thông tin ứng dụng� Sử dụng thư viện MSDN� Build/Run 1 ứng dụng.� Thao tác trên màn hình View
Slide 2
Cài đặt VS 2005/2008
� Cài đặt VS 2005/2008� Cài đặt thư viện MSDN 2005/2008
Slide 3
Cài đặt VS 2005/2008
Slide 4
Cài đặt VS 2005/2008
Slide 5
Tạo ứng dụng mẫu
Bước 1: Chạy môi trường .NET 2005
Slide 6
Tạo ứng dụng mẫu
� Bước 2: Tạo 1 project
Slide 7
Tạo ứng dụng mẫu
Slide 8
Tạo ứng dụng mẫu
� Cấu trúc 1 ứng dụng (Solution)
Solution Exam01
Project 1
Project 2
Project 2
ConsoleApplication1
Exam01
Exam01: ứng dụng Windows Form
ConsoleApplication1: ứng dụng ConsoleSlide 9
Tạo ứng dụng mẫu� Cấu trúc 1 Project
Project 1
Properties AssemblyInfo fileProperties
References
Thư mục
Class files
Class files
AssemblyInfo file
- .NET Library Project- .NET Framework Assembly- COM Library- 3rd Party Library Assembly
Slide 10
Tạo ứng dụng mẫu
� Solution View: Xem cấu trúc ứng dụng
Slide 11
Tạo ứng dụng mẫu
� Solution view
Slide 12
Tạo ứng dụng mẫu� Class view :
Solution(Xem namespace,
Xem cách tổ chức bên trong của 1 ứng dụng
Project Preferences
Namespace
Namespace
Class
Class
(Xem namespace, classes của những references assembly)
Slide 13
Tạo ứng dụng mẫu
� Class View:� View � Class View
Slide 14
Tạo ứng dụng mẫu
Slide 15
Thay đổi thông tin ứng dụng
� Mở file AssemblyInfo.cs� Thay đổi các thông tin cơ bản
� Assembly titleAssemblyDescription� AssemblyDescription
� AssemblyCompany� AssemblyProduct� AssemblyCopyright
Slide 16
Thay đổi thông tin ứng dụng
Slide 17
Thêm 1 project vào trong solution
� Mở view Solution� Nhấn chuột phải lên tên solution� Chọn Add \ New Project
Slide 18
Thêm 1 item b ất kì vào project
� Mở view solution� Nhấn chuột phải project
cần thêm 1 item� Chọn Add \ New Item
Slide 19
Thêm 1 item b ất kì vào project
Slide 20
Các lo ại Project quan tâm
� Console Application Project� Window Application Project
Slide 21
Console Project
� Project Template là Console Application� Chạy trên môi trường DOS� Các lớp sử dụng: System.Console
� Console.Write() : Dùng để xuất ra màn hình giá � Console.Write() : Dùng để xuất ra màn hình giá trị. Ví dụ
1/ System.Write(“Hello World”);2/ int x = 10;
System.Console.Write(x);3/ int x = 10, y = 20;
System.Console.Write(“{0} + {1} = {2}”, x, y, x+y);Slide 22
Console Project
� Console.WriteLine(): In và xuống hàng
� Console.Read() : Đọc từng kí tự và trả về mã ASCII của kí tự đó:mã ASCII của kí tự đó:
Ví dụ: int kt = Console.Read(); //Nhập a thì kt=97.
� Console.ReadLine(): Đọc một chuỗi kí tự
Slide 23
Console Project
Ví dụ:string str = Console.ReadLine(); //Đọc chuỗi dữ liệu
Console.Write(str.Length); //In chiều dài của chuỗiConsole.Write(str.Length); //In chiều dài của chuỗifor (int i = 0; i < str.Length; i++) //Xuất từng kí tự
Console.Write(str[i]);
int x = int.Parse(str); //Ép kiểu chuỗi về số nguyênConsole.Write(x);
Slide 24
Window Application Project
� Project Template là Windows Application� Là ứng dụng sử dụng các control như
Window Form, TextBox, Button, ListBox, …Sắp xếp các control textbox, button, listview, � Sắp xếp các control textbox, button, listview, … lên window form để thể hiện giao diện giao tiếp với người dùng.
� Khi tạo xong ứng dụng Windows Application, ta sẽ có 1 view Toolbox chứa các controls có thể sử dụng trong Project này (Để xem view Toolbox chọn Menu View \ Toolbox) Slide 25
Window Application Project
Slide 26
Window Application Project
� Để xem thuộc tính của của control chọn (Mở view Properties bằng cách Menu View \Properties Window)Properties Window)
� Nhấn chuột phải lên control (như Textbox, button, ..) và chọn Properties, khi đó màn hình Properties của control này sẽ hiện ra.
Slide 27
Window Application Project
Control Tiếp đầu ngữ Biểu tượng
�Mỗi control sẽ được xác định bằng thuộc tính Name. Thuộc tính này dùng để xác định control khi lập trình� Lưu ý: Cần đặt tên Name sao cho gợi nhớ
Control Tiếp đầu ngữ Biểu tượng
Textbox Txt
Ví dụ: txtHoTen, txtTuoi
Button Btn
Ví dụ: btnOK, btnCancel
Label Lbl
Ví dụ: lblThongBaoSlide 28
Window Application Project
Các thuộc tính chung:� Name: Định danh cho control� Text: Xuất dạng text thông tin control cho người dùngngười dùng
Sự kiện:Button có sự kiện Click, phát sinh khi người dùng click vào button
Slide 29
Window Application Project
� Một window form có 2 view:� Design View: Dùng để thiết kế giao diện� Code View: Dùng để lập trình trên form (Xác định các control trên design view thông qua định các control trên design view thông qua thuộc tính Name của từng control)
Slide 30
Window Application Project
� Để xem view của From: Mở view solution, nhấn chuột phải lên Form, chọn View Code hoặc View Designerhoặc View Designer
Slide 31
Window Application Project
View Properties giúp xem các thuộc tính Properties của control như màu sắc, font, layout,… và sự kiện Event (Click, double Event (Click, double click, changed, focus, keypress,..)
Slide 32
Window Application Project
- Sau khi click vào biểu tượnghình sấm sét, ta sẽ thấy đượcdanh sách các sự kiện củacontrol đang xétcontrol đang xét- Chọn sự kiện muốn phát sinhvà nhấn double click vào, khiđó VS sẽ phát sinh hàm xử lýsự kiện đó (Dùng View Codeđể xem code phát sinh)
Slide 33
Window Application ProjectVí dụ:
Slide 34
Window Application Project
� Bắt sự kiện Click của nút button XuLy� Nhấn chuột phải vào nút button� Chọn Properties� Nhấn vào nút biểu tượng sấm sét� Nhấn vào nút biểu tượng sấm sét� Chọn dòng sự kiện Click � Double click vào dòng này(Khi đó VS sẽ phát sinh hàm bắt sự kiện Click của
nút button)
Slide 35
Window Application Project
� Hàm bắt sự kiện Click của button XuLy
Slide 36
Window Application Project
Slide 37
Tham kh ảo
� Slide bài giảng C#, ĐH KHTN TpHCM� Hồ Hoàn Kiếm Slides� C# Slides, Aptech
Slide 38
Khái ni ệm cơ bản C#Khái ni ệm cơ bản C#
Lương Trần Hy HiếnLương Trần Hy Hiế[email protected]
Nội dung Nội dung
�� Giới thiệu C#Giới thiệu C#�� Những cơ sở ngôn ngữ C#Những cơ sở ngôn ngữ C#�� Cấu trúcCấu trúc�� Lớp Lớp và đối tượngvà đối tượng�� Lớp Lớp và đối tượngvà đối tượng�� Thừa kế và đa hìnhThừa kế và đa hình�� Giao Giao diệndiện�� Array, Indexer và CollectionArray, Indexer và Collection�� Xử Xử lý lỗi & exception (biệt lệlý lỗi & exception (biệt lệ))
Slide 2
Giới thi ệu C#Giới thi ệu C#
�� C# là một ngôn ngữ đơn giản: C# là một ngôn ngữ đơn giản: �� Loại bỏ những phức tạp có trong Java hay C++ Loại bỏ những phức tạp có trong Java hay C++
như macro, template, đa kế thừa, virtual base như macro, template, đa kế thừa, virtual base classclassclassclass
�� Giống về diện mạo cú pháp C và C++ nhưng Giống về diện mạo cú pháp C và C++ nhưng được cải tiến đơn giản hơn (Ví dụ : “được cải tiến đơn giản hơn (Ví dụ : “:::: , , .. , , ��” chỉ ” chỉ còn “còn “..””
�� C# là một ngôn ngữ hiện đại:C# là một ngôn ngữ hiện đại:�� Có đầy đủ các tính năng : Xử lý ngoại lệ, thu gom Có đầy đủ các tính năng : Xử lý ngoại lệ, thu gom
bộ nhớ tự động, kiểu dữ liệu an toàn, bảo mật mã bộ nhớ tự động, kiểu dữ liệu an toàn, bảo mật mã nguồn…nguồn… Slide 3
Giới thi ệu C#Giới thi ệu C#
�� C# là ngôn ngữ hướng đối tượng:C# là ngôn ngữ hướng đối tượng:�� Đóng gói (encapsulation)Đóng gói (encapsulation)�� Kế thừa (inheritance)Kế thừa (inheritance)�� Đa hình (polymorphism)Đa hình (polymorphism)�� Đa hình (polymorphism)Đa hình (polymorphism)
�� C# là một ngôn ngữ mạnh mẽ và mềm dẻo:C# là một ngôn ngữ mạnh mẽ và mềm dẻo:�� Tuỳ thuộc vào bản thân người dùng. Không có Tuỳ thuộc vào bản thân người dùng. Không có
giới hạn ở bản chất ngôn ngữ.giới hạn ở bản chất ngôn ngữ.�� Tạo các ứng dụng đồ hoạ, xử lý văn bản, trình Tạo các ứng dụng đồ hoạ, xử lý văn bản, trình
biên dịch cho các ngôn ngữ khác v.v…biên dịch cho các ngôn ngữ khác v.v…
Slide 4
Giới thi ệu C#Giới thi ệu C#
�� C# có ít từ khoá :C# có ít từ khoá :
Những cơ sở ngôn ng ữ C#Những cơ sở ngôn ng ữ C#
�� Các ghi chú : // (1 dòng) , /* (nhiều dòng) */Các ghi chú : // (1 dòng) , /* (nhiều dòng) */#region :#region :
�� Từ khoá Từ khoá usingusing : giúp sử dụng lớp có sẵn của không : giúp sử dụng lớp có sẵn của không gian tên nào đó tiện lợi hơngian tên nào đó tiện lợi hơn
VD : using System.IO; VD : using System.IO; �� Từ đó sử dụng được các lớp làm Từ đó sử dụng được các lớp làm �� VD : using System.IO; VD : using System.IO; �� Từ đó sử dụng được các lớp làm Từ đó sử dụng được các lớp làm việc với luồng dữ liệu, tập tin, thư mục ổ đĩa v.v…việc với luồng dữ liệu, tập tin, thư mục ổ đĩa v.v…
�� Ứng dụng dạng console:Ứng dụng dạng console:�� Nhập: Nhập: string sInput ;string sInput ;
sInput = System.Console.ReadLine();sInput = System.Console.ReadLine();(chuyển (chuyển kiểu: kiểu: System.Convert.To????(sInput) )System.Convert.To????(sInput) )
�� Xuất:Xuất:System.Console.WriteLine(“KQ = {0}”, sInput);System.Console.WriteLine(“KQ = {0}”, sInput);
Slide 6
Cấu trúc 1 ch ương trình C#
Slide 7
Những cơ sở ngôn ng ữ C#Những cơ sở ngôn ng ữ C#
�� Phân biệt chữ hoa chữ thườngPhân biệt chữ hoa chữ thường�� Có các kiểu :Có các kiểu :
�� Dựng sẵn : Dựng sẵn : byte, char, sbyte, int, float, double…byte, char, sbyte, int, float, double…�� Hằng : const int PI = 3.1416;Hằng : const int PI = 3.1416;Hằng : const int PI = 3.1416;Hằng : const int PI = 3.1416;�� Liệt kê : enum Ngay {Hai,Ba,Tu,Nam,Sau,Bay,CN};Liệt kê : enum Ngay {Hai,Ba,Tu,Nam,Sau,Bay,CN};
�� Câu lệnh : Câu lệnh : if else, switch, for, while, gotoif else, switch, for, while, goto�� foreachforeach : vòng lặp để duyệt tất cả các phần tử của mảng, : vòng lặp để duyệt tất cả các phần tử của mảng,
tập hợptập hợpVD : int[] intarray; intarray = new int[5];VD : int[] intarray; intarray = new int[5];
foreach(int i in intarray) foreach(int i in intarray) Console.WriteLine(i.ToString());Console.WriteLine(i.ToString());
Slide 8
Khai báo bi ến, hằng
� Khai báo biến:int i;i = 0;int x = 10; y = 20;int x = 10; y = 20;bool b = true;
� Khai báo hằng:const int a = 20;
Slide 9
Phạm vi ho ạt động của biến
for (int i = 0; i < 10; i++){
Console.WriteLine(i);} // biến i ra khỏi phạm vi // Chúng ta có thể khai báo thêm biến i ở đâyfor (int i = 9; i >= 0; i--){
Console.WriteLine(i);} // biến i ra khỏi phạm vi ở đây Slide 10
Phạm vi ho ạt động của biến (tt)
int j = 20;for (int i = 0; i < 10; i++){
int j = 30; // không th ể thực thi - j v ẫn còn trong ph ạm vi
Console.WriteLine(j + i);}
Slide 11
Kiểu dữ liệu
� Value Type - Kiểu dữ liệu cơ bản: kiểu dữ liệu khác lớp đối tượng
� Reference Type - Kiểu tham chiếu: kiểu dữ liệu là lớp đối tượngliệu là lớp đối tượng
Slide 12
Value type – s ố nguyên
Name CTS Type DescriptionRange
(min:max)
byte System.Byte8-bit signed
integer0:255 (0:28-1)
ushort System.UInt1616-bit signed
0:65,535 (0:216-1)ushort System.UInt1616-bit signed
integer0:65,535 (0:216-1)
uint System.UInt3232-bit signed
integer0:4,294,967,295
(0:232-1)
ulong System.UInt6464-bit signed
integer
0:18,446,744,073,709,551,615(0:
264-1)
13
Value type – s ố nguyênName CTS Type Description Range (min:max)
sbyte System.SByte 8-bit signed
integer-128:127 (-27:27-1)
short System.Int1616-bit signed integer
-32,768:32,767 (-215:215-1)integer
int System.Int3232-bit signed integer
-2,147,483,648:2,147,483,647 (-231:231-1)
long System.Int6464-bit signed integer
-9,223,372,036,854,775,808: 9,223,372,036,854,775,807 (-263:263-1)
14
Value type – s ố thực
Name CTS Type DescriptionSignificant
Figures
Range (approxi
mate)
Float System.Single32-bit single-precision
floating- point7
±1.5 × 10-45 to ±3.4 × 1038
Double System.Double64-bit double-precision
floating- point15/16
±5.0 × 10-324
to ±1.7 ×10308
decimal System.Decimal 128-bit high precision
decimal notation 28
±1.0 × 10-28 to ±7.9 × 1028
15
Ví dụ
long x = 0x12ab;// ghi theo hexauint ui = 1234U;long l = 1234L;ulong ul = 1234UL;ulong ul = 1234UL;float f = 12.3F;decimal d = 12.30M ; //có thể viếtdecimal d = 12.30m;
Slide 16
Value type - Ki ểu Boolean & char
Name CTS Type Value
Bool System.Boolean true or false
Represents a single 16-bit (Unicode) char System.Char
Represents a single 16-bit (Unicode) character
Các ký t ự escape thông d ụng
Escape Sequence Character
\' Single quote
\" Double quote
\\ Backslash
\0 Null\0 Null
\a Alert
\b Backspace
\f Form feed
\n New line
\r Carriage return
\t Tab character
\v Vertical tab
Reference Type
� Lớp đối tượng Object (System.Object): là lớp trừu tượng, là lớp cha của tất cả các lớp. Khi định nghĩa một lớp A. Mặc nhiên A sẽ lấy Object làm lớp cha.Object làm lớp cha.
� Reference Type:� Kiểu lớp: Object, String, CHocSinh, CLopHoc, …
Namespace
� Namespace cung cấp cho cách tổ chức quan hệ giữa các lớp và các kiểu khác.
� Namespace là cách mà .NET tránh né việc các tên lớp, tên biến, tên hàm trùng tên giữa các lớp tên lớp, tên biến, tên hàm trùng tên giữa các lớp lớp.
namespace CustomerPhoneBookApp {
using System; public struct Subscriber { // Code for struct here... }
}Slide 20
Những cơ sở ngôn ng ữ C#Những cơ sở ngôn ng ữ C#
�� Tạo vùng tênTạo vùng tên(namespace)(namespace)
Slide 21
Namespace
� Từ khoá using giúp giảm việc phải gõ những namespace trước các hàm hành vi hoặc thuộc tính.VD: using Wrox.ProCSharp;VD: using Wrox.ProCSharp;
� Ta có thể gán bí danh cho namespaceCú pháp :
using alias = NamespaceName;
Slide 22
Console I/O
� Console.Write() - Viết một giá trị ra của sổ window
� Console.WriteLine() - tương tự trên nhưng sẽ tự động xuống hàng khi kết thúc lệnhtự động xuống hàng khi kết thúc lệnh
� Console.ReadLine() – đọc một chuỗi từ console
Console I/O (tt)
� Ví dụ:string s = Console.ReadLine();Console.WriteLine(s);int i = 10;int i = 10;int j = 20;Console.WriteLine("{0} plus {1} equals {2}", i, j, i + j);
Console I/O (tt)
� Ví dụ: nhập số nguyên và số thựcint n;string s = Console.ReadLine();n = int.Parse(s);double f;s = Console.ReadLine();f = double.Parse(s);
Câu lệnh điều kiện
� Câu lệnh điều kiện:� if: giống C/C++� switch: giống C/C++
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Vòng l ặp
� Vòng lặp:� do… while: giống C/C++� while: giống C/C++� for: giống C/C++� for: giống C/C++� foreach: khác C/C++
� Ví dụ foreach:foreach (int temp in arrayOfInts){
Console.WriteLine(temp);}
Các cấu trúc điều khi ển
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Các cấu trúc điều khi ển Các cấu trúc điều khi ển
Các toán t ử
Category Operator
Arithmetic + - * / %
Logical & | ^ ~ && || !
String concatenation +
Increment and decrement ++ --
Bit shifting << >>
Comparison == != < > <= >=
Assignment = += -= *= /= %= &= |= ^= <<= >>=
Các toán t ử (tt)
Category Operator
Member access (for objects and structs)
.
Indexing (for arrays and indexers) []
Cast ()
Conditional (the Ternary Operator) ?:
Object Creation new
Type information sizeof (unsafe code only) is typeof as
Overflow exception control checked unchecked
Indirection and Address * -> & (unsafe code only) []
Các toán t ử (tt)
Shortcut Operator Tương đương
x++, ++x x = x + 1
x--, --x x = x - 1 x--, --x x = x - 1
x += y x = x + y
x -= y x = x – y
x *= y x = x * y
x /= y x = x / y
Các toán t ử (tt)
Shortcut Operator Tương đương
x %= y x = x % y
x >>= y x = x >> y x >>= y x = x >> y
x <<= y x = x << y
x &= y x = x & y
x |= y x = x | y
x ^= y x = x ^ y
Phương th ức
� Khai báo phương thức (hàm)� Truyền tham số dạng in (ø)� Truyền tham số dạng out� Truyền tham số dạng ref
Khai báo ph ương th ức
[modifiers] return_type MethodName([parameters]){
// Thân phương thức}Ví dụ:Ví dụ:public static void Xuat(StrHocSinh hs){
Console.Write("Ma so: {0}. Ho ten: {1}", hs.MaSo, hs.HoTen);//Cau lenh xuat hoc sinh
}
Phương th ức dạng “in”
� Thân phương thức chỉ tham khảo giá trị của tham số không thay đổi giá trị của tham số
� Ví dụ:public static void Xuat(StrHocSinh hs){{
Console.Write("Ma so: {0}. Ho ten: {1}", hs.MaSo, hs.HoTen);//Cau lenh xuat hoc sinh
}� Gọi hàm trong hàm Main:Xuat(hs);
Phương th ức dạng “out”
� Thân phương thức cấp phát (khởi tạo) giá trị của tham số trước khi sử dụng. Ra khỏi hàm giá trị của tham số thay đổi.
� Ví dụ:public static void Nhap(out StrHocSinh hs){{
hs = new StrHocSinh();//Cau lenh nhap hoc sinh
}� Gọi trong hàm Main:Nhap(out hs);
Phương th ức dạng “ref”
� Ra khỏi hàm giá trị của tham số sẽ thay đổi � Ví dụ:public static void TinhDiemTrungBinh(ref StrHocSinh hs){{
hs.DTB = (hs.Toan+ hs.Van)/2;}� Gọi trong hàm Main:
TinhDiemTrungBinh(ref hs);
Một số phương th ức toán h ọc
� Math.Abs(biểu thức số)� Math.Sqrt(biểu thức số)� Math.Ceiling(biểu thức số)� Math.Floor(biểu thức số)� Math.Max(biểu thức số)� Math.Min(biểu thức số)� Math.Round(biểu thức số)� hằng số Math.PI và Math.E
Một số phương th ức toán h ọc
� Ví dụfloat R=12.6;float S = R*R*Math.PI;
int a,b,c,d;//Nhập 4 số a,b,c và d Console.Write(Math.Max(a,Math.Max(b,Math.Max(c,d))));
Chuyển đổi ki ểu
� Chuyển đổi kiểu chuỗi sang các kiểu dữ liệu khác
<Kiểu dữ liệu>.Parse(chuỗi)Ví dụ:Ví dụ:
string s;s ="123.45";float f = Single.Parse( s);double d = Double.Parse(s2); short i = Int16.Parse(s);int j = Int32.Parse(s);long k = Int64.Parse(s);
Chuyển đổi ki ểu
� Chuyển đổi kiểu dữ liệu số sang kiểu chuỗiNguyên tắc
<tên biến>.ToString( ) ;Ví dụVí dụint i = 231 ;float j = 34.56f ; //ngầm định là double !!!String kq;kq = " i= "+ i.ToString() + " va j = "+ j.ToString(); Console.WriteLine(kq);
Một số phương th ức của kiểu chuỗi - StringString
<biến chuỗi>.ToLower( );<biến chuỗi>.ToUpper( );<biến chuỗi>.Substring(vị trí, số ký tự);<biến chuỗi>.Length ; //không có ( và ) <biến chuỗi>[ vị trí ]<biến chuỗi>[ vị trí ]
� Ví dụstring S = “hello woRld”;string u = S.ToUpper();char c = S[1]; // c = ‘e’int l = S.Substring(0,4).Length ;//thay vì ghi (S.Substring(0,4)).Length
Một số phương th ức của kiểu chuỗi - StringString
� IndexOf(), IndexOfAny(), LastIndexOf(), LastIndexOfAny(): tìm kiếm chuỗi ký tự, hoặc một phần chuỗi ký tự trong một xâu cho trước.
� Replace(): thay thế một mẫu trong xâu bởi một chuỗi ký tự khác.tự khác.
� Split(): cắt một xâu thành các xâu con dựa theo ký tự phân cách cho trước.
� Trim(), TrimEnd(), TrimStart(): xoá các ký tự trắng ở đầu, cuối xâu.
� Insert(), Remove(): chèn vào, xoá đi một xâu con trong một xâu cho trước.
� StartsWith(), EndsWith(): kiểm tra xem xâu có bắt đầu, kết thúc bởi một xâu khác.
Thao kh ảo và sử dụng thêm
� Lớp System.Int32, System.Single, System.String, System.Character, System.Boolean
Mảng
� Mảng 1 chiều� Mảng 2 chiều� Mảng nhiều chiều� Mảng Jagged Array
Mảng 1 chi ều
� Cú pháp:type[ ] array-name; � Ví dụ:int[] integers; // mảng kiểu số nguyênintegers = new int[32]; integers[0] = 35;// phần tử đầu tiên có giá trị 35integers[31] = 432;// phần tử 32 có giá trị 432string[] myArray = {"first element", "second
element", "third element"};
Làm vi ệc với mảng 1 chi ều
� Lấy kích thước mảng:int arrayLength = myIntegers.Length;� Sắp xếp mảng số nguyên:Array.Sort(myIntegers);� Đảo ngược mảng:Array.Reverse(myArray);� Duyệt mảng:
Mảng 2 chi ều
� Cú pháp:type[,] array-name; � Ví dụ:int[,] myRectArray = new int[2,3]; int[,] myRectArray = new int[,]{
{1,2},{3,4},{5,6},{7,8}}; //mảng 4 hàng 2 cộtstring[,] beatleName = { {"Lennon","John"},
{"McCartney","Paul"}, {"Harrison","George"}, {"Starkey","Richard"} };
Làm vi ệc với mảng 2 chi ều
� Duyệt mảng:double [, ] matrix = new double[10, 10];for (int i = 0; i < 10; i++){
for (int j=0; j < 10; j++)matrix[i, j] = 4;
}
Mảng nhi ều chi ều
� Ví dụ:string[,,] my3DArray;
Mảng jagged - M ảng răng cưa
� Một loại thứ 2 của mảng nhiều chiều trong C# là Jagged array.
� Là mảng mà số phần tử trong mỗi chiều có thể khác nhauthể khác nhau
� Ví dụ:int[][] a = new int[3][];a[0] = new int[4];a[1] = new int[3];a[2] = new int[1];
Làm vi ệc với Jagged Array
� Khởi tạo ma trận n*m Jagged Array:int[][] a = new int[n][];for(int i = 0; i < n; i++){{
a[i] = new int[m];for (int j = 0; j < m; j++){
a[i][j] = i*n +j;}
}
Một số lưu ý khi s ử dụng mảng
- Sử dụng thuộc tính Length của mảng thay vì phải nắm số phần tử trong mảng
- Cấu trúc lặp foreach hữu hiệu hơn là dùng for !!!for !!!
- Lấy số chiều 1 mảng : sử dụng thuộc tính rank
Struct
� Struct là kiểu Value Type không phải là Reference Type � có thể không cần sử dụng từ khóa new.
� Trong Struct có thể định nghĩa các phương � Trong Struct có thể định nghĩa các phương thức (giống Class).
� Trong Struct, trình biên dịch luôn luôn cung cấp một constructor không tham số mặc định, và không cho phép thay thế.
� Struct không hỗ trợ thừa kế.
Structstruct StrHocSinh
{public int MaSo;public string HoTen ;public double Toan ;public double Van;public double Van;public double DTB;public StrHocSinh(int ms, string ht, double t, double v){
MaSo = ms;HoTen = ht;Toan = t;Van = v;DTB = (t+ v)/2;
}}
Cấu TrúcCấu Trúc
Cách dùng :
Location hpt
= new Location(200,300);
Slide 68
= new Location(200,300);
Console.WriteLine(“KQ = {0}”, hpt);
OOP in C#
Lương Trần Hy HiếnLương Trần Hy Hiế[email protected]
http://fit.hcmup.edu.vn/~hienlth
Slide 69
Lớp và đối tượngLớp và đối tượng
�� Khai báo, tạo dựng và sử dụng lớp Khai báo, tạo dựng và sử dụng lớp
Slide 70
Thuộc tính truy c ập
Thuộc tính Gi ới hạn truy c ậpPublic Không hạn chế
Private Chỉ trong lớp (mặc định)
Protected Trong lớp và lớp conProtected Trong lớp và lớp con
Internal Trong chương trình
Protected internal Trong chương trình và lớp con
Slide 71
Lớp và đối tượngLớp và đối tượng
�� Phương thức thiết lập (Constructor)Phương thức thiết lập (Constructor)�� Phương thức thiết lập sao chépPhương thức thiết lập sao chép�� Phương thức huỷPhương thức huỷ�� Sử dụng using Sử dụng using (hàm huỷ tự đông (hàm huỷ tự đông gọi trong thời gian gọi trong thời gian sớm nhất)sớm nhất)
Slide 72
Phương th ức khởi tạo
� Hàm tạo mặc định: giống C++� Hàm tạo có tham s ố: tương tự C++ nhưng không có
tham s ố mặc địnhpublic class MyClass{{
public MyClass() // zero-parameter constructor {
// construction code }public MyClass(int number) // another overload{
// construction code }
} Slide 73
Phương th ức khởi tạo
� C# không cho phép khởi tạo sao chép� Chú ý với hàm tạo có tham số: hãy luôn luôn
có hàm tạo mặc định để tránh lỗi biên dịch.
Slide 74
Phương th ức hủy
� C# cung cấp cơ chế thu dọn (garbage collection) và do vậy không cần phải khai báo tường minh các phương thức hủy.
� Phương thức Finalize sẽ được gọi bởi cơ� Phương thức Finalize sẽ được gọi bởi cơchế thu dọn khi đối tượng bị hủy.
� Phương thức kết thúc chỉ giải phóng các tài nguyên mà đối tượng nắm giữ, và không tham chiếu đến các đối tượng khác.
Slide 75
Phương th ức hủy (tt)
~Class1(){
// Thực hiện một số công việc}Class1.Finalize(){
// Thực hiện một số công việcbase.Finalize();
} Slide 76
Hàm hủy
class MyClass : IDisposable{
public void Dispose(){{
// implementation}
}
Slide 77
Hàm hủy (tt)
� Lớp sẽ thực thi giao diện System.IDisposable, tức là thực thi phương thức IDisposable.Dispose().
� Không biết trước được khi nào một � Không biết trước được khi nào một Destructor đượcgọi.
� Có thể chủ động gọi thu dọn rác bằng cách gọi phương thức System.GC.Collect().
� System.GC là một lớp cơ sở .NET mô tả bộ thu gom rác và phương thức Collect() dùng để gọi bộ thu gom rác. Slide 78
Con tr ỏ this
� Từ khóa this dùng để tham chiếu đến thể hiện hiện hành của một đối tượngpublic void SetYear( int Nam){ {
this.Nam = Nam;
}
� Thamchiếu this này được xem là con trỏ ẩn đến tất các phương thức không có thuộc tính tĩnh trong một lớp.
Slide 79
Thành viên static
� Thành viên tĩnh được xem như một phần của lớp.
� Có thể truy cập đến thành viên tĩnh của mộtlớp thông qua tên lớplớp thông qua tên lớp
� C# không cho phép truy cập đến các phươngthức tĩnh và các biến thành viên tĩnh thông qua một thể hiện.
� Không có friend� Phương thức tĩnh hoạt động ít nhiều giống
như phương thức toàn cục Slide 80
Tham chi ếuTham chi ếu
�� Tham chiếuTham chiếu�� Trong lớp TimeTrong lớp Time
�� Sử dụngSử dụng
Slide 81
Thuộc tính (Property)Thuộc tính (Property)
�� Đóng gói dữ liệu với PropertyĐóng gói dữ liệu với Property�� VD: Lớp VD: Lớp người có chuỗi người có chuỗi m_sHotenm_sHoten�� Cài đặt Property Cài đặt Property HoTen:HoTen:publicpublic stringstring HoTenHoTenpublicpublic stringstring HoTenHoTen{{
getget { { returnreturn m_sHoTen; }m_sHoTen; }setset { m_sHoTen = { m_sHoTen = valuevalue; }; }
}}
�� Sử dụng Sử dụng Property:Property:Nguoi A = new Nguoi();Nguoi A = new Nguoi();A.A.HoTenHoTen = “Lương Trần Hy Hiến= “Lương Trần Hy Hiến”; ”; //đặt giá trị//đặt giá trịstring tentoi = A.string tentoi = A.HoTenHoTen ;; //lấy giá trị//lấy giá trị Slide 82
Thuộc tính (Property)Thuộc tính (Property)
� Nếu câu lệnh Property chỉ có đoạn lệnh get� thuộc tính chỉ đọc (Read Only)
� Nếu câu lệnh Property chỉ có đoạn lệnh set� thuộc tính chỉ ghi (Write Only)� thuộc tính chỉ ghi (Write Only)
Slide 83
Hướng đối tượng
public class BankAccount{protected string ID;protected string Owner;protected decimal _Balance;public BankAccount(string ID,
public void Withdraw(decimal Amount) {
_Balance-=Amount;}public decimal Balance {public BankAccount(string ID,
string Owner) {this.ID = ID;this.Owner = Owner;this._Balance = 0;
}public void Deposit(decimal Amount) {
_Balance+=Amount;}
public decimal Balance {get {
return _Balance;}
}}
Slide 84
Fields
Thuộc tính ch ỉ đọc
Hướng đối tượng
class Program{
static void Main(string[] args){
BankAccount acc= new Account(“1606201007676", “Hy Hien");BankAccount acc= new Account(“1606201007676", “Hy Hien");acc.Deposit(1000);acc.Withdraw(100);Console.WriteLine("Balance: {0}", acc.Balance);//myAcct.Balance=10000;Console.ReadLine();
}
}85
Chồng hàm (overload)
� Không chấp nhận hai phương thức chỉ khác nhau về kiểu trả về.
� Không chấp nhận hai phương thức chỉ khác nhau về đặc tính của một thông số đang nhau về đặc tính của một thông số đang được khai báo như ref hay out.
Slide 86
Sự thừa kế
� 1 class chỉ có thể kế thừa từ 1 class cơ sở� 1 class có thể kế thừa từ nhiều Interface� Từ khóa sealed được dùng trong trường hợp
khai báo class mà không cho phép class khai báo class mà không cho phép class khác kế thừa.
Slide 87
Đa hình
� Để tạo một phương thức hỗ tính đa hình: � khai báo khóa virtual trong phương thức của lớp
cơ sở
� Để định nghĩa lại các hàm virtual, hàm tương � Để định nghĩa lại các hàm virtual, hàm tương ứng lớp dẫn xuất phải có từ khóa Override
Slide 88
Phương th ức Override
class MyBaseClass{
public virtual string VirtualMethod(){
return "This method is virtual and defined in MyBaseClass";return "This method is virtual and defined in MyBaseClass";}
}class MyDerivedClass : MyBaseClass{
public override string VirtualMethod(){
return "This method is an override defined in MyDerivedClass";}
}Slide 89
Gọi các hàm ở lớp cơ sở� Cú pháp: base.<methodname> ()class CustomerAccount{
public virtual decimal CalculatePrice(){
// implementation// implementation}
} class GoldAccount : CustomerAccount{
public override decimal CalculatePrice(){
return base.CalculatePrice() * 0.9M;}
} Slide 90
Lớp cơ sở trừu tượng
abstract class Building{
public abstract decimal CalculateHeatingCost();// abstract method
} }
� Một lớp abstract không được thể hiện và một phương thức abstract không được thực thi mà phải được overriden trong bất kỳ lớp thừa hưởng không abstract nào
� Nếu một lớp có phương thức abstract thì nó cũng là lớp abstract
� Một phương thức abstract sẽ tự động được khai báo virtual. Slide 91
Abstract class
public abstract class BankAccount {…public abstract bool IsSufficientFund(decimal Amount);public abstract void AddInterest();public abstract void AddInterest();…
}
� Không thể new một abstract class� Chỉ có lớp abstract mới có thể chứa abstract
method
Slide 92
Lớp Object
Phương th ức Chức năng
Equal() So sánh bằng nhau giữa 2 đồi tượng
GetHashCode() Cho phép những đối tượng cung cấp
Là lớp cơ bản của .NET, mặc định mọi lớp nếu không nói gì thì hiểu là k ế thừa từ Object
GetHashCode() Cho phép những đối tượng cung cấp riêng những hàm băm cho sử dụng tập hợp
GetType() Cung cấp kiểu của đối tượng
ToString() Cung cấp chuỗi thể hiện của đối tượng
Finalize() Dọn dẹp các tài nguyên
MemberwiseClone() Tạo một bản sao từ đối tượng Slide 93
Giao di ện - Interface
� Một “interface” được định nghĩa như một“hợp đồng”, do đó, nếu một class hoặc mộtstruct cài đặt 1 interface thì phải cài đặt tất cảcác tính năng được khai báo trong interfacecác tính năng được khai báo trong interfaceđó.
� Có thể hiểu interface như là một lớp trừutượng hoàn toàn (tất cả các phương thứcđều trừu tượng). Khi một class cài đặt 1interface thì coi như nó được kế thừa từ lớptrừu tượng nói trên.
Slide 94
Giao di ệnGiao di ện
�� Tạo một giao diện Tạo một giao diện
�� Mở rộng giao diện & Kết hợp giao diệnMở rộng giao diện & Kết hợp giao diện
Slide 95
Giao di ệnGiao di ện
�� Cách sử dụng :Cách sử dụng :
�� Toán tử Toán tử isis: kiểm tra xem đối tượng có được : kiểm tra xem đối tượng có được �� Toán tử Toán tử isis: kiểm tra xem đối tượng có được : kiểm tra xem đối tượng có được hỗ trợ giao diện hay không (VD doc is hỗ trợ giao diện hay không (VD doc is IStorable)IStorable)
�� Toán tử Toán tử asas: Kiểm tra và gán : Kiểm tra và gán
Slide 96
Một Một số giao di ện chu ẩn sausố giao di ện chu ẩn sau
Slide 97
Xử lý lỗi & exception (ngo ại lệ)Xử lý lỗi & exception (ngo ại lệ)
�� Exception chứa các thông tin về sự cố bất Exception chứa các thông tin về sự cố bất thường của chương trìnhthường của chương trình
�� Phân biệt Phân biệt bugbug, , errorerror và và exceptionexception�� Chương trình dù đã không còn bug hay error Chương trình dù đã không còn bug hay error �� Chương trình dù đã không còn bug hay error Chương trình dù đã không còn bug hay error
vẫn có thể cho ra các exception (truy cập, bộ vẫn có thể cho ra các exception (truy cập, bộ nhớ)nhớ)
�� Có thể dùng các đối tượng exception có sẵn, Có thể dùng các đối tượng exception có sẵn, tự tạo exception, hay bắt exception trong tự tạo exception, hay bắt exception trong exception (trong trường hợp sửa lỗi)exception (trong trường hợp sửa lỗi)
Slide 98
Xử lý lỗi & exception (ngo ại lệ)Xử lý lỗi & exception (ngo ại lệ)
�� Cấu trúc xử lý lỗiCấu trúc xử lý lỗi
Slide 99
Xử lý lỗiXử lý lỗi
�� Chương trình nào cũng có khả năng gặp phải Chương trình nào cũng có khả năng gặp phải các tình huống không mong muốncác tình huống không mong muốn�� người dùng nhập dữ liệu không hợp lệngười dùng nhập dữ liệu không hợp lệ�� đĩa cứng bị đầyđĩa cứng bị đầy�� đĩa cứng bị đầyđĩa cứng bị đầy�� file cầnmở bị khóafile cầnmở bị khóa�� đối số cho hàm không hợp lệđối số cho hàm không hợp lệ
�� Xử lý như thế nào?Xử lý như thế nào?�� Một chương trình không quan trọng có thể dừng lạiMột chương trình không quan trọng có thể dừng lại�� Chương trình điều khiển không lưu? điều khiển Chương trình điều khiển không lưu? điều khiển
máy bay?máy bay? Slide 100
Xử lý lỗi truy ền thốngXử lý lỗi truy ền thống
� Xử lý lỗi truyền thống thường là mỗi hàm lại thông báo trạng thái thành công/thất bại qua một mã lỗi� Biến toàn cục (chẳng hạn errno)� Biến toàn cục (chẳng hạn errno)� Giá trị trả về
� int remove ( const char * filename );
� Thamsố phụ là tham chiếu� double MyDivide(double numerator, � double denominator, int& status);
Slide 101
Exception (ngo ại lệ)Exception (ngo ại lệ)
� Exception – ngoại lệ là cơ chế thông báo và xử lý lỗi giảiquyết được các vấn đề kể trên
� Tách đượcphần xử lý lỗi ra khỏi phần thuật toán chính� Cho phép 1 hàm thông báo về nhiều loại ngoại lệ
� Không phải hàm nào cũng phảixử lý lỗi nếu có một số hàm gọi thành chuỗi, ngoại lệ chỉ lần được xử lý tại một hàm là đủ
� Không thể bỏ qua ngoại lệ,nếu không, chương trình sẽ kết thúc
� Tóm lại, cơ chế ngoại lệ mềm dẻo hơn kiểu xử lý lỗitruyền thống
Slide 102
Xử lý ngo ại lệXử lý ngo ại lệ
� C# cho phép xử lý những lỗi và các điều kiện không bìnhthường với những ngo ại lệ.
� Ngoại lệ là một đối tượng đóng gói những thông tin về sự cố của một chương trình không bình thườngKhi một chương trình gặp một tình huống ngoại lệ�� Khi một chương trình gặp một tình huống ngoại lệ�một ngoại lệ. Khi một ngoại lệ được tạo ra, việc thực thi của các chức năng hiện hành sẽ bị treo cho đến khi nào việc xử lý ngoại lệ tương ứng được tìm thấy
� Một trình xử lý ngoại lệ là một khối lệnh chương trình được thiết kế xử lý các ngoại lệ mà chương trình phát sinh
Slide 103
Xử lý ngo ại lệ
� Nếu một ngoại lệ được bắt và được xử lý:� chương trình có thể sửa chữa được vấn đề và
tiếp tục thực hiện hoạt động� in ra những thông điệp có ý nghĩa in ra những � in ra những thông điệp có ý nghĩa in ra những
thông điệp có ý nghĩa
Slide 104
Exception
Slide 105
Phát bi ểu throw
� Phát biểu throw dùng để phát ra tín hiệu củasự cố bất thường trong khi chương trình thựcthi với cú pháp:
throw [expression];throw [expression];
Slide 106
Phát bi ểu throw (tt)
� Ví dụ 01:using System;public class ThrowTest{
public static void Main() public static void Main() {
string s = null;if (s == null) {
throw(new ArgumentNullException());}Console.Write("The string s is null"); // not executed
}}
Slide 107
Ví dụ 02 - Throw
Slide 108
Ví dụ 02 – Throw (tt)
Slide 109
Phát bi ểu try … catch
� Trong C#, một trình xử lý ngoại lệ hay một đoạn chương trình xử lý các ngoại lệ được gọi là một khối catch và được ra với từ khóa catch..catch..
� Vídụ: câu lệnh throw được thực thi bên trong khối try, và một khối catch được sử dụng để công bố rằng một lỗi đã được xử lý
Slide 110
Ví dụ:class Test
{static void Main(string[] args){
Test t = new Test();t.TestFunc();t.TestFunc();
}public double DoDivide(double a, double b){
if (b == 0)throw new System.DivideByZeroException();
if (a == 0)throw new System.ArithmeticException();
return a / b;}
//Còn ti ếp}
Slide 111
Ví dụ (tt)public void TestFunc() {
try {double a = 5;double b = 0;Console.WriteLine("{0} / {1} = {2}", a, b, DoDivide (a, b));
}}catch (System.DivideByZeroException) {
Console.WriteLine("DivideByZeroException caught!");}catch (System.ArithmeticException) {
Console.WriteLine("ArithmeticException caught!");}catch{
Console.WriteLine("Unknown exception caught");}
}Slide 112
Câu lệnh finally
� Đoạn chương trình bên trong khối finally được đảm bảo thực thi mà không quan tâm đến việc khi nào thì một ngoại lệ được phát sinhsinhtry
try-block
catchcatch-block
finallyfinally-block
Slide 113
Câu lệnh finally (tt)
1. Dòng thực thi bước vào khối try.2. Nếu không có lỗi xuất hiện,
� tiến hành một cách bình thường xuyên suốt khối try, và khi đến cuối khối try, dòng thực thi sẽ nhảy đến và khi đến cuối khối try, dòng thực thi sẽ nhảy đến khối finally (bước 5),
� nếu một lỗi xuất hiện trong khối try, dòng thực thi sẽ nhảy đến khối catch (bước tiếp theo)
3. Trạng thái lỗi được xử lí trong khối catch4. vào cuối của khối catch, việc thực thi được
chuyển một cách tự động đến khối finally5. khối finally được thực thi Slide 114
Xử lý lỗi & exception (ngo ại lệ)Xử lý lỗi & exception (ngo ại lệ)
�� Đối tượng Exception :Đối tượng Exception :
�� Tạo ngoại lệ :Tạo ngoại lệ :
Slide 115
Tham kh ảo
� Slide bài giảng C#, ĐH KHTN TpHCM� Hồ Hoàn Kiếm Slides� C# Slides, Aptech
Slide 116
Windows Form
Lương Trần Hy HiếnLương Trần Hy Hiế[email protected]
Tạo WinForm App t ừ VS. 2005
Hỗ trợ WYSISYG cho GUI designCơ chế xử lý sự kiện code behind
Nhanh chóng & d ễ dàng t ạo UD Windows Form
Slide 2
Tạo WinForm App t ừ VS. 2005
� Tạo project : New� Project
►Tạo project : Chọn ngôn ngữ C# + Window Application + Name + Location + Solution Name
Slide 3
Window Form
Slide 4
Window Form
� Namespace: System.Windows.Forms
Slide 5
Window Form� Ở chế độ Design Form ( ): ToolBox cho ta
chọn đưa vào Form tất cả các control mong muốn� Solution Explorer: cho biết cấu trúc một solution � Properties: cho biết thuộc tính của từng control
1 2
3
4 � Properties: cho biết thuộc tính của từng control� Error List: hiến thị các danh sách lỗi khi biên dịch� F5: Start Debugging; Ctrl + F5: Start Without
Debugging
4
Slide 6
12
3
45
Slide 7
Properties
� Hiển thị các thuộc tính của control và các Events tương ứng (nhấp đúp chọn event )
Slide 8
Form
� Thêm mới mộtWindows Form
Slide 9
Thêm control v ào form
� Kéo thả control vào form
Slide 10
Code của phần design
� Phần code thiết kế Form1 được tạo tự độngForm1.Designer.cs
Khai báo các đối tượng control trên Form1
Chứa code khởi tạo control
Slide 11
Code của phần design
Tạo đối tượng
InitializeComponent
Lần lượt khai báo các thuộc tính cho các control
Slide 12
Code của phần design
InitializeComponent
Đưa các control vào danh sách control của Form1
Slide 13
Sửa thuộc t ính của control
Đổi tên thành Đổi tên thành txtNum1
Thay đổi các giá trị qua cửa sổ properties -> VS tự cập nhật code
Slide 14
Phần xử lý
� Khi click vào Add -> cộng 2 giá trị và xuất kết quả� Thực hiện
� Button Add cung cấp sự kiện click� Form sẽ được cảnh báo khi Add được click
Form sẽ lấy dữ liệu từ 2 textbox và cộng -> kết quả� Form sẽ lấy dữ liệu từ 2 textbox và cộng -> kết quả
� Cơ chế event� Button đưa ra sự kiện click: đối tượng publish� Form quan tâm đến sự kiện click của button, Form có sẽ phần xử
lý ngay khi button click.� Phần xử lý của form gọi là Event Handler� Form đóng vai trò là lớp subscribe
Slide 15
Khai b áo event handler
� Kích đúp vào button Add trên màn hình thiết kế cho phép tạo event handler cho sự kiện này.
event
DClickCửa sổ quản lý event của BtnAdd
Slide 16
Khai b áo event handler
Event handler cho button Add
Cùng signature method với System.EventHandlerSlide 17
Khai b áo event handlerInitializeComponent
Sự kiện click Trình xử lý được gọi khi event xảy ra
Delegate chuẩn cho event handler
Slide 18
Viết phần xử lý
� Phần xử lý của Form1 khi button click� Lấy giá trị của 2 textbox, cộng kết quả và xuất ra
MeesageBox
Slide 19
Tổng quan controls
� Control là một thành phần cơ bản trên form� Có các thành phần
� Thuộc tínhPhương thức� Phương thức
� Sự kiện
� Tất cả các control chứa trong namespace: System.Windows.Forms
Slide 20
Tổng quan controls
� Một số thuộc tính của control� Text: mô tả text xuất hiện trên control� Focus: phương thức chuyển focus vào control� TabIndex: thứ tự của control nhận focus� TabIndex: thứ tự của control nhận focus
� Mặc định được VS.NET thiết lập
� Enable: thiết lập trạng thái truy cập của control� Visible: ẩn control trên form, có thể dùng phương thức
Hide� Anchor:
� Neo giữ control ở vị trí xác định� Cho phép control di chuyển theo vị trí
� Size: xác nhận kích thước của controlSlide 21
Thuộc t ính controls
Common Properties DescriptionBackColor Màu nền của control
BackgroundImage Ảnh n ền của control
ForeColor Màu hi ển th ị text trên form
Enabled Xác định khi control tr ạng thái enableEnabled Xác định khi control tr ạng thái enable
Focused Xác định khi control nh ận focus
Font Font hi ển th ị text trên control
TabIndex Thứ tự tab của control
TabStop Nếu true, user có th ể sử dụng tab để select control
Text Text hi ển th ị trên form
TextAlign Canh l ề text trên control
Visible Xác định hi ển th ị control
Form Properties
Tên thuộc tính Ý nghĩa
BackColor/ForeColor Màu nền / Màu chữ
BackGroundImage Ảnh nền
AcceptButton Nút được chọn kích hoạt sự kiện click khi người dùng click Enterkhi người dùng click Enter
CancelButton Nút được chọn kích hoạt sự kiện click khi người dùng click Esc
Controls Danh sách các control con của nó. Cho phép người dùng thêm hoặc xóa động controls
FormBorderStyle Chọn loại window form
Opacity Độ mờ của window form Slide 23
Form Properties
Tên thuộc tính Ý nghĩa
AutoSize Cho phép kéo dãn form
CauseValidation Cho phép các control con của nó có thể phát sinh sự kiện Validate. Dùng để kiểm tra dữ liệu hợp lệ. tra dữ liệu hợp lệ.
TopMost Cho phép Form hiện trên tất cả các form khác
WindowState {Normal, Minimized, Maximized}. Thể hiện của Form khi xuất hiện
Cursor Thiết lập con trỏ chuột
Icon Thiết lập Icon của form
Form Method
Tên hàm Ý nghĩa
Show() Sau khi dialog hiện lên, người dùng có thể chọn focus vào control khác
ShowDialog() Sau khi dialog hiện lên người dùng không thể focus vào các control khác.không thể focus vào các control khác.
Kiểu dữ liệu trả về: DialogResult.
Close() Đóng Dialog
this.DialogResult = DialogResult.OK
Đóng dialog và trả về kết quả tương ứng OK
This.DialogResult = DialogResult.Cancel
Đóng dialog và trả về kết quả tương ứng Cancel.
Form EventTên hàm Ý nghĩa
Load() Sự kiện được kích hoạt khi Form đã load xong các control.
Sự kiện này được bắt khi người dùng muốn khởi tạo biến hoặc giá trị trong muốn khởi tạo biến hoặc giá trị trong Form
Paint() Sự kiện này được gọi khi Form thực hiện vẽ lại. (Di chuyển chuột, phóng to, thu nhỏ,..) (Sẽ trình bày chi tiết trong GDI +)
KeyPress, KeyDown,.. Các sự kiện về phím
MouseHover, MouseDown, MouseLeave
Các sự kiện chuột
Slide 26
Form Event
� Click Click� DoubleClick� KeyDown� MouseHover� Paint� Resize� ……
Slide 27
Control Layout - AnchorNone Sizable
FormBorderStyle
FixedSingleFixed3D FixedDialog
FormBorderStyle
Slide 28
Control Layout - Anchor� Khi FormBorderStyle = Sizable, form cho phép thay đổi
kích thước khi Runtime� Sự bố trí của control cũng thay đổi!
� Sử dụng thuộc tính Anchor� Cho phép control phản ứng lại với thao tác resize của form� Cho phép control phản ứng lại với thao tác resize của form
� Control có thể thay đổi vị trí tương ứng với việc resize của form� Control cố định không thay đổi theo việc resize của form
� Các trạng thái neo� Left: cố định theo biên trái� Right: cố định theo biên phải� Top: cố định theo biên trên� Bottom: cố định theo biên dưới
Slide 29
Control Layout - Anchor
Button được neo biên tráiVị trí tương đối với biên trái không đổi
Button tự do Di chuyển tương ứng theo kích thước mới
Slide 30
Control Layout - Anchor
� Thiết lập Anchor cho control
Chọn các Chọn các biên để neo
Biên được chọn neo,màu đậm
Slide 31
Control Layout - Anchor
Neo theo bốn phíabốn phía
Slide 32
Control Layout - Docking
Left Right
Bottom
None
Fill
Top
Slide 33
Control Layout - Docking
Dock = None Dock = Top
TextBox
Dock = FillTextBox.Multiline = True Dock = Bottom
Slide 34
Các lớp cơ sở� System.Windows.Forms.Control - chứa chức năng cơ bản của thao tác xử
lý bàn phím và nhập từ chuột và xử lý tin nhắn window. � System.Windows.Forms.ButtonBase - Lớp này hỗ trợ chức năng cơ bản
của một nút� System.Windows.Forms.TextBoxBase - cung cấp chức năng và thuộc tính
thông thuờng cho các lớp thừa hưởng. Cả hai lớp TextBox và RichTextBox sử dụng chức năng cung cấp bởi TextBoxBase.sử dụng chức năng cung cấp bởi TextBoxBase.
� System.Windows.Forms.ScrollableControl - quản lý sự phát sinh và hiển thị của các thanh cuộn đến người dùng để truy cập đến gốc của một hiển thị.
� System.Windows.Forms.ContainerControl - Lớp này quản lý chức năng yêu cầu cho một control để hành động
� System.Windows.Forms.Panel - có thể chứa các control thêm vào, nhưng khác với lớp ContainerControl, nó phân loại các control một cách đơn giản.
� System.Windows.Forms.Form -Tạo bất kỳ loại cửa sổ nào: standard, toolbox, borderless, modal dialog boxes và multi-document interfaces.
� System.Windows.Forms.UserControl - tạo một custom control đến việc được dùng trong một nơi phức tạp trong một ứng dụng hay tổ chức Slide 35
Standard Control
� Một đối tượng control kế thừa trực tiếp / gián tiếp từ System.Windows.Forms.Control
� Có các dạng control sau:� Điều khiển thông thường:� Điều khiển thông thường:
� Label, TextBox, Combobox, ListBox, CheckBox, RadioButton, Button
� Điều khiển đặc biệt :� Tooltip, HelpProvider, ErrorProvider, ProgressBar, ListView,
TreeView, DateTimePicker, MonthlyCalender
� Điều khiển Menu� Điều khiển container :
� GroupBox, TabControl, Panel v.v…. Slide 36
Standard Control
� Buttons : Button, CheckBox, RadioButton� Time and Date : DateTimePicker, MonthCalender� Labels and Pictures : GroupBox, Lablel, LinkLabel,
PictureBox� Text editing : TextBox, RichTextbox, NumericUpDown,
DomainUpDown� Lists and Data : ListBox, ComboBox, ListView,
TreeView, PropertyGrid, DataGrid� Position and ProgressBar : HScrollBar , VScrollBar,
TrackBar, ProgressBar� Layout : Tab Control, Splitter, StatusBar, ToolBar
Slide 37
Label, Textbox, Button
Label
� Trình bày, chú giải tiêu đề� Có hai loại Label và LinkLabel
Thuộc tính th ường dùng
Font
Text
TextAlign
ForeColorForeColor
Visible
Font hi ển th ị của text
Nội dung text hi ển th ị
Canh l ề text
Màu text
Trạng thái hi ển th ị
Slide 39
TextBox
� Cho phép nhập dữ liệu� Hai dạng là TextBox và MaskedTextBox� Các hình thức nhập của TextBox là :
PasswordChar và MultilinePasswordChar và Multiline� MaskedTextBox: có nhiều dạng có sẵn
Numeric, Phone Number, Date, Time v.v…� Lấy nội dung nhập : [ObjectName].Text
Slide 40
Textbox
Slide 41
Các thu ộc tính TextBoxTên thu ộc tính Ý ngh ĩa
Text Lấy hoặc thiết lập giá trị của textbox. Đây là thuộc tính thể hiện dữ liệu mà tất cả các control đều có.
TextLength Chiều dài tối đa của TextBoxTextLength Chiều dài tối đa của TextBox
TextAlign Canh lề chữ trong TextBox
Multiline Cho phép TextBox có thể nhiều hàng
PasswordChar Kí tự hiện trong textbox dạng **
SelectedText Chọn đoạn text được chọn
SelectionStart Lấy vị trí của đoạn text được chọn
ReadOnly Chỉ đọc, không thể thay đổi nội dung Text Slide 42
Các sự kiện TextBox
Tên thu ộc tính Ý ngh ĩaTextChanged Sự kiện phát sinh khi người dùng
thay đổi nội dung text.
Validating Khi mất focus thì sự kiện này phát Validating Khi mất focus thì sự kiện này phát sinh để kiểm tra dữ liệu hợp lệ.Tham số:
object sender, CancelEventArgs e
KeyPress Bắt sự kiện gõ phímTham số:object sender, KeyPressEventArgs e
Slide 43
Button
� Dùng chuột nhấn để thao tác� Có thể show Icon trên button
ButtonThuộc tính thường dùng
Text Chuỗi hiển thị trên bề mặt button
Event thường dùng
Click Kích hoạt khi user kích vào button, khai báo mặc định khi người lập trình kích đúp vào button trong màn hình Design View của Form. Slide 44
Demo Label, TextBox, Button
� Demo TextBox
Chuyển thành chữ hoaDouble click vào textbox để tạo event handler cho event
TextChanged
Slide 45
Demo Label, TextBox, Button
� Chỉ cho nhập số
Sự kiện KeyPress
Sự kiện phát sinh khi textbox nhận focus và user nhấn 1 phím
Slide 46
MaskedTextBox
Slide 47
MaskEditBox - Thi ết lập giá tr ị Mask
Thành ph ần mask Ý ngh ĩa0 Số. Yêu cầu bắt buộc phải nhập
số từ 0-9
9 Số hoặc khoảng trắng (Optional)9 Số hoặc khoảng trắng (Optional)
# Số hoặc khoảng trắng (Optional). Có thể nhập dấu + hoặc -
L Kí tự [a..z] hoặc [A..Z] (Bắt buộc)
? Kí tự [a..z] hoặc [A..Z] (Không bắt buộc)
, Đơn vị phần ngàn (1,234)
. Đơn vị phần lẻ (0.32) Slide 48
Combobox, ListBox� Liệt kê danh sách phần tử cho phép người dùng chọn một
hay nhiều� Có các thuộc tính chung quan trọng sau :
� DataSource: chọn tập dữ liệu điền vào điều khiển (VD string [] , ArrayList là tập dữ liệu đưa vào)string [] , ArrayList là tập dữ liệu đưa vào)
� SelectedText, SelectValue, SelectedItem, SelectedIndexđể lấy giá trị hay đối tượng chọn
� Thuộc tính riêng:� Combobox: DropDownStyle ( DropDown: cho phép
nhập thêm chuỗi ; DropDownList : chỉ cho phép chọn chuỗi đã có )
� ListBox: SelectionMode (True: cho phép chọn nhiều )Slide 49
Combobox
� Combobox: chọn Items để thêm dữ liệu
Slide 50
ComboBox
� Kết hợp TextBox với một danh sách dạng drop down
� Cho phép user kích chọn item trong danh sách drop downsách drop down
ComboBoxComboBox
Items
DropDownStyle
Sorted
TextAutoCompleteMode
MaxDropDownItems
DropDownHeightSlide 51
ComboBox
�� DropDownStyleDropDownStyle
Slide 52
ComboBox
Bổ sung item trong màn hình design
view Slide 53
ComboBox
Mỗi khi kích chọn một item ⇒ hiển thị
item được chọn trên MessageBox
Slide 54
ComboBox
� Tính năng AutoCompleteAutoComplete Gõ “N”AutoComplete
AutoCompleteMode
AutoCompleteSource
Slide 55
Listbox
Slide 56
ListBox
�� Method & EventMethod & Event
ClearSelected
MethodMethod
ListBoxListBox
ClearSelected
FindString
GetSelected
SetSelected
SelectedIndexChanged
SelectedValueChanged
EventEvent
Slide 57
ListBox
� Thuộc tính ItemsItems cho phép thêm item vào ListBox
Danh sách item Cho phép thêm item trong màn hình thiết
kế form
Slide 58
ListBox
� ListBox hiển thị dạng Multi Column
Hiển thị nhiều cột
Slide 59
ListBox
� Demo ListBoxListBox
Kiểm tra xem chuỗi nhập có trong list box?- Nếu có: select item đó- Ngược lại: thêm chuỗi mới vào list box
Slide 60
ListBox
� Sự kiện SelectedIndexChanged
Mỗi khi kích chọn vào item trong listbox ⇒ sẽ xóa item được chọn tương ứng
SelectedIndexChangedSelectedIndexChanged
được chọn tương ứng
Slide 61
CheckBox, RadioButton,
CheckListBox
Điều khi ển thông th ường
� CheckBox, RadioButton:� cho phép người dùng chọn một hay nhiều giá trị� thuộc tính Checked (true/false) để kiểm tra xem có
check chọn hay khôngcheck chọn hay không� thuộc tính Text (string) để cho biết chọn nội dung gì.
� CheckListBox: Kết hợp checkbox trong ListBox trong trường hợp có qua nhiều lựa chọn
Slide 63
CheckBox
Slide 64
CheckBox
�� ThreeStateThreeState = truetrue : cho phép thiết lập 3 trạng thái:� Checkstate = Indeterminate: không xác định� CheckState= Checked: chọn� CheckState= Checked: chọn� CheckState= Unchecked: không chọn
Chưa chọn
Slide 65
RadioButton
Slide 66
RadioButton
Nhóm RadioButton
Nhóm RadioButton thứ 2 chứa trong
GroupBox2
Nhóm RadioButton thứ 1 chứa trong
GroupBox1
Slide 67
CheckListBox
� Phương thức Add cho phép thêm dữ liệu. Hoặc dùng Properties� Items
Slide 68
CheckListBox
� Thuộc tính cơ bản: Items� Sự kiện cơ bản: SelectedIndexChanged
Slide 69
CheckedListBox
�� MultiColumn = trueMultiColumn = true
Các item được tổ chức theo nhiều cột
Slide 70
CheckedListBox
� Sự kiện SelectedIndexChangedSelectedIndexChanged
Slide 71
GroupBox, Panel & Tab Control
GroupBox & Panel
� Bố trí controls trên GUI�� GroupBoxGroupBox
� Hiển thị một khung bao quanh một nhóm control� Có thể hiển thị một tiêu đề
� Thuộc tính Text� Thuộc tính Text
� Khi xóa một GroupBox thì các control chứa trong nó bị xóa theo� Thiết lập giá trị của GroupBox sẽ ảnh hưởng đến các control mà
nó chứa� Lớp GroupBox kế thừa từ System.Windows.Forms.Control
�� PanelPanel� Chứa nhóm các control� Không có caption� Có thanh cuộn (scrollbar)
� Xem nhiều control khi kích thước panel giới hạnSlide 73
GroupBox & Panel
GroupBox Mô tả Thuộc tính thường dùng
Controls Danh sách control chứa trong GroupBox. Text Caption của GroupBox
Panel Thuộc tính thường dùng AutoScroll Xuất hiện khi panel quá nhỏ để hiển thị hết
các control, mặc định là false BorderStyle Biên của panel, mặc định là None, các tham
số khác như Fixed3D, FixedSingle Controls Danh sách control chứa trong panel
Slide 74
GroupBox & Panel
� Minh họa GroupBoxGroupBox
groupBox1 chứa 2 controltextBox1 và button1
textBox2 và button2 chứa trong Controls của Form
Slide 75
GroupBox & Panel
� Minh họa PanelPanel
scroll
Slide 76
TabControl
� Dạng container chứa các control khác � Cho phép thể hiện nhiều page trên một form duy
nhất� Mỗi page chứa các control tương tự như group � Mỗi page chứa các control tương tự như group
control khác.� Mỗi page có tag chứa tên của page� Kích vào các tag để chuyển qua lại giữa các page
�� Ý nghĩaÝ nghĩa:� Cho phép thể hiện nhiều control trên một form� Các control có cùng nhóm chức năng sẽ được tổ
chức trong một tab (page) Slide 77
TabControl
�� TabControlTabControl có thuộc tính TabPagesTabPages� Chứa các đối tượng TabPageTabPage
TabPage
TabControl
TabPage
Slide 78
TabControl
� Thuộc tính AppearanceAppearanceNormalNormal
ButtonsButtons FlatButtonFlatButton
Slide 79
TabControl
� Thuộc tính, phương thức & sự kiện thường dùng
TabPages
PropertiesPropertiesMethodMethod
Multiline
SelectedIndex
SelectedTab
TabCount
TabPages
SelectedIndexChanged
EventEvent
MethodMethod
SelectTab
DeselectTab
Slide 80
TabControl
� Thêm/Xóa TabPage
Kích chuột phải
Thêm/Xóa TabPage
Slide 81
TabControl
� Chỉnh sửa các TabPage� Chọn thuộc tính TabPagesTabPages của TabControl� Sử dụng màn hình TabPage Collection EditorTabPage Collection Editor để
chỉnh sửa
Slide 82
TabControl
� Bổ sung Control vào TabControl� Chọn TabPage cần thêm control� Kéo control từ ToolBox thả vào TabPage đã chọn
Chọn TabPage cần thêm
Slide 83
TabControl
� Sử dụng code để thêm các TabPage vào TabControl
private void AddTabControl(){{
TabControl tabControl1 = new TabControl();TabPage tabPageGeneral = new TabPage("General");TabPage tabPageView = new TabPage("View");
tabControl1.TabPages.Add(tabPageGeneral);tabControl1.TabPages.Add(tabPageView);
tabControl1.Location = new Point(20, 20);
this.Controls.Add(tabControl1);} Slide 84
PictureBox & ImageList
PictureBox
� Sử dụng để hiển thị ảnh dạng bitmap, metafile, icon, JPEG, GIF.
� Sử dụng thuộc tính Image để thiết lập ảnh lúc design hoặc runtime.design hoặc runtime.
� Các thuộc tính� Image: ảnh cần hiển thị� SizeMode:
� Normal� StretchImage� AutoSize� CenterImage� Zoom
Slide 86
PictureBox
5 pictureBox với 5 pictureBox với các SizeMode
tương ứng
Slide 87
ImageList
� Cung cấp tập hợp những đối tượng image cho các control khác sử dụng� ListView� TreeView� TreeView
� Các thuộc tính thường dùng� ColorDepth: độ sâu của màu� Images: trả về ImageList.ImageCollection � ImageSize: kích thước ảnh� TransparentColor: xác định màu là transparent
Slide 88
ImageList
� Các bước sử dụng ImageList� Kéo control ImageList từ ToolBox thả vào Form� Thiết lập kích thước của các ảnh: ImageSize� Bổ sung các ảnh vào ImageList qua thuộc tính � Bổ sung các ảnh vào ImageList qua thuộc tính
Images� Sử dụng ImageList cho các control
� Khai báo nguồn image là image list vừa tạo cho control� Thường là thuộc tính ImageList
� Thiết lập các item/node với các ImageIndex tương ứng� Việc thiết lập có thể ở màn hình design view hoặc code
viewSlide 89
ImageList
� Tạo ImageListImageList
Slide 90
ImageList
� Sử dụng ImageList trong ListView
listView1
Hiển thị dạng small icon
Khai báo ImageList cho
ListView
Slide 91
ImageList
� Thêm Item
Khai báo image cho item qua ImageIndexSlide 92
ImageList
� Demo
Mỗi item sẽ có ảnh theo đúng thứ tự theo đúng thứ tự ImageIndex được
khai báo trong ImageList
Slide 93
NumericUpDown & DomainUpDown
NumericUpDown
� Cho phép user chọn các giá trị trong khoảng xác định thông qua � Nút up & down� Nhập trực tiếp giá trị
� Các thuộc tính� Các thuộc tính� Minimum� Maximum� Value� Increment
� Sự kiện� ValueChanged
� Phương thức� DownButton� UpButton Slide 95
NumericUpDown
� Đoạn code thêm control NumericUpDown
public void AddNumericUpDown() { NumericUpDown numUpDn = new NumericUpDown(); numUpDn.Location = new Point(50, 50); numUpDn.Size = new Size(100, 25); numUpDn.Size = new Size(100, 25);
numUpDn.Hexadecimal = true; // hiển thị dạng hexanumUpDn.Minimum = 0; // giá trị nhỏ nhấtnumUpDn.Maximum = 255; // giá trị lớn nhấtnumUpDn.Value = 0xFF; // giá trị khởi tạonumUpDn.Increment = 1; // bước tăng/giảm
Controls.Add(numUpDn); // thêm control vào ds control của form}
Slide 96
NumericUpDown
� Demo Tăng giảm giá trị
Hiển thị giá trị
Nhập trực tiếp giá trị
Hiển thị giá trị Hexa
Slide 97
DomainUpDown
� Cho phép user chọn item trong số danh sách item thông qua� Button Up & Down� Nhập từ bàn phím
� Properties� Properties� Items: danh sách item� ReadOnly: true chỉ cho phép thay đổi giá trị qua Up & Down� SelectedIndex: chỉ mục của item đang chọn� SelectedItem: item đang được chọn� Sorted: sắp danh sách item� Text: text đang hiển thị trên DomainUpDown.
� Event� SelectedItemChanged Slide 98
DomainUpDown
� Nhập item cho DomainUpDown
String Collection EditorCho phép nhập item
Slide 99
DateTimePicker
� Cho phép chọn ngày trong khoảng xác định thông qua giao diện đồ họa dạng calendar
� Kết hợp ComboBox và MonthCalendar� Properties
� Format: định dạng hiển thị� long, short, time, custom
� CustomFormat:� dd: hiển thị 2 con số của ngày� MM: hiển thị 2 con số của tháng� yyyy: hiển thị 4 con số của năm� …(xem thêm MSDN Online)
� MaxDate: giá trị ngày lớn nhất� MinDate: giá trị ngày nhỏ nhất� Value: giá trị ngày hiện tại đang chọn
Slide 100
DateTimePicker
private void AddDateTimePicker() { DateTimePicker DTPicker = new DateTimePicker();
DTPicker.Location = new Point(40, 80); DTPicker.Size = new Size(160, 20);
DTPicker.DropDownAlign = LeftRightAlignment.Right;
DTPicker.Value = DateTime.Now; DTPicker.Format = DateTimePickerFormat.Custom; DTPicker.CustomFormat = "'Ngày' dd 'tháng' MM 'năm' yyyy";
this.Controls.Add(DTPicker); }
Slide 101
DateTimePicker
� Demo
Kích drop down để hiện thị hộp
chọn ngày
Định dạng xuất: 'Ngày' dd 'tháng' MM 'năm' yyyy
chọn ngày
Chọn ngày trong khoảng cho trước
Slide 102
MonthCalendar
� Cho phép user chọn một ngày trong tháng hoặc nhiều ngày với ngày bắt đầu và ngày kết thúc.
� Một số thuộc tính thông dụng� Một số thuộc tính thông dụng� MaxDate, MinDate� SelectionStart: ngày bắt đầu chọn� SelectionEnd: ngày kết thúc
� Sinh viên tự tìm hiểu thêm…Slide 103
RichTextBox
� Chức năng mở rộng từ TextBox, có thể hiển thị text dạng rich text format (RTF)
� Các text có thể có các font chữ và màu sắc khác nhau.khác nhau.
� Đoạn text có thể được canh lề� Có thể chứa các ảnh� Ứng dụng WordPad là dạng RichTextBox
� Sinh viên tự tìm hiểu thêm…Slide 104
Menu Strip, Tool Strip
Menu Strip
� Menu cung cấp nhóm lệnh có quan hệ với nhau cho các ứng dụng Windows
Menu
Menu itemNamespace: System.Windows.Forms
Submenu
Shortcut key
Slide 106
MenuStrip
� Cách tạo menu� Trong ToolBox kéo control MenuStrip thả vào form� Thanh menuBar xuất hiện trên cùng của form� Trong màn hình design dễ dàng tạo lập các menu item� Trong màn hình design dễ dàng tạo lập các menu item
Nhập tên menu
MenuStrip
MenuBar
ToolStripMenuItem
Slide 107
MenuStrip
Đặt ký tự & trước ký tự làm phím tắt
Tạo menu item mới bằng cách
nhập vào textbox
Slide 108
Menu
� Thiết lập Shortcut Key cho menu item
Khai báo shortcut key
Slide 109
MenuStrip
� Menu item có thể là TextBox hoặc ComboBox
Chọn nút dropdown trên textbox nhập item để hiển thị
các dạng menu item khác
ToolStripMenuItem
ToolStripComboBox
ToolStripTextBox
Slide 110
MenuStrip
Thuộc tính của MenuStrip, ToolStripMenuItemThuộc tính của MenuStrip, ToolStripMenuItem
MenuStripMenuStrip
Items Chứa những top menu item
MdiWindowListItem Chọn top menu item hiển thị tên các cửa sổ con
ToolStripMenuItemToolStripMenuItemToolStripMenuItemToolStripMenuItem
Checked Xác định trạng thái check của menu item
Index Chỉ mục menu item trong menu cha
DropDownItems Chứa những menu item con
ShortcutKeys Phím tắt
Text Tiêu đề menu item
ShowShortcutKeys Xác định trạng thái hiện thị phím tắt bên cạnh menu item
MenuStrip
� Sự kiện cho Menu Item thường dùng là Click� Trong màn hình Design View kích đúp vào menu
item VS sẽ tự động tạo trình xử lý cho menu item
Trình xử lý cho sự kiện click của
menu item “Open”
Slide 112
Context Menu
� Xuất hiện khi user kích chuột phải� Thông thường menu này xuất hiện tùy thuộc
vào đối tượng trong vùng kích chuột phải.Trong ToolBox kéo ContextMenuStrip thả � Trong ToolBox kéo ContextMenuStrip thả vào form
Slide 113
Context Menu
� Kích vào ContextMenuStrip để soạn thảo các menuitem
� ContextMenuStrip tạm thời thể hiện trên cùng của formcủa form� Khi run thì sẽ không hiển thị cho đến khi được gọi
select
Soạn thảo Context Menu tương tự như Menu bình
thường
Slide 114
Context Menu
� Khai báo sử dụng Context Menu� Mỗi control đều có property là:
ContextMenuStripContextMenuStrip� Khai báo thuộc tính này với ContextMenuStrip� Khai báo thuộc tính này với ContextMenuStrip
� Khi đó user kích chuột phải lên control thì sẽ hiển thị context Menu đã cài đặt sẵn
� Khai báo trình xử lý sự kiện Click cho ContextMenu� Kích đúp vào menu item của Context Menu để tạo � Hoặc trong cửa sổ Properties -> Event kích đúp vào
sự kiện Click.Slide 115
Context Menu
� Demo: tạo context Menu hiển thị trong ListBox có menu item Remove, cho phép xóa item đang được chọn.
� Tạo Form có mô tả như sau� Tạo Form có mô tả như sau
ListBox hiển thị các item
Slide 116
Context Menu
� Kéo ContextMenuStrip thả vào Form
Slide 117
Context Menu
� Kích vào ContextMenuStrip để thiết kế menu� Tạo một menu item “Remove” như hình mô tả
Soạn thảo các menu item
Slide 118
Context Menu
� Liên kết ContextMenu với ListBox� Trong cửa sổ properties của ListBox
� Khai báo thuộc tính ContextMenuStrip = ContextMenuStrip1ContextMenuStrip1
Chọn context menu
Slide 119
Context Menu
� Khai báo trình xử lý sự kiện Click cho menu item
Slide 120
Context Menu
� Demo
Context Menu Context Menu hiển thị khi user kích chuột phải
lên ListBox
Slide 121
ToolStrip
�Namespace: System.Windows.Forms� Dạng ToolBar chứa nhiều các controls khác
nhau� Xuất hiện ngay dưới thanh Menu� Xuất hiện ngay dưới thanh Menu
Slide 122
ToolStrip
� Cách tạo button trên ToolStrip� Kéo ToolStrip thả vào form� Add ToolStripButton
Tạo button
ToolStrip
� ToolStripMenuItem là 1 Menu Item của Menu Strip� Một số thuộc tính cơ bản
� Text� Text� Image� Checked� DropDownItems
� Một số sự kiện cơ bản� Click
Slide 124
ToolStrip
� Mỗi button có thể là� ToolStripButton� ToolStripSplitButton� ToolStripDropDownButton� ToolStripDropDownButton� ToolStripComboBox� ToolStripTextBox� ToolStripSeperator� ToolStripProgressBar
� Thuộc tính cơ bản� Items Slide 125
ToolStrip
� Bổ sung image cho button� Sử dụng thuộc tính Images để thiết lập
Slide 126
ToolStripToolStrip
Các buttonSplit bar
Slide 127
ToolStrip
� Khai báo trình xử lý sự kiện Click cho ToolStripButton� Khai báo tương tự như các button
� Kích đúp vào button trong Design View� Kích đúp vào button trong Design View
� Thông thường các button là các chức năng thường sử dụng chứa trong menu� VD: các button New, Open, Save…� Do đó có thể khai báo cùng trình xử lý sự kiện cho các
button và menu item cùng chức năng.� VD: Menu item “Open” cùng trình xử lý với ToolStripButton
“Open”Slide 128
StatusStrip
StatusStrip
� Hiển thị thông tin trạng thái của ứng dụng� Nằm bên dưới cùng của Form.� Các lớp liên quan
� StatusStrip: là container chứa control khác� ToolStripStatusLabel: control có thể add vào StatusStrip � ToolStripStatusLabel: control có thể add vào StatusStrip
Slide 130
StatusStrip
� Tạo các item cho StatusStrip
Tạo các item cho StatusStrip
Các kiểu control cho StatusStrip
Slide 131
StatusStrip
� Ví dụ tạo sự kiện Tick của Timer cứ mỗi giây kích hoạt và hiển thị giờ trên StatusStrip� Kéo Timer thả vào Form
� Thiết lập sự kiện Tick cho Timer với Interval là 1000 � Thiết lập sự kiện Tick cho Timer với Interval là 1000 ms
Item dạng Label của StatusStripSlide 132
StatusStrip
� Demo
ToolStripStatusLabel StatusStrip
Slide 133
StatusStrip
� VD: bổ sung hiển thị một hyperlink trên StatusStrip và open hyperlink khi user kích chuột
Label hiển thị hyperlinkThuộc tính isLink = true
Thiết lập với thuộc tính spring = true, Text = “ ”
Slide 134
StatusStrip
� Tạo trình xử lý sự kiện khi user kích vào item Label thứ 3 chứa hyperlink� Trong màn hình design kích đúp vào item thứ 3,
VS.NET sẽ phát sinh ra trình xử lý sự kiệnVS.NET sẽ phát sinh ra trình xử lý sự kiện
Slide 135
StatusStrip
� Demo
Label thứ 2 fill đầy khoảng trốngKích vào để mở web
Slide 136
Advanced Controls
Luong Tran Hy HienLuong Tran Hy [email protected]
http://sites.google.com/a/hcmup.edu.vn/hienlth
Timer
� Bộ định thời gian, thiết lập một khoảng thời gian xác định (interval) và khi hết khoảng thời gian đó Timer sẽ phát sinh sự kiện tick.
Properties
Events
Methods
Enabled
IntervalStop
TickSlide 138
Timer
� Multitasking� Quản lý và thông báo các trạng thái� Autosave� Demo version� Game
Slide 139
Xử lý sự kiện Timer
� Theo lý thuyết thông điệp thời gian do Windows cung cấp là chính xác đến mili giây nhưng thực tế không hoàn toàn như vậy.
� Sự chính xác còn phụ thuộc vào đồng hồ của � Sự chính xác còn phụ thuộc vào đồng hồ của hệ thống và các hoạt động hiện thời của chương trình.
Slide 140
Timer
� Hiển thị giờ hệ thốngHiển thị thời gian
Enable sự kiện Tick
Khoảng thời gian chờ giữa 2 lần gọi Tick
Slide 141
Timer
� Sự kiện Tick
Khai báo trình xử lý sự kiện
Tick
Slide 142
Timer
� Demo
Mỗi giây sự kiện Tick Mỗi giây sự kiện Tick phát sinh. Trình xử lý của Tick sẽ lấy giờ hệ thống và hiển thị
lên Label
Slide 143
ProgressBar
� Hiển thị tiến độ thực hiện của một công việc nào đó� Các thuộc tính
� Minimum: giá trị nhỏ nhất� Maximum: giá trị lớn nhất
Step: số bước tăng khi gọi hàm PerformStep� Step: số bước tăng khi gọi hàm PerformStep� Value: giá trị hiện tại� Style: kiểu của progress bar
� Phương thức� PerformStep(): tăng thêm step� Increment(int value): tăng vị trí hiện tại của tiến độ với giá trị xác
định
Slide 144
ProgressBar
� Khai báo thanh tiến độ 0-100, step = 10
Max = 100
Min = 0
Step = 10
Slide 145
ProgressBar
Slide 146
ProgressBar
� Demo
Thể hiện trực Thể hiện trực quan tiến độ
Tăng tiến độ theo step và cập nhật lại % hoàn thành lên label
Slide 147
ToolTip
� Cung cấp chức năng hiển thị một khung text nhỏ khi user di chuyển chuột vào control bất kỳ
� Khung text chứa nội dung mô tả ý nghĩa của control control
� Cách sử dụng� Từ ToolBox kéo ToolTip thả vào form� Kích chọn control muốn thêm tooltip� Trong cửa sổ Properties của control sẽ có thuộc tính
ToolTip. Thêm text vào thuộc tính này để hiển thị khi tooltip xuất hiện.
Slide 148
ToolTip
� Tạo ToolTip
Slide 149
ToolTip
� Khai báo Tooltip cho textbox trong Design View
Nội dung Tooltip
Slide 150
ToolTip
� Khai báo tooltip cho button
Nhập nội dung Tooltip cần hiển thị
Slide 151
ToolTip
� Khai báo tooltip cho listbox bằng code
Slide 152
ToolTip
� Demo
ToolTip xuất hiện khi user di chuyển chuột
vào vùng control
Slide 153
TrackBar
� Cho phép user thiết lập giá trị trong khoảng cố định cho trước
� Thao tác qua thiết bị chuột hoặc bàn phímPropertiesProperties
MaximumMinimum
TickFrequency
TickStyle
Value SetRange
Scroll
ValueChanged
Slide 154
TrackBar
public void AddTrackBar() { TrackBar tb1 = new TrackBar(); tb1.Location = new Point(10, 10); tb1.Size = new Size(250, 50);
tb1.Minimum = 0;
Tạo thể hiện
Thiết lập khoảng: 0 - 100tb1.Minimum = 0; tb1.Maximum = 100;
tb1.SmallChange = 1; tb1.LargeChange = 5; tb1.TickStyle = TickStyle.BottomRight;
tb1.TickFrequency = 10; tb1.Value = 10; Controls.Add(tb1);
}
Thiết lập khoảng: 0 - 100
Số vị trí di chuyển khi dùng phím mũi tên
Số vị trí di chuyển khi dùng phím Page
Kiểu stick ở bên dưới/bên phải track
Số khoảng cách giữa các tick mark
Slide 155
TrackBar
� Bổ sung Label hiển thị giá trị của TrackBar
Slide 156
Properties
SmallChange
ScrollBar controls
LargeChange
SmallChange
Value
Scroll
ValueChanged157
ListViewListView
List View� Dạng control phổ biến hiện thị một danh sách item
� Các item có thể có các item con gọi là subitem
� Windows Explorer hiển thị thông tin thư mục, tập tin…� Có thể hiển thị thông tin theo nhiều dạng thông qua thuộc
tính Viewtính View� Xem dạng chi tiết thông tin� Xem dạng icon nhỏ� Xem dạng icon lớn� Xem dạng tóm tắt� …
� Lớp ListView dẫn xuất từ System.Windows.Forms.Control
Slide 159
List View
�� PropertiesProperties
Sorting
SmallImageList
GridLines
FullRowSelectMultiSelect
Columns
Items
SmallImageList
LargeImageList
Slide 160
List View
� Các dạng thể hiện của ListViewListView
DetailsDetails Small IconsSmall Icons
Large IconsLarge IconsListListTileTile
Slide 161
List View
Large Icons
Mỗi item xuất hiện với 1 icon kích thước lớn và một icon kích thước lớn và một
label bên dưới
Slide 162
List View
Mỗi item xuất hiện với icon nhỏ và một label bên phải
Small Icons
nhỏ và một label bên phải
Slide 163
List View
Mỗi item xuất hiện với icon nhỏ với label bên phải, item
List
được sắp theo cột nhưng không có tiêu đề cột
Slide 164
List View
Mỗi item xuất hiện với icon kích thước lớn,
Tile
icon kích thước lớn, bên phải có label chứa
item và subitem
Slide 165
List View
Mỗi item xuất hiện trên một dòng, mỗi dòng có các cột
chứa thông tin chi tiết
Detail
chứa thông tin chi tiết
Slide 166
List View
� Tạo các cột cho ListView – Details qua� Cửa sổ properties → Columns để tạo.� Sử dụng code trong chương trình.
ColumnHeader columnHeader1 = new ColumnHeader(); ColumnHeader columnHeader1 = new ColumnHeader(); ColumnHeader columnHeader2 = new ColumnHeader(); ColumnHeader columnHeader3 = new ColumnHeader();
columnHeader1.Text = "Name"; columnHeader2.Text = "Address"; columnHeader3.Text = "Telephone Number";
listView1.Columns.Add(columnHeader1); listView1.Columns.Add(columnHeader2); listView1.Columns.Add(columnHeader3);
Slide 167
List View
Dialog soạn thảo cột
Slide 168
List View
� Thêm các item vào ListView� Thêm item trong màn hình thiết kế form� Thêm item thông qua code
� Các lớp định nghĩa Item� Các lớp định nghĩa Item� System.Windows.Forms.ListViewItemListViewItem� Mỗi item trong ListView có các item phụ gọi là subitem
� Lớp ListViewItem.ListViewSubItemListViewSubItem định nghĩa các subitem của ListView� Lớp ListViewSubItem là inner class của ListViewItem
ColumnHeader1 ColumnHeader2 ColumnHeader3
… … …
… … …
Subitem[0] Subitem[1] Subitem[2]
item 1
Slide 169
ListView
� Minh họa thêm item qua codeListViewItemListViewItem item1 = item1 = newnew ListViewItemListViewItem();();ListViewItem.ListViewSubItemListViewItem.ListViewSubItem subitem1;subitem1;subitem1 = subitem1 = newnew ListViewItemListViewItem.ListViewSubItem.ListViewSubItem();();
item1.Text = item1.Text = ““HCMUPHCMUP";";subitem1.Text = subitem1.Text = ““280 An Duong Vuong, HCMc280 An Duong Vuong, HCMc"; ";
item1.SubItems.Add(subitem1);item1.SubItems.Add(subitem1);
listView1.Items.Add(item1);listView1.Items.Add(item1);
Thêm subitem vào item
Thêm item vào danh sách items của ListView
Slide 170
ListView
� Sự kiện SelectedIndexChangedSelectedIndexChanged
Slide 171
ListView
� Thuộc tính CheckBoxes: Xuất hiện CheckBox bên cạnh từng phần tử trên điều khiển
Slide 172
TreeView
� Điều khiển TreeView dùng để trình bày danh sách phần tử phân cấp theo từng nút (Node) hình cây.
� Thực hiện: ta kéo thả điều khiển vào Form từ hộp Toolbox
Slide 173
TreeView
� Thuộc tính Nodes: Khai báo số Node (có header) của điều khiển TreeView
Slide 174
TreeView
� Thuộc tính ShowPlusMinus: Chọn giá trị True thì biểu tượng dấu + và – xuất hiện trên mỗi Node, mặc định là True.
Slide 175
TreeView
� Thuộc tính ImageList: Chứa đối tượng ImageList.� Thuộc tính ImageIndex: Tất cả các Node được thể hiện
bởi hình ảnh mà thuộc tính này đã chọn.
Ví trí trong ImageList
Chọn ImageList
Slide 176
TreeView
� Thuộc tính SelectedImageIndex: Node được chọn sẽ có dạng hình ảnh này.
� Thuộc tính CheckBoxes: Xuất hiện CheckBox bên cạnh Node
Chọn hình cho node được chọn
Slide 177
TreeView� Phương thức:
� CollapseAll(): Trình bày tất cả các Node trên diều khiển TreeView
treeView1. CollapseAll();� ExpandAll(): Thu gọn tất cả các Node trên điều khiển TreeView
treeView1. ExpandAll();� Clear(): Xóa tất cả các Node đang tồn tại.
� Các biến cố thông dụng như:� AfterCheck: Xãy ra khi người dùng Check vào CheckBox� AfterCollapse: Xãy ra khi thu gọn tất cả các Node� AfterExpand: Xãy ra khi mở rộng tất cả các Node� AfterSelect: Xãy ra khi Click vào Node� Tương tự đối vối BeforeCheck, BeforeCollapse, BeforeExpand,
BeforeSelectSlide 178
Bài tập
� Sử dụng TreeView và ListView mô phỏng chương trình Windows Explorer
Slide 179
Tham kh ảo
� Slide bài giảng C#, ĐH KHTN, TpHCM� Nguyễn Hà Giang, Slide bài giảng C#, ĐH
KTCN, TpHCMMSDN� MSDN
Slide 180
Xử lý các s ự kiện nhập liệu bàn phím, chu ột
NỘI DUNG
� Xử lý sự kiện bàn phím (Keyboard)� Xử lý sự kiện chuột (Mouse)
Slide 2
Giới thi ệu
� Tìm hiểu các thông điệp phát sinh từ bàn phím hay thiết bị chuột để viết các xử lý tương ứng
� Bộ định thời gian: Windows cung cấp cơ chế này để truyền thông với ứng dụng theo định kỳ.này để truyền thông với ứng dụng theo định kỳ.� Ứng dụng cần khai báo bộ định thời gian với một
khoảng thời gian cho trước� Khi ứng dụng hoạt động thì hệ thống sẽ truyền một tín
hiệu cho ứng dụng theo từng khoảng thời gian định kỳ đã được khai báo.
Slide 3
Giới thi ệu
� Bàn phím và chuột là 2 thiết bị nhập liệu quan trọng nhất của máy tính.
� Hầu hết các chức năng Windows đều hỗ trợ dùng bàn phím và chuộtdùng bàn phím và chuột
� Bàn phím và chuột được xử lý qua cơ chế thông điệp của Windows
� Mọi sự kiện đối với bàn phím và chuột được Windows gửi đến chương trình thông qua các thông điệp.
Slide 4
Bàn phím
� Khi nhấn phím có thể xảy ra trường hợp sau:� Nhấn 1 phím ký tự� Nhấn 1 phím điều khiển (Enter, Esc, F1 � F12)� Nhấn Shift hoặc Ctrl hoặc Alt hoặc tổ hợp nào đó của 3 Nhấn Shift hoặc Ctrl hoặc Alt hoặc tổ hợp nào đó của 3
phím này với các ký tự.
� Khi phím nào đó trên bàn phím được gõ, nhả hay giữ thì các thông điệp tương ứng sẽ được gửi đến cửa sổ đang được focus
Slide 5
� Các phím được nhấn được phân thành hai nhóm chính:� Nhóm các phím hệ thống (system keys): là các
phím được nhấn với phím Alt.phím được nhấn với phím Alt.� Nhóm các phím thường (nonsystem keys): khi
phím Alt không được nhấn.
� Thường thì các phím hệ thống được Windows xử lý và dịch thành các sự kiện tương ứng.
Slide 6
Xử lý sự kiện bàn phím
� Mô hình xử lý sự kiện bàn phím của Windows
Slide 7
Xử lý sự kiện bàn phím
� Khi người dùng nhấn hoặc nhả một phím bất kỳ từ bàn phím các driver bàn phím sẽ nhận được mã bàn phím và mã quét (scan code) của phím tương ứng.
� Mã quét này sẽ được chuyển thành mã phím ảo (Virtual keycode) và một thông điệp bàn phím tương ứng (bao keycode) và một thông điệp bàn phím tương ứng (bao gồm cả scan code, virtual keycode và một số thông tin khác) sẽ được gửi đến cho System message queue.
� Các sự kiện bàn phím chỉ được gửi đến cho cửa số đang giữ focus hiện hành.
� Hệ thống gửi hai sự kiện bàn phím khác nhau khi người dùng nhấn phím và nhả phím.
Slide 8
Xử lý sự kiện bàn phím
� Các phím được nhấn được chia làm 4 nhóm sau:� Toggle keys: Caps Lock, Num Lock, Scroll Lock� Shift keys: Shift, Ctrl, Alt� Shift keys: Shift, Ctrl, Alt� Noncharacter keys: các phím chức năng như các
phím di chuyển, Pause, Delete� Character keys: các phím ký tự, phím số,…
Slide 9
Keyboard Event
� Phát sinh khi một phím được nhấn hoặc thả� Có 3 sự kiện
� KeyPress� KeyUp� KeyUp� KeyDown
� KeyPress phát sinh kèm theo với mã ASCII của phím được nhấn
� KeyPress không cho biết trạng thái các phím bổ sung {Shift, Alt, Ctrl…}
� Sử dụng KeyUp & KeyDown để xác định trạng thái các phím bổ sung.
Slide 10
Keyboard Event
Sự kiện với tham s ố kiểu KeyEventArgsSự kiện với tham s ố kiểu KeyEventArgs
KeyDown Phát sinh khi phím được nhấn
KeyUp Phát sinh khi phím được thả
Sự kiện với tham s ố kiểu KeyPressEventArgsSự kiện với tham s ố kiểu KeyPressEventArgs
KeyPress Khởi tạo khi phím được nhấnKeyPress Khởi tạo khi phím được nhấn
Thuộc tính c ủa lớp KeyPressEventArgsThuộc tính c ủa lớp KeyPressEventArgs
KeyChar Ch ứa ký tự ASCII của phím được nhấn
Handled Cho bi ết sự kiện KeyPress có được xử lý ch ưa
Thuộc tính c ủa lớp KeyEventArgsThuộc tính c ủa lớp KeyEventArgs
Alt, Control, Shift Tr ạng thái các phím b ổ sung
Handled Cho bi ết sự kiện đã xử lý
Slide 11
Keyboard Event
Thuộc tính c ủa lớp KeyEventArgs (tt)Thuộc tính c ủa lớp KeyEventArgs (tt)
KeyCode Tr ả về mã ký t ự được định ngh ĩa trong Keys enumeration
KeyData Ch ứa mã ký t ự với thông tin phím b ổ sung
KeyValue Trả về số int, đây chính là mã Windows Virtual KeyValue Trả về số int, đây chính là mã Windows Virtual Key Code
Modifier Tr ả về giá tr ị của phím b ổ sung
Slide 12
Keyboard Event
� Keys Enumeration
Slide 13
Key Enumeration
� Kiểu Keys được định nghĩa để liệt kê tất cả các phím. Bảng liệt kê giá trị 26 ký tự Latin được mô tả trong bảng sau:
Slide 14
Key Enumeration
Slide 15
Keyboard Event
� Minh họa các sự kiện: KeyPress, KeyDown, KeyUp� Khi user nhấn một phím
� Bắt sự kiện KeyPress: xuất ra phím được nhấn� Bắt sự kiện KeyPress: xuất ra phím được nhấn� Bắt sự kiện KeyDown: xuất ra các tham số trong KeyEventArgs
� Khi user thả phím� Xóa các thông tin mô tả phím được nhấn trong các label
� Cách thực hiện� Tạo một form minh họa� Thiết kế trên form có 2 Label:
� lblChar: hiển thị ký tự được nhấn trong KeyPress� lblKeyInfo: hiển thị các thông tin của KeyEventArgs khi KeyDown
Slide 16
Keyboard Event
� Bước 1: tạo Windows Form như hình mô tả
Label chứa ký tự được nhấn trong sự kiện KeyPresssự kiện KeyPress
Label chứa thông tin mã ký tự được nhấn trong sự kiện KeyDown
Slide 17
Keyboard Event
� Bước 2:� Tạo KeyPress Event Handling cho form
Slide 18
Keyboard Event
� Bước 3:� Tạo KeyDown Event Handling cho form
Slide 19
Keyboard Event
� Demo
Slide 20
Keyboard Event
� Mở rộng chương trình Calculator mở rộng cho phép xử lý các phím � Form nhận xử lý thông điệp KeyDown
� Xác định các phím tương ứng rồi gọi sự kiện click của button� VD: user gõ phím 1, tương tự như button “1” được nhấn
� Cách thực hiện� Khai báo trình xử lý sự kiện
KeyDown cho Form chính� Thiết lập thuộc tính KeyPreviewKeyPreview
cho Form để nhận sự kiện bàn phím.
Keyboard Event
� Viết phần xử lý cho sự kiện KeyDown� Xác định các phím tương ứng để gọi sự kiện click
của các button.
Gọi event Click của button “1”
Phím '=' được nhấn
Phím ‘+' được nhấnSlide 22
Mouse Event
Giới thi ệu
� Về cơ bản Windows hỗ trợ các loại thiết bị chuột có một nút, hai và ba nút, ngoài ra Windows còn có thể dùng thiết bị khác như joystick hay bút vẽ để bắt chước thiết bị chuột.
� Các thông điệp được tạo từ chuột rất khác với thông điệp của bàn phím:� Chuột di chuyển qua cửa sổ� hay kích vào trong cửa sổ,� Thậm chí cả trong trường hợp cửa sổ không được kích
hoạt hay không nhận được sự quan tâm.
Slide 24
Giới thi ệu
� Các sự kiện chuột sẽ được gửi đến cho:� Cửa sổ hiện đang chứa con trỏ chuột.� Hoặc cửa sổ đang “capture” chuột.
� Có hai loại sự kiện về chuột:� Có hai loại sự kiện về chuột:� Client area messages: Các sự kiện chuột xảy ra
khi chuột đang ở vùng client của cửa sổ.� Non-client area messages: Các sự kiện chuột xảy
ra khi chuột đang ở các vùng như border, menu bar, title bar, scroll bar, window menu, minimize button, và maximize button.
Slide 25
Mouse Event� Một số các thao tác phát sinh từ mouse
� Di chuyển� Kích chuột
� Ứng dụng cần xử lý sự kiện chuột nào sẽ khai báo trình xử lý tương ứngxử lý tương ứng
� Lớp MouseEventArgsMouseEventArgs được sử dụng để chứa thông tin truyền vào cho trình xử lý sự kiện mouse.
� Mỗi trình xử lý sự kiện sẽ có tham số là đối tượng object và đối tượng MouseEventArgs (hoặc EventArgs)
Slide 26
Mouse Event
� Tham số cho sự kiện liên quan đến mouse
MouseEventArgsMouseEventArgs
Tọa độ (x,y) của Tọa độ (x,y) của con trỏ chuộtcon trỏ chuột
Button được nhấnButton được nhấnSố lần kích chuộtSố lần kích chuột
Slide 27
Mouse Event
Sự kiện chu ột với tham s ố kiểu EventArgsMouseEnter Xu ất hi ện khi con tr ỏ chuột đi vào vùng biên c ủa
control
MouseLeave Xu ất hi ện khi con tr ỏ chuột rời khỏi biên c ủa control
Sự kiện chu ột với tham s ố kiểu MouseEventArgsMouseDown/MouseUp
Xuất hi ện khi button được nh ấn/th ả và con tr ỏ chuột đang ở trong vùng biên c ủa control
MouseMove Xu ất hi ện khi chu ột di chuy ển và con tr ỏ chuột ở trong vùng biên c ủa control
Slide 28
Mouse Event
Thuộc tính c ủa lớp MouseEventArgsButton Button được nh ấn {Left, Right, Middle, none} có
kiểu là MouseButtons
Clicks S ố lần button được nh ấn
X Tọa độ x của con tr ỏ chuột trong controlX Tọa độ x của con tr ỏ chuột trong control
Y Tọa độ y của con tr ỏ chuột trong control
Slide 29
Ví dụ Test Mouse Buttonprotected override void OnMouseClick(MouseEventArgs mea){
base.OnMouseClick(mea);if (mea.Button == MouseButtons.Left)
MessageBox.Show("Nhan chuot trai");MessageBox.Show("Nhan chuot trai");if (mea.Button == MouseButtons.Right)
MessageBox.Show("Nhan chuot phai");if (mea.Button == MouseButtons.Middle)
MessageBox.Show("Nhan chuot giua");}
Slide 30
Sự kiện MouseDown
� Sự kiện MouseDown được phát sinh khi người dùng nhấn một nút của chuột.
� Để xử lý sự kiện MouseDown ta override phương thức OnMouseDown
� Ví dụ:protected override void OnMouseDown(MouseEventArgs mea) {
MessageBox.Show(“Ban vua nhan chuot” + mea.Button);}
Slide 31
Sự kiện MouseUp
� Sự kiện MouseUp được phát sinh khi người dùng nhả một nút của chuột.
� Để xử lý sự kiện MouseUp ta override phương thức OnMouseUp
� Ví dụ:protected override void OnMouseUp(MouseEventArgs mea) {
MessageBox.Show(“Ban vua nha chuot ” + mea.Button);}
Slide 32
Sự kiện MouseMove
� Sự kiện MouseMove được phát sinh khi người dùng di chuyển chuột.
� Để xử lý sự kiện MouseMove ta override phương thức OnMouseMove
� Ví dụ:Ví dụ:protected override void OnMouseMove(MouseEventArgs e) {
//Ve mot duong thang tu toa do (0,0) den toa do chuot di chuyenGraphics g = CreateGraphics();Pen pen = new Pen(System Drawing Color Blue);g.DrawLine(pen, 0, 0, mea.X, mea.Y);
}Slide 33
Sự kiện MouseWheel
� Sự kiện MouseWheel được phát sinh khi người dùng scroll chuột scroll chuột.
� Để xử lý sự kiện MouseWheel ta override phương thức OnMouseWheel
� Ví dụ:� Ví dụ:protected override void OnMouseWheel(MouseEventArgs e){
if (mea.Delta>0)MessageBox.Show(“Ban vua scroll chuot len”, “Thong bao” );
elseMessageBox.Show("Ban vua scroll chuot xuong", "Thong
bao");}
Slide 34
Sự kiện Click
� Sự kiện Click phát sinh khi một phím bất kỳ của chuột được nhấn.
� Sự kiện này phát sinh kèm theo tham số EventArgs, tham số này không chứa thông tin về trạng thái của nút chuột được nhấn cũng như vị trí của con trỏ nút chuột được nhấn cũng như vị trí của con trỏ chuột khi nhấn.
protected override void OnClick(EventArgs ea){ …}
Slide 35
Sự kiện DoubleClickKhi DoubleClick sẽ phát sinh một dãy các sự kiện sau:
� MouseDown� Click� MouseUp� MouseMove� MouseMove� MouseDown� DoubleClick� MouseUp� MouseMove
protected override void OnDoubleClick(EventArgs ea){…}
Slide 36
Mouse Event
� MouseMove
Slide 37
Mouse Event
� Demo
Vị trí hiện tại của con trỏ chuột
Hiển thị tọa độ hiện tại của con trỏ chuột
con trỏ chuột
Slide 38
Mouse Event
� Demo thao tác: kích chuột trái tại một điểm A, giữ chuột trái và di chuyển chuột, chương trình sẽ vẽ đường thẳng từ điểm A đến vị trí hiện tại chuột. hiện tại chuột.
� Các sự kiện cần xử lý� MouseDown:
� Xác định điểm A ban đầu
� MouseMove� Kiểm tra nếu Left button của chuột đang giữ� Sử dụng Graphics để vẽ đường thẳng từ A đến vị trí hiện tại
Slide 39
Mouse Event
� Bước 1:� Tạo biến lưu trữ điểm A khi user kích chuột trái� Biến pA có kiểu Point là biến thành viên của
Form1 Lớp Form1Form1 Lớp Form1
Biến pA lưu giữ tọa độ khi chuột trái được click
Slide 40
Mouse Event
� Bước 2� Khai báo xử lý sự kiện MouseDown trong Form1
� Trong cửa sổ event của Form1, kích đúp vào sự kiện MouseDown
Lưu lại điểm được nhấn chuột
Slide 41
Mouse Event
� Bước 3� Cài đặt xử lý sự kiện MouseMove
� Kiểm tra nếu LeftButton được nhấn
� Vẽ đường thẳng từ pA đến vị trí hiện tại
Slide 42
Mouse Event
Tại sao có Tại sao có hiệu ứng hiệu ứng
vậy? vậy? SV tự cải SV tự cải SV tự cải SV tự cải
tiếntiến
Slide 43
Bài tập
� Chương trình đồ họa đơn giản: Vẽ đường thẳng, hình chữ nhật, ellipses
Slide 44
Common Dialog & User Control
Lương Tr ần Hy Hi ếnFIT, HCMUP
11
Nội Dung�� Giới thi ệu Common DialogGiới thi ệu Common Dialog� OpenFileDialog� SaveFileDialog� FontDialog
ColorDialog
22
� ColorDialog� MessageBox� User Control
Common Dialog� Các dialog thường được sử dụng� Được warp thành các lớp trong FCL/BCL
OpenFileDialogOpenFileDialog ColorDialogColorDialog
33
Common Common DialogDialog
OpenFileDialogOpenFileDialog
SaveFileDialogSaveFileDialog
ColorDialogColorDialog
FontDialogFontDialog
PrintDialogPrintDialog
Common Dialog� Cách sử dụng � 1. Kéo thả dialog vào form� VS sẽ tạo thể hiện chứa trong lớp form
� 2. Khai báo đối tượng và tạo thể hiện của lớp CD� VD: OpenFileDialog oFile = new OpenFileDialog();
44
VD: OpenFileDialog oFile = new OpenFileDialog();
Com
mon
Dia
log
Com
mon
Dia
log
Nội Dung� Giới thiệu Common Dialog�� OpenFileDialogOpenFileDialog� SaveFileDialog� FontDialog
ColorDialog
55
� ColorDialog� MessageBox� User Control
OpenFileDialog� Sử dụng để chọn file lưu trên đĩa� Cách sử dụng từ ToolBox
Drag & dropDrag & drop
66
Code phát Code phát sinh tự độngsinh tự động
xyz.Designer.csxyz.Designer.cs
OpenFileDialog� Code phát sinh của VS
xyz.Designer.csxyz.Designer.cs
Tạo thể hiệnTạo thể hiện
77
Hiển thị FormHiển thị Form
OpenFileDialog� Code tự viết – không dùng Toolbox
88
OpenFileDialogThuộc tính, ph ương th ứcThuộc tính, ph ương th ức
Thuộc tínhThuộc tính
FileName L ấy tên file được chọn
FileNames L ấy tên t ất cả các file được chọn
Filter Xác định ki ểu file c ần mở
99
Filter Xác định ki ểu file c ần mở
InitialDirectory Th ư mục khởi tạo
Multiselect Cho phép ch ọn nhi ều file
Title Tiêu đề của dialog
Phương th ứcPhương th ức
ShowDialog Hi ển th ị dialog
Sự kiệnSự kiện
FileOk Xu ất hiện khi user kích vào OK
Nội Dung� Giới thiệu Common Dialog� OpenFileDialog�� SaveFileDialogSaveFileDialog� FontDialog
ColorDialog
1010
� ColorDialog� MessageBox� User Control
SaveFileDialog� Sử dụng để tạo file trên đĩa.� Cách sử dụng� Sử dụng SaveFileDialog component trên Toolbox� Tương tự như OpenFileDialog!
� Tạo thể hiện của lớp SaveFileDialog
1111
� Tạo thể hiện của lớp SaveFileDialog
SaveFileDialog� Demo: nhập văn bản vào textbox, sau đó lưu
xuống file *.txt.� Tạo ứng dụng dụng Windows Form có các control� 1 label: caption của textbox� 1 textbox: chứa nội dung text do user nhập
1212
� 1 button: gọi SaveFileDialog và lưu file� 1 SaveFileDialog: khai báo dialog SaveFile.
SaveFileDialog� Thiết kế form
Multiline=trueMultiline=trueDrag & dropDrag & drop
1313
Multiline=trueMultiline=true
SaveFileDialog� Viết phần xử lý cho button “Lưu file”
System.IOSystem.IO
1414
System.IOSystem.IO
SaveFileDialog
1515
SaveFileDialog� Mở rộng bổ sung phần đọc file text từ demo trên� Open file *.txt và hiển thị nội dung của file trên
TextBox.
� Bổ sung thêm button “Mở file” và kéo thành phần OpenFileDialog thả vào form
1616
OpenFileDialog thả vào form
Drag & dropDrag & drop
SaveFileDialog� Viết phần xử lý button “Mở file”
1717
SaveFileDialog� Demo
Hiển thị nội Hiển thị nội dung filedung file
1818
Nội Dung� Giới thiệu Common Dialog� OpenFileDialog� SaveFileDialog�� FontDialogFontDialog
ColorDialog
1919
� ColorDialog� MessageBox� User Control
FontDialog� Chức năng hiển thị hộp thoại chọn font chữ được
install trong máy� Trong ứng dụng làm việc với document, đồ họa…
� Sử dụng FontDialog� Từ ToolBox kéo thả FontDialog vào Form
2020
� Từ ToolBox kéo thả FontDialog vào Form� Sử dụng trong lúc thiết kế
� Khai báo thể hiện FontDialog và hiển thị� Viết code
FontDialogThuộc tính, ph ương th ức thường dùngThuộc tính, ph ương th ức thường dùng
Thuộc tínhThuộc tính
Font Get/set font được chọn
Color Get/set màu c ủa font
ShowColor Hiển th ị hay không hi ển th ị chọn màu
2121
ShowColor Hiển th ị hay không hi ển th ị chọn màu
ShowApply Hi ển th ị/ không button Apply
Phương th ứcPhương th ức
ShowDialog Hi ển th ị dialog ra màn hình
Sự kiệnSự kiện
Apply Kích ho ạt khi user ch ọn apply
FontDialog� Demo: gọi FontDialog thiết lập font cho control� Tạo Form có dạng sau
Label để test fontLabel để test font
Drag & dropDrag & drop
2222
Drag & dropDrag & drop
Button chọn fontButton chọn font
FontDialog� Phần xử lý cho button “Font”
2323
FontDialog
2424
FontDialog� Bổ sung chức năng “Apply” của FontDialog� Khi FontDialog đang hiển thị cho phép user kích
chọn nút Apply ⇒ label thay đổi font theo.
� Cách thực hiện� Khai báo có hiện thị button Apply cho FontDialog
2525
� Khai báo có hiện thị button Apply cho FontDialog� fontDialog1.ShowApply = true
� Đăng ký trình xử lý sự kiện cho button “Apply”� Tạo trình xử lý cho sự kiện “Apply” của FontDialog� Đăng ký trình xử lý cho sự kiện Apply của
FontDialog
FontDialog� Code minh họa
2626
Nội Dung� Giới thiệu Common Dialog� OpenFileDialog� SaveFileDialog� FontDialog
ColorDialogColorDialog
2727
�� ColorDialogColorDialog� MessageBox� User Control
ColorDialog� Hiển thị chức năng chọn màu� Sử dụng theo 2 cách� Kéo ColorDialog từ Toolbox thả vào form…� Viết code tạo đối tượng…
� ColorDialog sử dụng giá trị màu có kiểu Color
2828
� ColorDialog sử dụng giá trị màu có kiểu Color� Màu ARGB� Alpha� Red� Green� Blue
ColorDialog� Demo chọn màu: chọn màu nền cho form
Drag & dropDrag & drop
2929
ColorDialog� Phần xử lý cho button “Color”
3030
Nội Dung� Giới thiệu Common Dialog� OpenFileDialog� SaveFileDialog� FontDialog
ColorDialog
3131
� ColorDialog�� MessageBoxMessageBox� User Control
MessageBox� Hiển thị hộp thoại chứa thông tin chỉ dẫn đến
user� Bao gồm các phần� Text� Button
3232
� Button� Symbol
� Lớp MessageBox có phương thức tĩnh Show để hiển thị dialog.� Bắt giá trị trả về để biết phản ứng của user
MessageBox� Có khoảng 21 phiên bản của Show� Một số phiên bản thường sử dụng
MessageBox.Show (String strText)MessageBox.Show (String strText, String strCaption) MessageBox.Show (String strTex, String strCaption,
MessageBoxButtons mbb)
3333
MessageBox.Show (String strTex, String strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi)
MessageBox.Show (String strTex, String strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi, MessageBoxDefaultButton mbdb)
MessageBox.Show (String strTex, String strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi, MessageBoxDefaultButton mbdb, MessageBoxOptions mbo)
MessageBox� Các button hiển thị theo message� Cho phép user chọn lựa các phản ứng với
message� Được định nghĩa trong MessageBoxButtons
MessageBoxButtonsMessageBoxButtons
3434
MessageBoxButtonsMessageBoxButtonsMember Value
Ok 0
OkCancel 1
AbortRetryIgnore 2
YesNoCancel 3
YesNo 4
RetryCancel 5
MessageBox.Icons
Member Value Image
None 0x00
Hand 0x10
Stop 0x10Stop 0x10
Error 0x10
Question 0x20
Exclamation 0x30
Warning 0x30
Asterisk 0x40
Information 0x40
Slide Slide 3535
MessageBox� Một số các MessageBox minh họa
3636
Ví dụ MessageBox
Ví dụ 1:MessageBox.Show(“Bạn khỏe không?",
“Câu hỏi", MessageBoxButtons.YesNo, MessageBoxIcon.Question);MessageBoxIcon.Question);
Slide Slide 3737
Ví dụ MessageBox
Ví dụ 2: Nhận kết quả chọn YES/NO từ người dùngDialogResult res = MessageBox.Show(“2 lớn hơn 1",
"Thi Nghiem", MessageBoxButtons.YesNo,MessageBoxIcon.Information);MessageBoxIcon.Information);
if (res == DialogResult.Yes)MessageBox.Show("Chọn YES");
elseMessageBox.Show("Chọn NO");
Slide Slide 3838
Nội Dung� Giới thiệu Common Dialog� OpenFileDialog� SaveFileDialog� FontDialog
ColorDialog
3939
� ColorDialog� MessageBox�� User ControlUser Control
User Control� Công việc kéo thả nhóm control thường sử dụng ⇒ nhàm chán� User control phục vụ mục đích tái sử dụng� Vấn đề:� Nhóm control phục vụ cho việc login thường xuất
4040
� Nhóm control phục vụ cho việc login thường xuất hiện trong ứng dụng
� Yêu cầu:� Tạo nhóm control phục vụ cho việc login� Nhóm control này bao gồm� 2 label� 2 textbox
User Control� Bước 1: Tạo ứng dụng Windows Control Library
4141
User Control� Bước 2: thiết kế user control như sau
2 TextBox2 TextBox
4242
2 Label có chứa image2 Label có chứa image
2 TextBox2 TextBox
User Control� Khai báo các property cho user control� Mỗi property gắn với textBox� UserName gắn với txtUID� Password gắn với txtPwd
4343
User Control� Biên dịch user control� Kết quả được file assembly có phần mở rộng là
DLL� Sử dụng user control trong client app� Add vào phần References của project
4444
� Add vào phần References của project� Tạo đối tượng user control, add vào form…
� Add vào ToolBox | Choose Items…� Kéo user control thả vào form, code phát sinh tự động
User Control� Tạo ứng dụng Test User control� Tạo ứng dụng Windows Form� Thêm User Control vào ToolBox� Kích chuột phải vào ToolBox� Chọn chức năng Choose Items…
4545
Chọn chức năng Choose Items…� Chọn file DLL của User control vừa tạo
� Kéo user control thả vào form
User Control� Kéo thả user control vào form
Drag & dropDrag & drop
4646
Phát sinh code Phát sinh code trong designer.cstrong designer.cs
User Control� Sử dụng User Control như control bình thường
trên form.� Truy cập user control HIENLTHLogin thông qua 2
property đã định nghĩa khi xây dựng control này� UserName: là textBox User Name
4747
� UserName: là textBox User Name� Password: là nội dung của textBox Password
Tóm tắt� Common Dialog� OpenFileDialog - SaveFileDialog� FontDialog - ColorDialog
� MessageBox� Khai báo và sử dụng
4848
� Khai báo và sử dụng� MessageBoxIcon� MessageBoxButtons
� User control� Xây dựng user control� Sử dụng user control
http://fit.hcmup.edu.vn/~hienlth/CShape
Làm việc với FileLương Trần Hy Hiến
http://fit.hcmup.edu.vn/~hienlth/CShape
http://sites.google.com/a/hcmup.edu.vn/hienlth
Nội dung� Quản lý file� Move, Copy, Delete file� Đọc/Ghi file
2
Quản lý file� .NET hỗ trợ các thao tác làm việc với file:� Các tác vụ thông thường: liệt kê, sao chép, di chuyển,
xóa,…� Các thao tác với file nằm trong namespace System.IO� Các lớp quan trọng: File, FileInfo, Directory, Path,…
� Làm việc với file và folder: Có 2 loại:
3
� Làm việc với file và folder: Có 2 loại:� Direcory và File: chỉ chứa các phương thức tĩnh, không
thể khởi tạo. Thường dùng khi chỉ thực hiện 1 thao tác với 1 file hoặc 1 folder. Khi thao tác cần cung cấp đường dẫn đến file hay folder cần làm việc.� DirectoryInfo và FileInfo: cung cấp phương thức như 2 đối tượng trên nhưng đòi hỏi phải có instance. Thường dùng khi thực hiện nhiều thao tác với 1 file hoặc folder.
Quản lý file (tt)Tên Ý ngh ĩa
CreationTime Thời gian tạo file hoặc folder
DirectoryName (FileInfo),Parent (DirectoryInfo)
Đường dẫn đầy đũ của folder chứa file hoặc folder hiện thời
Exists File hay folder có tồn tại hay không?
Extension Phần mở rộng
4
Extension Phần mở rộng
FullName Tên đầy đủ, cả đường dẫn
LastAccessTime Thời gian lần truy cập cuối
LastWriteTime Thời gian lần sữa chửa cuối
Name Tên file hay folder
Root Folder gốc (chỉ với DirectoryInfo)
Length Dung lượng (bytes), chỉ với FileInfo
Quản lý file (tt)//khởi tại biến myFile trỏ đến tập tin
FileInfo myFile = new FileInfo(@"d:\\HyHienProfile.txt");
//sao chép sang ổ đĩa E
myFile.CopyTo(@"E:\\test.txt");
//kiểm tra sự tồn tại
MessageBox.Show(myFile.Exists.ToString());
5
MessageBox.Show(myFile.Exists.ToString());
//thông tin thời điểm tạo file
MessageBox.Show(myFile.CreationTime.ToString());
//cập nhật thời điểm tạo file
myFile.CreationTime = new DateTime(2009, 7, 27, 12, 0, 0);
Quản lý file (tt)DirectoryInfo theFolder = new DirectoryInfo(folderFullName);if (!theFolder.Exists)
throw new DirectoryNotFoundException("Folder not found: " + folderFullName);
string currentPath = theFolder.FullName;//Lấy tên các thư mục con của thư mục hiện thời
6
ArrayList folders = new ArrayList();foreach (DirectoryInfo folder in theFolder.GetDirectories())
folders.Add(folder.Name);
//Lấy tên các file trong thư mục hiện thờiArrayList files = new ArrayList();foreach (FileInfo file in theFolder.GetFiles())
files.Add(file.Name);
Moving , Copying, and Deleting Files� Có thể sao chép, di chuyển hoặc xóa file.� Phương thức Path.Combine(string, string): trả về
tên đầy đủ của file tạo từ đường dẫn và tên file.� Phương thức File.Delete(string): xoá tập tin.� Phương thức File.Move(string, string): di chuyển file
7
� Phương thức File.Move(string, string): di chuyển file từ vị trí cũ đến vị trí mới.� Phương thức File.Copy(string, string): sao chép file
sang thư mục mới
Đọc ghi file� Dựa trên khái niệm stream (luồng dữ liệu):� stream là đốo tượng dùng để chuyển dữ liệu. Do đó
stream có thể là luồng dựa trên bộ nhớ, trên tập tin, trên mạng,…� FileStream: đối tượng dùng để đọc ghi file nhị phân.
8
� FileStream: đối tượng dùng để đọc ghi file nhị phân.� StreamReader và StreamWriter: đối tượng dùng để
đọc ghi file text� Chú ý: Các tác vụ đọc ghi hầu hết đều sử dụng
buffer. Do đó, với tác vụ ghi, phải đẩu dữ liệu từ buffer lên đĩa trước khi đóng file.
Đọc ghi file nh ị phân� Hàm tạo: chỉ cần chỉ ra filename, FileMode,
FileAccess, FileShare.� FileMode: kiểu mở file, có thể là Append, Create,
CreateNew, Open, OpenOrCreate hoặc Truncate.� FileAccess: kiểu truy cập, có thể là Read, ReadWrite
hoặc Write.� FileShare: kiểu chia sẽ giữa các thread, có thể là
9
� FileShare: kiểu chia sẽ giữa các thread, có thể là Inheritable, None, Read, ReadWrite hoặc Write.
� Để đọc và ghi byte, dùng các hàm:� ReadByte(): đọc 1 byte từ stream� WriteByte(byte): ghi 1 byte vào stream� Read/Write(byte[], int off, int count): đọc/ghi một mảng
byte bắt đầu từ off, độ dài count� Close(): Đóng file
Đọc ghi file v ăn bản� Dùng StreamReader và StreamWriter� Có thể khởi tạo StreamReader dựa trên:� Tên file cần đọc� Một FileStream khác� Một FileInfo với phương thức OpenText()
� Có thể khởi tạo StreamWriter dựa trên:
10
� Có thể khởi tạo StreamWriter dựa trên:� Tên file cần đọc, mã encode� Một FileStream khác� Một FileInfo với phương thức CreateText()
� Để đọc và ghi, dùng các hàm:� Read() hoặc Write(): đọc hoặc ghi 1 ký tự� ReadLine() hoặc WriteLine(): đọc hoặc ghi 1 dòng� ReadToEnd(): đọc đến hết file
VD: Hàm ghi file v ăn bảnvoid GhiFileText(string sfilename, string chuoi)
{
FileStream fstream = new FileStream(sfilename, FileMode.Append, FileAccess.Write, FileShare.None);
StreamWriter mywriter = new StreamWriter(fstream);
mywriter.WriteLine(DateTime.Now.ToString() + " - " + chuoi);
11
mywriter.WriteLine(DateTime.Now.ToString() + " - " + chuoi);
mywriter.Close();
fstream.Close();
}
VD: Hàm đọc file v ăn bảnstring DocFileText(string sfilename)
{
StreamReader myreader = null;
string result = string.Empty;
try {
myreader = new StreamReader(sfilename);
12
myreader = new StreamReader(sfilename);
result = myreader.ReadToEnd();
} catch {
throw;
} finally {
if(myreader != null) myreader.Close();
}
return result;
}
Lương Trần Hy Hiến
GRAPHICS – GDI+
Lương Trần Hy Hiế[email protected]
Nội dung� GDI+� Chương trình vẽ cơ bản trên Form� Lớp Graphics và hàm OnPaint()� Lớp Color và Font
Lớp Pen và Brush� Lớp Pen và Brush� Các hàm vẽ đường thẳng, hình chữ nhật, ellipse� Các hàm vẽ cung, đa giác� Hiển thị ảnh� Minh họa Multimedia
2
Tổng quan� Thư viện giúp “vẽ” lên màn hình hoặc máy in mà
không cần quan tâm đến cấu trúc phần cứng → độc lập thiết bị
� GDI+ bao gồm 3 nhóm “dịch vụ” chính:� 2D vector graphics : cho phép tạo hình từ các hình � 2D vector graphics : cho phép tạo hình từ các hình
cơ bản (primitive): đường thẳng, tròn, eclipse, đường cong,…� Imaging : làm việc với các tập tin hình ảnh (bitmap,
metafile)� Typography : vẽ chữ
3
System.Drawing
structure
class
System.Drawing
Font
FontFamily
GraphicsGraphics
Icon
Color
Point
Rectangle
key
Icon
Pen
Region
SolidBrush
TextureBrush
Image
Brush
HatchBrush
LinearGradientBrush
PathGradientBrush
SolidBrush
TextureBrush
Size
4
Vẽ trên Form
public partial class Form1 : Form{
public Form1(){
InitializeComponent();InitializeComponent();}protected override void OnPaint(PaintEventArgs e){
Graphics g = e.Graphics;g.DrawStringDrawString("Hello GDI!", Font, Brushes.Red, 20, 20);
}}
5
Graphics� Lớp Graphics thể hiện� “AbstractAbstract” drawing surface� Tập hợp những “tooltool” cho phép thao tác trên
surface đó
� Để lấy đối tượng Graphics� Để lấy đối tượng Graphics� Sử dụng thuộc tính Graphics được truyền cho
OnPaint()� Sử dụng phương thức CreateGraphics() của control� Lấy từ đối tượng dẫn xuất từ Bitmap
� Gọi hàm Invalidate() thay vì OnPaint()
6
Lấy đối tượng Graphics
protected override void OnPaint(PaintEventArgs paintevent){
Graphics graf=paintevent.Graphics;}
private void mainForm_Paint(object sender, PaintEventArgs paintevent)
{Graphics graf=paintevent.Graphics;
}
Từ tham số PaintEventAtgs
7
Lấy đối tượng Graphics
private void PaintMe(Control testcontrol){
Graphics graf=testcontrol.CreateGraphics();. . .
}
Lấy từ control
protected override void OnPaint(PaintEventArgs paintevent) {
Bitmap bmpimage=new Bitmap(“hoalan.jpg"); Graphics graf = Graphics.FromImage (bmpimage); ...
}
Lấy từ control
Lấy từ ảnh8
DrawString() method� Hiển thị text trong Graphics cụ thể� Có nhiều phiên bản
�� DrawString(DrawString( String text,String text, // Text th// Text thểể hihiệệnnFont f,Font f, // Font // Font Font f,Font f, // Font // Font Brush b,Brush b, // Color & texture// Color & texturefloat float x, x, float yfloat y);); // v// vịị trí góc trái trí góc trái
trêntrên
� Tham số Font và Brush không có mặc định nên phải truyền vào.
9
Tọa độ hệ thống
(0,0) (w,0)Gốc tọa độ
(0,0)(w1,0)
Control
(0,h) (w,h)
(0,h1) (w1,h1)Form, Panel, GroupBox
10
Tọa độ hệ thống� Graphics.PageUnit: xác định đơn vị của bề mặt� GraphicsUnit.Pixel (default)� GraphicsUnit.Inch� GraphicsUnit.Milimeter� GraphicsUnit.Point� GraphicsUnit.Point
� Graphics.PageScale: tỷ lệ output� g.PageScale = 1f (default)
11
Color� Sử dụng màu được định nghĩa trong Color� Color.Blue, Color.Red, Color.White…
� Sử dụng màu định nghĩa cho hệ thống� SystemColors.Control, SystemColors.ControlText…
� Sử dụng màu ARGB� Sử dụng màu ARGB� 32 bit để thể hiện màu� A (alpha) thể hiện mức độ trong suốt (255 opaque)� RGB là Red, Green và Blue� Tạo màu sử dụng hàm FromArgb()� Color red = Color.FromArgb(255,0,0);� Color blue = Color.FromArgb(128, 0, 255, 0);
12
Tóm tắt một số hằng số Tóm tắt một số hằng số ColorColorHằng số trong cấu trúc Color Giá trị RGB
Orange 255, 200, 0
Pink 255, 175,175
Cyan (Green Blue) 0, 255, 255
Magenta (Red Blue) 255, 0, 255Magenta (Red Blue) 255, 0, 255
Yellow 255, 255, 0
Black 0 , 0, 0
White 255, 255, 255
DarkGray 64, 64, 64
Red 255, 0 , 0
Green 0, 255, 0
Blue 0, 0, 25513
Sử dụng Sử dụng ColorDialogColorDialog để chọn màu để chọn màu từ bảng màutừ bảng màu
� Tạo đối tượng ColorDialogColorDialog colorChooser = new
ColorDialog();
�Hàm hiển thị Dialog:colorChooser .ShowDialog ();
14
Thuộc tính Thuộc tính FullOpenFullOpen của của ColorDialogColorDialog
� public virtual bool FullOpen { set; get; }� Tóm tắt:
Gets or sets một giá trị chỉ ra rằng liệucontrol sử dụng để tạo ra màu riêng có hiện ra hay không khi hộp dialog được mở hay không khi hộp dialog được mở � Return:
true nếu contral màu riêng thì có sẵn khi hộp dialog được mở; ngược lại, false. Giá trị mặc định là false.
15
FullOpen
FullOpen = true
FullOpen = false
16
DemoDemo
17
FONT & STRING
18
Font và String� Các khái niệm cơ bản� Font� Các khái niệm về Font� Lớp Font� Lớp FontFamily
� String� Một số thành phần liên quan đến chuỗi ký tự� Lớp StringFormat� Lớp TextRenderer
19
Các khái ni ệm cơ bản� Bộ ký tự� Trang mã� Bộ ký tự Unicode
20
Bộ ký tự và trang mã� Bộ ký tự (character set)� Bộ mã bàn phím cố định mà một hệ máy tính cụ thể đang sử dụng.
� Trang mã (code page)� Trang mã chứa 1 bộ các ký tự ứng với hệ bộ ký tự � Trang mã chứa 1 bộ các ký tự ứng với hệ bộ ký tự
nào đó của môt hoặc nhiều ngôn ngữ.� Phần lớn các trang mã chứa 256 ký tự
21
Các khái ni ệm về Font� Định nghĩa Font� Kiểu Font và Họ Font� Các loại Font trên HĐH Windows� Các thông số Font
Độ đo Font� Độ đo Font
22
Định ngh ĩa Font� Tập hợp hoàn chỉnh� các chữ cái� các dấu câu� các con số� Các ký tự đặc biệt
theo một:� kiểu loại� trọng lượng (thường hoặc đậm nét)� dáng bộ (thẳng hoặc nghiêng)
với kích cỡ phù hợp và có thể phân biệt khác nhau.
23
Định ngh ĩa Font (tt)� Một font có thể được cung cấp bởi 1 hoặc nhiều
trang mã� Mỗi font thường được lưu trong 1 file font� Mỗi font thường được đặt 1 tên. � Ví dụ: font Times New Roman Bold, � Ví dụ: font Times New Roman Bold,
font Courier New Italic
24
Kiểu Font và h ọ FontTên Font = Họ Font + ( Kiểu Font )
Font name = Font family + (Typestyle)Ví dụ:Họ font Times New Roman chứa 4 font khác nhau:
Times New Roman� Times New Roman
� Times New Roman Italic
� Times New Roman Bold� Times New Roman Bold Italic
25
Các lo ại Font trên H ĐH Windows� Bitmap Font� Vector Font� TrueType Font� OpenType Font
26
Bitmap Font� Dùng hình ảnh để hiện thị các điểm ảnh của 1 ký
tự� Thường là những file có dạng *.fon� Khi hiển thị ký tự có kích thước lớn thường bị nát
hìnhhình
27
Vector Font � Dùng các đoạn thẳng nối với nhau để hiển thị ký
tự� Thường là những file có dạng *.fnt� Mặc dù hiển thị ký tự có kích thước lớn tốt hơn
bitmap font nhưng vẫn chưa có được độ sắc nét bitmap font nhưng vẫn chưa có được độ sắc nét cao
28
TrueType Font� Dùng các đoạn thẳng và đoạn cong nối với nhau
để hiển thị ký tự� Thường là những file có dạng *.ttf� Hiển thị ký tự có kích thước lớn với độ sắc nét
caocao� thường dùng
29
OpenType Font� Là chuẩn định dạng font kết hợp 2 loại định dạng
font có sẵn: Type 1 (PostScript) font và TrueType font� Độc lập với hệ điều hành (cross-platform)� Hỗ trợ nhiều loại ngôn ngữ trong 1 font� Thường là những file có dạng *.otf� Trong Windows, TrueType Font có biểu tượng là
chữ TT, còn OpenType Font là chữ O
30
Thông s ố Font (Font Metric)
xy1Õ ascent
leading
heightxy1Õdescentbaseline
31
Độ đo FontFont được đo bởi nhiều độ đo:� pixel: phần tử nhỏ nhất của ảnh mà 1 thiết bị có
thể hiển thị (màn hình, máy in)� point: 1 point = 1/72 inch trong in ấn� em: độ rộng của chữ M ứng với kiểu chữ đang � em: độ rộng của chữ M ứng với kiểu chữ đang
dùng� design unit: dùng để đo kích cỡ 1 họ font bằng độ
đo point khi bị thay đổi kích thước
32
Class Font� Mô tả lớp Font� Các thuộc tính lớp Font� Các hàm khởi tạo lớp Font� Tập hợp FontStyle� Tập hợp GraphicsUnit� Tập hợp GraphicsUnit
� Các phương thức lớp Font� Các ví dụ
33
Mô tả lớp Font� Dùng để xác định cách định dạng văn bản� Bao gồm các thuộc tính cách thể hiện, kích thước
kiểu dáng thước, kiểu dáng� Không cho phép kế thừa
� Namespace: System.Drawing� Assembly: System.Drawing (in dll)
34
Thuộc tính c ủa FontThuộc tính Mô tả Bold Kiểm tra xem Font có được in đậm hay không.
FontFamily Thông tin về FontFamily của Font
Height Chiều cao của Font Italic Kiểm tra xem Font có được in nghiêng hay không Name Tên của Font Name Tên của Font Size Kích thước của Font, kiểu float
Strikeout Kiểm tra Font có in gạch ngang hay không.
Underline Kiểm tra Font có in gạch dưới hay không.
35
FontFamily Class� Mô tả lớp FontFamily� Các thuộc tính lớp FontFamily� Các hàm khởi tạo lớp FontFamily� Tập hợp GenericFontFamilies
� Các phương thức lớp FontFamily� Các phương thức lớp FontFamily� Các ví dụ
36
Mô tả lớp FontFamily� Xác nhận một nhóm các font được thiết kế về
cách thể hiện và kiểu dáng tương tự nhau� Không cho phép kế thừa
� Namespace: System.Drawing� Namespace: System.Drawing� Assembly: System.Drawing (in dll)
37
Các thuộc tính FontFamilyThuộc tính Miêu t ả
FamiliesTrả về một mảng tất cả các font families liên kết với ngữ cảnh đồ họa hiện thời
GenericMonospace Trả về font family đơnGenericMonospace Trả về font family đơn
GeneriicSansSerif Trả về font không có chân chử
GenericSerif Trả về font có chân chử
Name Trả về tên của font families
38
Các phương thức FontFamily
39
Các phương thức FontFamilyPhương th ức Miêu t ả
GetCellAscent trả về phần chử bên trên đường baseLine
GetCellDecent trả về phần chử bên dưới đường baseLine
GetEmHeigth Trả về chiều cao
GetFamiliesTrả về mảng chứa tất cả các giá trị của font families
GetFamiliesfamilies
GetLineSpacing Trả về khoảng cách giữa hai dòng liên tiếp
GetName Trả về tên của font family
IsStyleAvailable
Kiểm tra giá trị style của fontví dụ: FontFamily ff = new FontFamily("Arial");
if(ff.IsStyleAvailable(FontStyle.Italic))//xử lý
40
Ví dụ� Khởi tạo một Font://tạo FontFonttnwFont = new Font(“Times New Roman”,12);
//tạo FontFamilyFontFamily arialFont = new FontFamily(“Arial”);
Font fa = new Font("Font fa = new Font("Times New RomanTimes New Roman", 8);", 8);Font fb = new Font("Font fb = new Font("ArialArial", 36, FontStyle.Bold);", 36, FontStyle.Bold);Font fc = new Font(fb, FontStyle.Bold | FontStyle.Italic);Font fc = new Font(fb, FontStyle.Bold | FontStyle.Italic);Font fd = new Font("Font fd = new Font("ArialArial", 1, GraphicsUnit.Inch);", 1, GraphicsUnit.Inch);
Size = 8 pixel
Size = 1 inch41
Pen� Xác định width, style, fill style � Không cho kế thừa, nhưng tạo thể hiện được� Trong namespace System.Drawing
�� Pen p1 = new Pen(Color.Green);Pen p1 = new Pen(Color.Green);�� Pen p1 = new Pen(Color.Green);Pen p1 = new Pen(Color.Green);Pen p2 = new Pen(Color.blue, 10); Pen p2 = new Pen(Color.blue, 10);
� Sử dụng lớp Pens có 141 pen được định nghĩa trước.
�� Pen p3 = Pens.Violet;Pen p3 = Pens.Violet;
42
Pen (tt)� Dùng Pen có sẵn thông qua Pens� Pens.AliceBlue� Pens.Aqua� Pens.Black� Pens.Black� Pens.Brown�…
� Dùng Pen do tự tạo thông qua lớp Pen� new Pen(Brush)� new Pen(Color)� new Pen(Color, Width)
43
Pen (tt)
44
Brush� Dùng để tô vùng bên trong của hình� Lớp Brush là lớp Abstract nên không tạo thể hiện� Sử dụng các lớp kế thừa sau để tạo brush� SolidBrush� LinearGradientBrush� LinearGradientBrush� TextureBrush� HatchBrush
� Sử dụng lớp Brushes định nghĩa trước các brush.
45
Brush
SolidSolid
HatchHatch
LinearGradientLinearGradient
TextureTexture
46
Bursh� Demo
Solid Hatch
LinearGradient
Texture
47
VẼ CÁC ĐƯỜNG
2D vector graphics� Pen & brush
Pen, Pens, SystemPensBrush, Brushes, SystemBrushes,SolidBrushes, TextureBrushes, (System.Drawing.Drawing2D)
� Polygon
(System.Drawing.Drawing2D)HatchBrush, LinearGradientBrush,PathGradientBrush
DrawLine DrawLines DrawRectangleFillRectangle
DrawPolugonFillPolygon 49
2D vector graphics� ellipse, arc, cardinal spline, bezier spline
DrawBezierDrawBeziers
50
2D vector graphics� Path: kết hợp nhiều loại đường nét thành một đối
tượng duy nhất. Các “nét” không nhất thiết phải liền nhau.
� GraphicsPath (AddLine, AddCurve, …)� Graphics.DrawPath� Graphics.FillPath
51
Line, Rectangle, Ellipse�� DrawLineDrawLine� (Pen p, int x1, int y1, int x2, int y2)
�� DrawRectangleDrawRectangle� (Pen p, int x, int y, int width, int height)
�� DrawEllipseDrawEllipse�� DrawEllipseDrawEllipse� (Pen p, int x, int y, int width, int height)
�� FillRectangleFillRectangle� (Brush b, int x, int y, int width, int height)
�� FillEllipseFillEllipse� (Brush b, int x, int y, int width, int height)
52
Line, Rectangle, Ellipse
53
Image� Lớp Image hiển thị các ảnh bitmap� Các dạng ảnh: *.bmp, *.gif, *.jpg, *.ico…
� Phương thức static FromFile tạo ảnh từ file� Image img = Image.FromFile(“hutech.bmp”);� Image img2 = Image.FromFile(“hutech.gif”);� Image img2 = Image.FromFile(“hutech.gif”);
� Phương thức DrawImage xuất ảnh lên Graphics� g.DrawImage(img, 10, 10);� G.DrawImage(img2, 10, 10, 100,100); // scale trong
hình chữ nhật kích thước 100x100
54
Image
55
Image
Ellipse được vẽ lên ảnh, rồi sau đó với vẽ ảnh lên Form
56
Minh h ọa 1� Custom lại nền của Form
Override phương thức OnPaintBackground của Form
57
Form c ó dạng NonRectangle� Tạo form có hình dạng khác hình chữ nhật� Sử dụng thuộc tính TransparencyKey của Form� Sử dụng các hiệu ứng màu được tô
58
Form c ó dạng NonRectangle� Bước 1:� Tạo ứng dụng Windows Application� Thiết kế Form có dạng như sau
FormBorderStyle = noneFormBorderStyle = none
59
Form c ó dạng NonRectangle� Bước 2:� Thiết lập các thuộc tính cho Form như sau:� TransparencyKey = Control: màu sẽ trong suốt khi vẽ trên
Form� FormBorderStyle = None: Form không có đường biên
Thiết lập màu nền cho 2 Label là Transparent� Thiết lập màu nền cho 2 Label là Transparent� Phần background của 2 label sẽ tiệp với nền bên dưới
60
Form c ó dạng NonRectangle� Bước 3: Tạo trình xử lý cho sự kiện Paint
61
Form c ó dạng NonRectangle� Demo
Vùng của Form
Vùng ngoài Form
62
Multimedia
� Tạo ứng dụng chứa Windows Media Player control cho phép�Play các file video và sound theo nhiều
dạng format� MPEG (Motion Pictures Expert Group): video� MPEG (Motion Pictures Expert Group): video� AVI (Audio-video Interleave): video�WAV (Windows Wave-file Format): audio� MIDI (Musical Instrument Digital Interface): audio
63
Multimedia� Bước 1: bổ sung Windows Media Player vào
ToolBox� Kích chuột phải vào ToolBox ->chọn Choose
Items…� Trong Dialog Choose Toolbox Items chọn COM � Trong Dialog Choose Toolbox Items chọn COM
Components� Chọn Windows Media Player
� Khi đó control WMP sẽ hiện ở dưới cùng của ToolBox
64
Multimedia� Bước 2: kéo Windows Media Player thả vào Form� Thiết lập Dock = Fill
Dock = Fill
Đổi tên control thành WMPlayer
65
Multimedia� Bước 3: Tạo MenuStrip để bổ sung chức năng
Open File media
66
Multimedia� Bước 4: viết trình xử lý cho Menuitem Open
67
Multimedia� Demo
68
Hien Luong Tran-Hy
MDI Application
(Multiple Document Interfaces)
Hien Luong Tran-Hy
Windows Form
There are basically two types of document :- Single Document Interface (SDI)- Multiple Document Interface (MDI)
2
Single Document Interfaces� Chỉ hỗ trợ một document hoặc một cửa sổ tại một
thời điểm.
� Dạng ứng dụng như NotePad, MS Paint với các đặc tính xử lý ảnh và văn bản giới hạn.
� Để làm việc với nhiều tài liệu thì phải mở các instance � Để làm việc với nhiều tài liệu thì phải mở các instance khác của ứng dụng.
� Việc quản lý ứng dụng SDI khá đơn giản.
Khái ni ệm cơ bản về MDI� Multiple Document Interface (MDI) là một đặc tả
quản lý tài liệu trong Microsoft Windows.� Mô tả một cấu trúc cửa sổ và giao diện người
dùng cho phép người sử dụng làm việc với nhiều tài liệu trong một ứng dụng đơn.tài liệu trong một ứng dụng đơn.
4
Khái ni ệm cơ bản về MDI� Đặc tả MDI đã xuất hiện từ Windows 2.0, nhưng
các ứng dụng MDI lúc đó rất khó viết và cần nhiều công sức lập trình.� Từ Windows 3.0 trở đi, nhiều chức năng đã được
mở rộng và hỗ trợ được đưa vào.mở rộng và hỗ trợ được đưa vào.
5
Các thành ph ần MDI� Cửa sổ ứng dụng chính của một chương trình
MDI theo kiểu cổ điển gồm có:� Thanh tiêu đề.� Một trình đơn.� Một đường viền thay đổi kích thước.� Một đường viền thay đổi kích thước.� Một icon trình đơn hệ thống.� Các nút minimize/maximize/close.
6
� Vùng client thường được gọi là “workspace” và không sử dụng trực tiếp để hiển thị output của chương trình.
� Workspace có thể không chứa hay chứa nhiều cửa sổ con, mỗi cửa sổ con hiển thị một tài liệu.
� Các cửa sổ con rất giống các cửa sổ ứng dụng bình thường và các cửa sổ ứng dụng chính của một chương thường và các cửa sổ ứng dụng chính của một chương trình MDI
� Ở tại một thời điểm, chỉ một cửa sổ tài liệu được kích hoạtvà nó xuất hiện trước tất cả các cửa sổ tài liệu khác.
� Tất cả các cửa sổ tài liệu con được giới hạn bởi vùng workspace và không bao giờ xuất hiện bên ngoài cửa sổứng dụng.
7
SDI vs MDI
SDI MDI
8
MDIParent’s icons: minimize,
maximize and closeParent’s title bar displays
maximized child
Minimized child’s icons:
restore, maximize and close
Maximized child’s icons:
restore, maximize and close
9
MDI
Child windows list
9 or more child windows
enables the More
Windows... option10
Multiple Document Interface� MDI Parent Window – MDI Child Window
Parent windowParent window
MDI ApplicationMDI Application
Chỉ có duy nhất một parent windows
Child window
Child window
Child window
Parent windowParent windowwindows
Có nhiều child windows
Multiple Document Interface� Cách tạo MDI Form� Tạo form và thiết lập thuộc tính IsMdiContainer =
true, khi đó form sẽ thay đổi cách thể hiệnSDI Form MDI Form
Multiple Document Interface� Add form con vào form chính� Tạo đối tượng của form con� Thiết lập thuộc tính MdiParent của form con là form
chính� Gọi phương thức Show của form con� Gọi phương thức Show của form con
� Một cách tổng quát để add form con vào form chính
ChildFormClass childForm = new ChildFormClass(); ChildFormClass childForm = new ChildFormClass(); childForm.childForm.MdiParentMdiParent = = <thể hiện của form cha><thể hiện của form cha>; ; childForm.childForm.ShowShow(); ();
Lớp form conLớp form con
Thiết lập form cha (nếu đang Thiết lập form cha (nếu đang ở trong form cha thì dùng đối ở trong form cha thì dùng đối tượng this)tượng this)Hiển thị form conHiển thị form con
Tạo đối tượng cho Tạo đối tượng cho lớp form con lớp form con
13
Multiple Document InterfaceThuộc tính, ph ương th ức và sự kiệnThuộc tính, ph ương th ức và sự kiện
Thuộc tính c ủa MDI childThuộc tính c ủa MDI child
IsMdiChild Cho bi ết form là child hay không
MdiParent Xác định form cha c ủa form
Thuộc tính c ủa MDi parentThuộc tính c ủa MDi parent
ActiveMdiChild Tr ả về form con đang active
IsMdiContainer Xác định form là MDI parent ho ặc không
MdiChildren Tr ả về mảng ch ứa các form con
Phương th ứcPhương th ức
LayoutMdi Xác định cách hi ển th ị các form con
Sự kiệnSự kiện
MdiChildActivate Xu ất hiện khi child form đóng ho ặc active
14
Multiple Document Interface� Trạng thái Minimize, Maximize và Close
Icon của parent: minimize, maximize, close
Icon của child: minimize, restore, close
Icon của child: restore, maximize, close
Title của parent chứa tên child đang maximize
15
Sắp xếp các MDI� Để tạo một danh sách các MDI Child, chỉ cần
thêm một top-level menu item (thường mang tênWindow) rồi cho thuộc tính MdiList = true.� Bộ máy Windows.Forms sẽ tự động thêm một
item vào cuối submenu cho mỗi cửa sổ MDIitem vào cuối submenu cho mỗi cửa sổ MDIChild.� Mỗi MDI container đều hỗ trợ hàm LayoutMdi()
hàm này nhận giá trị từ Enumeration MdiLayout và sắp xếp tự động các cửa sổ.
16
� Đoạn chương trình sắp xếp theo kiểu Cascadeprivate void mnuCascade_Click ( Object sender,
System.EventArgs e){
this.LayoutMdi (MdiLayout.Cascade)}}� Đoạn chương trình sắp xếp theo kiểu Tile Horizontalprivate void mnuTile_Click ( Object sender ,
System.EventArgs e){
this.LayoutMdi (MdiLayout.TileHorizontal)}
17
Multiple Document Interface� Sắp đặt các child form
TileHorizontal TileVerticalCascade
18
� Ngoài ra, có thể tạo ra các cách sắp xếp riêng tùy theo mỗi ứng dụng.� Ví dụ, đoạn chương trình sau cho phép thu nhỏ
lại tất cả các cửa sổ đang mở.void mnuMinimizeAll_Click (Object sender,
System.EventArgs e)System.EventArgs e){
foreach (Form frm in this.MdiChildren)frm.WindowState =
FormWindowState.Minized;}
19
Ví dụ MDI minh ho ạ :
20
CodingViết sự kiện cho Menu New:
frmChildForm frmChil = new frmChildForm();frmChil.MdiParent = this;frmChil.Show();
Viết sự kiện cho Menu Close Form:if (this.ActiveMdiChild != null)if (this.ActiveMdiChild != null)
this.ActiveMdiChild.Close();Viết sự kiện cho Menu Close All Form:
foreach (Form frm in this.MdiChildren){
frm.Dispose();}
21
CodingViết sự kiện cho Menu Window Cascade:
this.LayoutMdi(MdiLayout.Cascade);
Viết sự kiện cho Menu Window Horizontal:this.LayoutMdi(MdiLayout.TileHorizontal);
Viết sự kiện cho Menu Window Verital:this.LayoutMdi(MdiLayout.TileVertical);
Chạy và th ử nghi ệm ứng dụng
22
Bài t ập MDI� Tạo ứng dụng MDI: PixView xem ảnh� Tạo ứng dụng MDI trong đó� Form cha� Chức năng open: mở file ảnh từ đĩa� Gọi form con hiển thị ảnh� Gọi form con hiển thị ảnh� Cho phép sắp xếp các cửa sổ con
� Form con� Lấy thông tin file từ form cha� Hiển thị file ảnh lên PictureBox
23
Multiple Document Interface� Bước 1: Tạo ứng dụng Windows App� Thiết lập Form1 là form cha
MDI
24
� Bước 2: tạo form con� Trong cửa sổ Solution Explorer kích chuột phải lên
tên Project� Chọn Add -> Windows Form� Đặt tên cho form con
Multiple Document Interface
� Đặt tên cho form con
25
Multiple Document Interface� Bước 3: bổ sung control PictureBox vào Form2� Thiết lập các thuộc tính cho PictureBox� Dock = Fill� SizeMode = CenterImage
26
Multiple Document Interface� Bước 4: bổ sung constructor cho form2, � Constructor này có tham số là tên file cần mở
27
Multiple Document Interface� Bước 5: tạo menu cho form chính (Form1)� Kéo MenuStrip thả vào Form1� Tạo các top menu: � File� Open� Open� Exit
� Window� Cascade� TileHorizontal� TileVertical
28
Multiple Document Interface� Bước 6: viết phần xử lý cho menu item “Open”� Trong màn hình thiết kế kích đúp vào menu item
Open� VS.NET sẽ tạo trình xử lý cho menu item� Phần xử lý được mô tả như sau� Phần xử lý được mô tả như sau� Mở dialog để chọn file� User chọn 1 file ảnh� Lấy đường dẫn file ảnh � Tạo mới đối tượng form2 truyền tham số đường dẫn file� Thiết lập liên kết giữa form cha và form con� Hiển thị form2 ra màn hình
29
Multiple Document Interface� Đoạn code minh họa xử lý cho menu item “Open”
30
Multiple Document Interface� Bổ sung các chức năng sắp xếp form con� Kích đúp vào các menu item tương ứng trên menu
Window� Viết các xử lý cho các menu item� Gọi hàm LayoutMdi với các tham số tương ứng� Gọi hàm LayoutMdi với các tham số tương ứng
31
Multiple Document Interface
32
Đại học Sư phạm Tp. Hồ Chí MinhKhoa Toán – Tin học LẬP TRÌNH WINDOWSLẬP TRÌNH WINDOWS
Lập trình cơ sở dữ liệu Lập trình cơ sở dữ liệu với thư viện với thư viện ADO.NETADO.NET
Lương Trần Hy Hiến - Email: [email protected]
• Tổng quan về lập trình CSDL
• Thư viện ADO.NET
• Lập trình CSDL với ADO.NET
Đại học Sư phạm Tp. Hồ Chí MinhKhoa Toán – Tin học LẬP TRÌNH WINDOWSLẬP TRÌNH WINDOWS
Lập trình cơ sở dữ liệu Lập trình cơ sở dữ liệu với thư viện với thư viện ADO.NETADO.NET
• Tổng quan về lập trình CSDL
• Thư viện ADO.NET
• Lập trình CSDL với ADO.NET
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L • Hệ thống quản lý học sinh: lưu trữ thông tin liên quan đến học sinh
• Hệ thống quản lý sinh viên: lưu trữ thông tin liên quan đến sinh viên
• Hệ thống quản lý nhân sự: lưu trữ thông tin liên quan đến nhân viên trong công ty
Ứng dụng quản lý
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((33))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((33))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
quan đến nhân viên trong công ty
• Hệ thống quản lý tiền lương
• Hệ thống quản lý kế toán
• Hệ thống quản trị dự án
• …..
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Ứng dụng Windows (Windows Application)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((44))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((44))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thông tin học sinh được lưu trữ như thế nào ?
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Ứng dụng Windows (Windows Application)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((55))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((55))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thông tin nhân viên được lưu trữ như thế nào ?
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Mẫu biểu trong các ứng dụng
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((66))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((66))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thông tin thể hiện trên báo cáo được lấy từ đâu ?
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Mẫu biểu trong các ứng dụng
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((77))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((77))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thông tin thể hiện trên báo cáo được lấy từ đâu ?
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Dữ liệu trong các ứng dụng quản lý
Thông tin học sinh được lưu trữ như thế nào ?
Thông tin nhân viên được lưu trữ như thế nào ?
Tất cả thông tin liên quan đến học sinh nh ư: Tất cả thông tin liên quan đến học sinh nh ư: Lý Lý lịch học sinh, điểm thi, chuyên c ần, lớp học, lịch học sinh, điểm thi, chuyên c ần, lớp học, khối….khối…. Được lưu trữ trong Được lưu trữ trong CƠ SỞ DỮ LIỆUCƠ SỞ DỮ LIỆU
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((88))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((88))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thông tin thể hiện trên báo cáo được lấy từ đâu ?
Tất cả thông tin liên quan đến nhân viên nh ư: Tất cả thông tin liên quan đến nhân viên nh ư: Lý Lý lịch nhân viên, quá trình công tác, quá trình lịch nhân viên, quá trình công tác, quá trình lương, khen th ưởng, k ỷ luật….lương, khen th ưởng, k ỷ luật….Được lưu trữ Được lưu trữ trong trong CƠ SỞ DỮ LIỆUCƠ SỞ DỮ LIỆU
Tất cả thông tin th ể hiện trên báo cáo được lấy Tất cả thông tin th ể hiện trên báo cáo được lấy từtừ CƠ SỞ DỮ LIỆUCƠ SỞ DỮ LIỆU
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Tương tác dữ liệu: thêm, xóa,...
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((99))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((99))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Thêm dữ liệu
Xóa dữ liệu Sửa dữ liệu
Lấy dữ liệu
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Thêm dữ liệu
Cập nhật dữ liệu
Xóa dữ liệu
Tương tác dữ liệu: thêm, xóa,...
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1010))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1010))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Lấy dữ liệu
Tất cả các thao tác Tất cả các thao tác THÊM, XÓA, SỬA, TRUY VẤNTHÊM, XÓA, SỬA, TRUY VẤNdữ liệu đều liên quan đến ngôn SQL: dữ liệu đều liên quan đến ngôn SQL: INSERT, DELETE, UPDATE, SELECTINSERT, DELETE, UPDATE, SELECT
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Lệnh INSERT
• Cú pháp (thêm 1 dòng)
INSERT INTO <tên bảng>(<danh sách các thuộc tính>)
VALUES (<danh sách các giá trị>)
• Dùng để thêm 1 hay nhiều dòng vào Table trong CSDL
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1111))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1111))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ VALUES (<danh sách các giá trị>)
INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV)
VALUES (N‘Lê’, N‘Văn’, N‘Tuyên’, ‘NV001’)
– Thêm mới một nhân viên có h ọ = ‘Lê’ , tên lót = ‘Văn’ , tên = ‘Tuyên’ với mã số = ‘NV001’ vào Table NhanVien
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Lệnh DELETE
• Dùng để xóa các dòng của bảng
• Cú pháp
DELETE FROM <tên bảng>
[WHERE <điều kiện>]
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1212))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1212))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
DELETE FROM NHANVIEN
WHERE MANV=‘345345345’
DELETE FROM NHANVIEN
–Xoá nhân viên có mã s ố = ‘345345345’ trong Table NhanVien
–Xoá tất cả nhân viên có trong Table NhanVien
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Lệnh UPDATE
• Dùng để thay đổi giá trị của thuộc tính cho các dòng của bảng
• Cú pháp
UPDATE <tên bảng>
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1313))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1313))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
SET <tên thuộc tính>=<giá trị mới>,
<tên thuộc tính>=<giá trị mới>,
…
[WHERE <điều kiện>]
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L Ví dụ
UPDATE NHANVIEN
SET NGSINH=’08/12/1965’
Lệnh UPDATE
– Sửa thuộc tính ngày sinh của nhân viên có mã số = ‘345345345’trong Table NhanVien là ’08/12/1965’
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1414))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1414))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
WHERE MANV=‘333445555’
UPDATE NHANVIEN
SET LUONG=LUONG*1.1
– Sửa thuộc tính lương của tất cả nhân viên b ằng lương cũ * 1.1
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÚ PHÁP CÂU LỆNH SELECT
SELECT <Danh sách các cột được chọn>FROM < Danh sách các bảng>WHERE <Điều kiện chọn>GROUP BY <Danh sách cột cần nhóm>HAVING < Điều kiện nhóm>ORDER BY < Danh sách cột cần sắp xếp>
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1515))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1515))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ ORDER BY < Danh sách cột cần sắp xếp>
Dùng để lấy dữ liệu từ CSDL hi ển th ị lên màn hình, report,…
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Lập trình CSDL trong ứng dụng quản lý
CT Nhân sựCT Nhân sự
Kết nốiKết nốiCSDLCSDL
� Thành phần giao diện
�Giao tiếp dữ liệu
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1616))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1616))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
CSDLCSDL
CSDLCSDL
� Thành phần dữ liệu
�Giao tiếp dữ liệu
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
LCT Nhân sựCT Nhân sự
Kết nốiKết nối
� Thành phần giao diện: VisualBasic, Visual C++, C#, VB.NET,Delphi…
�Giao tiếp dữ liệu: ODBC,DAO, ADODB, ADO.NET,..
Lập trình CSDL trong ứng dụng quản lý
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1717))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1717))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
CSDLCSDL
Kết nốiKết nốiCSDLCSDL
� Thành phần dữ liệu: MSAccess, SQL Server, Oracle,…
DAO, ADODB, ADO.NET,..
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Một số hệ quản tr ị CSDL thông dụng
�MS Access 2000/XP/2003
�MS SQL Server 7.0/2000/2005
� Thành phần dữ liệu: MS Access, SQL Server,Oracle,…
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1818))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1818))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
�Oracle 8i/9i/10i/11iCSDLCSDL
�My SQL
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Hệ quản tr ị CSDL MS Access
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1919))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((1919))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Hệ quản tr ị CSDL MS Access
� Thành phần định nghĩa cấu trúc CSDL
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2020))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2020))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Hệ quản tr ị CSDL MS Access
� Thành phần khai thác dữ liệu
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2121))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2121))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Hệ quản tr ị CSDL SQL Server
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2222))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2222))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
� Thành phần định nghĩa cấu trúc CSDL
Hệ quản tr ị CSDL SQL Server
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2323))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2323))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L � Thành phần khai thác dữ liệu
Hệ quản tr ị CSDL SQL Server
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2424))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2424))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CSDL SQL Server trong ứng dụng quản lý
Kết nốiKết nối
CT Kế toánCT Kế toán CT Nhân sựCT Nhân sự CT Tiền lươngCT Tiền lương
Kết nốiKết nối Kết nốiKết nối
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2525))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2525))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Kết nốiKết nốiCSDLCSDL
CSDLCSDL
Kết nốiKết nốiCSDLCSDL
Kết nốiKết nốiCSDLCSDL
SQL Server 2005
GIAO TIẾP CLIENT-SERVER TRONG SQL SERVERGIAO TIẾP CLIENT-SERVER TRONG SQL SERVER
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2727))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2727))
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
GIAO TIẾP CLIENT-SERVER TRONG SQL SERVERGIAO TIẾP CLIENT-SERVER TRONG SQL SERVER
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2828))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2828))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
GIAO TIẾP CLIENT-SERVER TRONG SQL SERVERGIAO TIẾP CLIENT-SERVER TRONG SQL SERVER
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2929))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((2929))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÀI ĐẶT SQL SERVERCÀI ĐẶT SQL SERVER
• Trường hợp đã cài Visual Studio 2005:– Cài thêm file SQL Server Management
Studio Express
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3030))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3030))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL SERVER – LOGIN AUTHENTICATIONSQL SERVER – LOGIN AUTHENTICATION
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3131))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3131))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL SERVER – PERMISSIONSQL SERVER – PERMISSION
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3232))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3232))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL SERVER – USER & ROLESQL SERVER – USER & ROLE
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3333))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3333))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
KIẾN TRÚC TỔNG THỂ SQL SERVERKIẾN TRÚC TỔNG THỂ SQL SERVER
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3434))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3434))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
KIẾN TRÚC TỔNG THỂ SQL SERVERKIẾN TRÚC TỔNG THỂ SQL SERVER
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3535))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3535))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL 2005 (All in One)
• Connect SQL Server 2005
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3636))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3636))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL 2005 (All in One)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3737))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3737))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server ObjectSQL Server Object
�Database
�Table
�View
�Stored Procedure
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3838))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3838))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
�Stored Procedure
�Trigger
�User-defined Type
�User-defined Function
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Object - DatabaseSQL Server Object - Database
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3939))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((3939))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Management StudioSQL Server Management Studio
�Click ph ải chu ột tại v ị trí (mục) Databases
�Chọn mục New Database trong menu
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4040))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4040))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ �Chọn mục New Database trong menu
context, xu ất hiện màn hình thêm m ới Database
Create Database in SQL 2005
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4141))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4141))
SQL Server - Add New DatabaseSQL Server - Add New Database
Database nameNhập vào tên DB cần tạo vào mục Name : MyDB, SQL Server m ặc định lưu tập tin *.mdf vào th ư mục C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL \Data với tên t ập tin t ương ứng nh ư sau MyDB_Data.mdf , nếu muốn thay đổi thư mục vào ph ần Path bấmđể chọn thư mục thay đổi
Data Files
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4242))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4242))
Log fileFile theo dõi lỗi xảy ra, quá trình thao tác đến Server,…Mặc định tạo file log mặc định MyDB_Log.ldf trong cùng thư mục với file Data.
Data FilesThông tin về tập tin MDF
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server - Transaction logSQL Server - Transaction log
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4343))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4343))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Create Table in SQL 2005
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4444))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4444))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Object - TablesSQL Server Object - Tables�Nhập vào tên c ủa các Field c ủa Table trong gird
�Chọn ki ểu dữ liệu (Datatype) cho các field t ương ứng bao g ồm
�Kiểu chu ỗi: char, varchar, nchar, nvarchar, …
�Kiểu số: int , decimal ,..
�Kiểu thời gian: datetime, timestamp
�Kiểu luận lý (Yes/No) : bit
�Đối với ki ểu chu ỗi, số chọn chi ều dài t ương ứng trong m ục Length
�Đối với ki ểu dữ liệu muốn tăng tự động (ki ểu số) thì ch ọn
�Identity : tăng tự động, ng ười dùng không nh ập được, thường được dùng làm khóa
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4545))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4545))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
�Identity : tăng tự động, ng ười dùng không nh ập được, thường được dùng làm khóa chính
�Identity Seed : Giá tr ị khởi đầu
�Identity Increment : kho ảng cách gi ữa 2 giá tr ị liên ti ếp nhau
�Ví dụ : Nếu cho field MaSV là Identity, Identity Seed = 100 v à Identity Increment = 10 thì giá tr ị MSSV sẽ lần lượt phát sinh nh ư sau 100, 110, 120.. (mỗi lần tăng 10 đơn v ị)
�Lưu ý
�Mỗi bảng ch ỉ có một cột identity
�Không th ể cập nhật cột identity.
�Cột Identity không được NULL
SQL Server Object - TablesSQL Server Object - Tables
Xác định khóa chính� Chọn filed làm khóa trong grid sau đó chọn vào Khóa trên thanh Toolbar� Trong trường hợp chọn nhiều filed làm khóa chúng ta thực hiện
Nếu chọn các field liên ti ếp thực hiện
Chọn field đầu
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4646))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4646))
Chọn field đầuNhấn Shift và chọn field cuối
Nếu chọn các field không liên tiếp nhau thì thực hiện
Chọn field đầu tiênNhấn Ctrl và chọn các field là khóa
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Object - TablesSQL Server Object - Tables
� Xóa table• Click vào m ục Tables để hiển th ị danh sách Table t ương ứng (bên phải)• Chọn table trong danh sách Tables• Click phải chuột vào mục table cần xóa, vd: MyTable • Chọn mục Delete trong menu context
� Sửa Table� Click vào mục Tables để hiển thị danh sách Table tương ứng (bên phải)� Chọn table trong danh sách Tables� Click phải chuột vào mục table cần sửa, vd: MyTable � Chọn mục Design Table trong menu context � Xuất hiện màn hình tương tự như màn hình New Table để chúng ta thiết kế lại Table
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4747))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4747))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ � Xuất hiện màn hình tương tự như màn hình New Table để chúng ta thiết kế lại Table
� Đổi tên Table� Click vào m ục Tables để hiển th ị danh sách Table t ương ứng (bên phải)� Chọn table trong danh sách Tables� Click phải chuột vào mục table cần đổi tên, vd: MyTable � Chọn mục Rename trong menu context � Nhập tên mới vào
� Nhập li ệu choTable� Click vào m ục Tables để hiển th ị danh sách Table t ương ứng (bên phải)� Chọn table trong danh sách Tables� Click phải chuột vào mục table cần nhập liệu, vd: MyTable � Chọn mục Open Table trong menu context � Chọn mục Return all rows� Xuất hiện màn hình cho phép nhập liệu cho Table đang chọn
NGÔN NGỮ LẬP TRÌNH T-SQLNGÔN NGỮ LẬP TRÌNH T-SQL
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4848))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4848))
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
�CÂU LỆNH SELECT
�NGÔN NGỮ LẬP TRÌNH T-SQL
NGÔN NGỮ LẬP TRÌNH T-SQLNGÔN NGỮ LẬP TRÌNH T-SQL
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4949))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((4949))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
�CÂU LỆNH INSERT/DELETE/UPDATE
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÚ PHÁP CÂU LỆNH SELECTCÚ PHÁP CÂU LỆNH SELECT
SELECT <Danh sách các cột được chọn>FROM < Danh sách các bảng>WHERE <Điều kiện chọn>GROUP BY <Danh sách cột cần nhóm>
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5050))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5050))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
HAVING < Điều kiện nhóm>ORDER BY < Danh sách cột cần sắp xếp>
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT –SELECTCÂU LỆNH SELECT –SELECTSELECT <Danh sách các cột được chọn>FROM < Danh sách các bảng>WHERE <Điều kiện chọn>GROUP BY <Danh sách cột cần nhóm>HAVING < Điều kiện nhóm>ORDER BY < Danh sách cột cần sắp xếp>
Ý ngh ĩa : Chọn những thông tin (field) c ần xem t ừ database.Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) Yêu cầu Liệt kê tên và ngày sinh c ủa tất cả các học sinh
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5151))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5151))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
� SELECT TenHS, NgaySinhFROM HocSinh
Vd2 : Cho quan hệ HoaDon(MaHD, TenKH, SoLuong, DonGia) Yêu cầu Liệt kê Hoá đơn của khách hàng và Thuế VAT của hóa đơn
đó với VAT được tính bằng như sau: VAT = số lượng * đơn giá * 10%Nhận xét: Thuế VAT không phải là filed trong DB, nó là kết quả của biểu
thức SoLuong * DonGia * 10%� SELECT MaHD, TenKH, Soluong * DonGia * 0.1 as VAT
FROM HoaDon
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT – SELECT CÂU LỆNH SELECT – SELECT
SELECT <Danh sách các cột được chọn>FROM < Danh sách các bảng>WHERE <Điều kiện chọn>GROUP BY <Danh sách cột cần nhóm>HAVING < Điều kiện nhóm>ORDER BY < Danh sách cột cần sắp xếp>
Nhận xét: Trong mệnh đề SELECT cho phép chúng ta thực hiện
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5252))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5252))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ Nhận xét: Trong mệnh đề SELECT cho phép chúng ta thực hiện
chọn�Danh sách các Field trong các Table (vd1)�Biểu thức tính toán bao gồm tổ hợp các phép tính của các field và các hằng số khác (vd2)�Ngoài ra trong mệnh đề SELECT chúng ta có thể sử dụng các hàm gộp như SUM, MAX, MIN, AVG, COUNT của các field, phần này sẽ được giải thích và minh họa trong mục GROUP BY
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT –FROMCÂU LỆNH SELECT –FROM
SELECT <Danh sách các cột được chọn>FROM < Danh sách các bảng>WHERE <Điều kiện chọn>GROUP BY <Danh sách cột cần nhóm>HAVING < Điều kiện nhóm>ORDER BY < Danh sách cột cần sắp xếp>
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5353))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5353))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
Ý ngh ĩa Cho bi ết thông tin được chọn trong m ệnh đề SELECT được lấy từ những
Table nào v ới điều kiện kết (Join) nh ư thế nào?Ví dụ
Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) Yêu cầu Liệt kê tên và ngày sinh của tất cả các học sinh� SELECT TenHS, NgaySinh
FROM HocSinh
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT –FROMCÂU LỆNH SELECT –FROM
Vd2: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) DiemThi(MaHS,HocKy,NamHoc,Diem)Yêu cầu Liệt kê tên, điểm thi của mỗi học kỳ trong từng năm học của học
sinh
Cách 1:SELECT TenHS, HocKy,NamHoc,Diem
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5454))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5454))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ SELECT TenHS, HocKy,NamHoc,Diem
FROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHS
Cách 2: dùng phép JOINSELECT TenHS, HocKy,NamHoc,DiemFROM HocSinh JOIN DiemThi ON HocSinh.MaHS = DiemThi.MaHS
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT –JOINCÂU LỆNH SELECT –JOIN
HocSinh DiemThi
INNER JOINCú pháp
TableA INNER JOIN TableB ON JoinConditionÝ ngh ĩa : Thực hi ện phép k ết giữa 2 TableA và TableA, k ết quả của phép k ết là nh ững dòng trong th ỏa mãn điều ki ện kết
Ví dụCho quan h ệ HocSinh(MaHS , TenHS, NgaySinh, DiaChi) DiemThi(MaHS ,HocKy,NH,Diem)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5555))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5555))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
MaHS TenHS NgaySinh DiaChi MaHS HocKy
NH Diem
01 Hang 10/10/1984 123 01 01 2007 10
02 Phu 11/10/1079 124 03 01 2008 8
SELECT TenHS, Diem, HocKy,NHFROM HocSinh INNER JOIN DiemThi ON HocSinh.MaHS=DiemThi.MaHS
Kết quả
TenHS Diem HocKy NH
Hang 10 01 2007
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
CÂU LỆNH SELECT –LEFT JOINCÂU LỆNH SELECT –LEFT JOIN
HocSinh DiemThi
Cú phápTableA LEFT JOIN TableB ON JoinCondition
Ý ngh ĩa :Thực hi ện phép k ết giữa 2 TableA và TableB, k ết quả của phép k ết là nh ững dòng trong thỏa mãn điều ki ện kết, cộng với những tồn tại trong TableA “không k ết” được với TableB, giá tr ị tại các Field được chọn từ TableB trong m ệnh đề SELECT là NULL.Ví dụ:
Cho quan h ệ HocSinh(MaHS , TenHS, NgaySinh, DiaChi) DiemThi(MaHS ,HocKy,NH,Diem)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5656))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5656))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
MaHS TenHS NgaySinh DiaChi MaHS HocKy
NH Diem
01 Hang 10/10/1984 123 01 01 2007 10
02 Phu 11/10/1079 124 03 01 2002 8
SELECT TenHS, Diem, HocKy,NHFROM HocSinh LEFT JOIN DiemThi ON HocSinh.MaHS=DiemThi.MaHS
Kết quả
TenHS Diem HocKy NH
Hang 10 01 2007
Phu NULL NULL NULL
CÂU LỆNH SELECT –RIGHT JOINCÂU LỆNH SELECT –RIGHT JOIN
HocSinh DiemThi
Cú phápTableA RIGHT JOIN TableB ON JoinCondition
Ý ngh ĩa :Thực hi ện phép k ết giữa 2 TableA và TableB, k ết quả của phép k ết là nh ững dòng trong thỏa mãn điều ki ện kết, cộng với những tồn tại trong TableB “không k ết” được với TableB, giá tr ị tại các Field được chọn từ TableA trong m ệnh đề SELECT là NULL.Ví dụ:
Cho quan h ệ HocSinh(MaHS , TenHS, NgaySinh, DiaChi) DiemThi(MaHS ,HocKy,NH,Diem)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5757))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5757))
MaHS TenHS NgaySinh DiaChi MaHS HocKy
NH Diem
01 Hang 10/10/1984 123 01 01 2007 10
02 Phu 11/10/1079 124 03 01 2002 8
SELECT TenHS, Diem, HocKy,NHFROM HocSinh RIGHT JOIN DiemThi
ON HocSinh.MaHS=DiemThi.MaHS
Kết quả
TenHS Diem HocKy NH
Hang 10 01 2007
NULL 8 01 2002
CÂU LỆNH SELECT –FULL JOINCÂU LỆNH SELECT –FULL JOIN
HocSinh DiemThi
Cú phápTableA FULL JOIN TableB ON JoinCondition
Ý ngh ĩa :Thực hi ện phép k ết giữa 2 TableA và TableB, k ết quả là phép H ội (Union) gi ữa phép k ết LEFT JOIN và phép RIGHT JOINVí dụ:
Cho quan h ệ HocSinh(MaHS , TenHS, NgaySinh, DiaChi) DiemThi(MaHS ,HocKy,NH,Diem)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5858))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5858))
MaHS TenHS NgaySinh DiaChi MaHS HocKy
NH Diem
01 Hang 10/10/1984 123 01 01 2007 10
02 Phu 11/10/1079 124 03 01 2002 8
SELECT TenHS, Diem, HocKy,NHFROM HocSinh FULL JOIN DiemThi ON HocSinh.MaHS=DiemThi.MaHS
Kết quả
TenHS Diem HocKy NH
Hang 10 01 2007
NULL 8 01 2002
Phu NULL NULL NULL
CÂU LỆNH SELECT –CROSS JOINCÂU LỆNH SELECT –CROSS JOIN
HocSinh DiemThi
MaHS TenHS NgaySinh DiaChi MaHS HocKy
NH Diem
Cú phápTableA CROSS JOIN TableB
Ý ngh ĩa : Tương tự như phép nhân ( tích Decat) gi ữa 2 table, k ết quả là những bộ bao gồm giá tr ị của TableA và TableB, t ổng số dòng trong b ảng k ết quả = số dòng trong TableA * s ố dòng trong TableBVí dụ
Cho quan h ệ HocSinh(MaHS , TenHS, NgaySinh, DiaChi) DiemThi(MaHS ,HocKy,NH,Diem)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5959))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((5959))
01 Hang 10/10/1984 123 01 01 2007 10
02 Phu 11/10/1079 124 03 01 2002 8
SELECT HocSinh.MaHS, DiemThi.MaHS, TenHS, Diem, HocKy,NHFROM HocSinh CROSS JOIN DiemThi
Kết quả
MaHS MaHS TenHS Diem HocKy NH
01 01 Hang 10 01 2007
02 01 Phu 10 01 2007
01 03 Hang 8 01 2002
02 03 Phu 8 01 2002
CÂU LỆNH SELECT –WHERECÂU LỆNH SELECT –WHERE
Ý ngh ĩa Điều kiện dùng để lọc kết quả được chọn trong m ệnh đề SELECT
Ví dụ
Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) Yêu cầu Liệt kê tên và ngày sinh của tất cả các học sinh có địa ch ỉ ở TPHCM� SELECT TenHS, NgaySinh
FROM HocSinh WHERE DiaChi = ‘TPHCM’
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6060))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6060))
WHERE DiaChi = ‘TPHCM’Vd2: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) DiemThi(MaHS,HocKy,NamHoc,Diem)Yêu cầu Liệt kê tên, điểm thi của mỗi học kỳ trong từng năm học của học sinh
có điểm thi l ớn hơn bằng 6SELECT TenHS, HocKy,NamHoc,DiemFROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHS AND Diem>=6
CÂU LỆNH SELECT –GROUP BYCÂU LỆNH SELECT –GROUP BY
Aggregate
FunctionDescription
AVG Tính giá trị tung bình.
Ý ngh ĩa Điều kiện dùng để lọc gom nhóm theo các c ột của những dòng gi ống nhau trong k ết quả chọn trong m ệnh đề SELECTThường dùng GROUP BY với các hàm gộp
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6161))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6161))
AVGCOUNT
COUNT(*)MAXMINSUM
STDEVSTDEVP
VARVARP
Tính giá trị tung bình.Đếm số giá trị khác nullĐếm số hàng trong một bảng hoặc một nhóm bao gồm cả giá tri null hoặc lăp.Tìm giá trị lớn nhấtTìm giá tị nhỏ nhấtTính tổng tất cả các giá trị.Độ lệch thống kê của mọi giá trị.Độ lệch thống kê đối với tập hợp chung đặc tínhcủa mọi giá trị.Phương sai thống kê của mọi giá trị.Phương sai thống kê đối với tập hợp chung đặc tính của mọi giá trị.
CÂU LỆNH SELECT –GROUP BYCÂU LỆNH SELECT –GROUP BY
Ví dụ:Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) DiemThi(MaHS,HocKy,NamHoc,Diem)Yêu cầu Liệt kê tên, điểm trung bình trong t ừng năm học của học sinhSELECT TenHS, NamHoc,AVG(Diem)FROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHSGROUP BY TenHS, NamHocYêu cầu Liệt kê tên, điểm lớn nhất của mỗi học sinh
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6262))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6262))
Yêu cầu Liệt kê tên, điểm lớn nhất của mỗi học sinhSELECT TenHS, MAX(Diem)FROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHSGROUP BY TenHS
Lưu ý:�Khi dùng GROUP BY thì t ất cả các cột được dùng trong SELECT (ngo ại trừ các cột trong hàm g ộp) phải xuất hi ện trong m ệnh đề GROUP BY.�Các cột được dùng trong GROUP BY có th ể không c ần xuất hi ện trong m ệnh đề SELECT, nhưng khi đó kết quả sẽ dễ gây hi ểu lầm (thi ếu thông tin).
CÂU LỆNH SELECT –HAVINGCÂU LỆNH SELECT –HAVING
Ý ngh ĩa Điều kiện dùng để lọc kết quả được chọn sau khi gom nhóm, th ường được
dùng v ới GROUP BYVí dụ
Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) DiemThi(MaHS,HocKy,NamHoc,Diem)Yêu cầu Liệt kê tên của học sinh có điểm trung bình trong t ừng năm học lớn
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6363))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6363))
Yêu cầu Liệt kê tên của học sinh có điểm trung bình trong t ừng năm học lớn hơn bằng 7
SELECT TenHS, NamHoc,AVG(Diem)FROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHSGROUP BY TenHS, NamHocHAVING AVG(Diem) >=7
CÂU LỆNH SELECT –ORDER BYCÂU LỆNH SELECT –ORDER BY
Ý ngh ĩa Dùng để sắp xếp kết quả theo tiêu chu ẩn (các c ột) được chọn
Ví dụ
Vd1: Cho quan hệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) DiemThi(MaHS,HocKy,NamHoc,Diem)Yêu cầu Liệt kê danh sách học sinh theo thứ tự ABC của tênSELECT *
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6464))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6464))
FROM HocSinhORDER BY TenHSYêu cầu Liệt kê danh sách học sinh theo thứ tự tăng dần của điểm thi và tên SELECT
Diem,TenHSFROM HocSinh, DiemThiWHERE HocSinh.MaHS = DiemThi.MaHSORDER BY Diem,TenHSKết quả: danh sách học sinh được sắp theo thứ tự tăng dần của điểm thi, nếu hai học
sinh có điểm thi bằng nhau thi, sẽ được sắp theo thứ tự tên
CÂU LỆNH SELECT –HAVING & WHERECÂU LỆNH SELECT –HAVING & WHERE
�Chỉ dùng m ệnh đề HAVING với mệnh đề GROUP BYđể tìm ki ếm bằng nhóm. Dùng m ệnh đề HAVING màkhông có m ệnh đề GROUP BY là vô ngh ĩa.�Có thể có trên đến 128 điều kiện trong m ột mệnh đề
GROUP BY. Khi có nhi ều điều ki ện thì t ổ hợp chúnglại bằng các phép toán logic AND, OR, NOT.�Trong mệnh đề HAVING, có thể tham khảo bất kỳ cột
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6565))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6565))
�Trong mệnh đề HAVING, có thể tham khảo bất kỳ cộtnào xu ất hi ện trong danh sách ch ọn mà có ch ứahàm gộp. Không th ể tham kh ảo hàm g ộp trong m ệnhđề WHERE.�Mệnh đề HAVING được đáp ứng sau t ừ khóa ALL thì
mệnh đề HAVING có quy ền ưu tiên h ơn từ khóa ALLvà ch ỉ trả về những nhóm th ỏa mãn m ệnh đềHAVING.
QUI TRÌNH XỬ LÝ CÂU LỆNH SELECTQUI TRÌNH XỬ LÝ CÂU LỆNH SELECT
SELECT Col1,Col2,Col3,..ColNFROM TableA, TableB,… WHERE DK1 AND DK2 AND DK3GROUP BY ColA, ColB, ColCHAVING DKG1 AND DKG2 AND…ORDER BY ColX, ColY, ColZ,…
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6666))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6666))
ORDER BY ColX, ColY, ColZ,…
QUI TRÌNH XỬ LÝ CÂU LỆNH SELECTQUI TRÌNH XỬ LÝ CÂU LỆNH SELECT
CSDLFROM
Tập kết quả 1
WHERE
Tập kết quả 2
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6767))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6767))
Tập kết quả 3
GROUP BY
HAVING
ORDER BY
Tập kết quả 4
SELECT
Tập kết quả 5KẾT QUẢ
CUỐI CÙNG
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
Ví dụVd1: Cho quan h ệ HocSinh(MaHS, TenHS, NgaySinh, DiaChi) Yêu cầu : Thêm bộ sau vào Table học sinh (‘001’,’Nguyen Van A’,’08/20/2002’,’a’)INSERT INTO HocSinh
CÂU LỆNH INSERT/DELETE/UPDATECÂU LỆNH INSERT/DELETE/UPDATE
Câu lệnh INSERTCú phápINSERT INTO < TableName> <ColumnList>VALUES < Value1, Value2,... >
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6868))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6868))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
VALUES (‘001’,’Nguyen Van A’,’08/20/2002’,’a’)
Câu lệnh UPDATECú phápUPDATE < Tên bảng> SET Tên cột 1 = giá tr ị ,
Tên cột = giá trị , ...WHERE < điều ki ện>
Câu lệnh DELETECú phápDELETE FROM < Tên bảng>
WHERE < điều ki ện>
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Object - ViewsSQL Server Object - Views
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6969))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((6969))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
Khái ni ệm� Stored Procedure là các th ủ tục được xây d ựng để thực hiện các xử lý liên quan đến việc dữ liệu.
� Stored Procedure được lưu trữ và thi hành ngay trong Server khi có yêu c ầu.
Các thao tác liên quan đến Stored Procedure
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7070))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7070))
Các thao tác liên quan đến Stored Procedure� Tạo Stored Procedure
� Mở DB cần tạo table b ằng cách click vào d ấu + bên trái tên c ủa DB để hiển th ị các mục con trong DB. Ví d ụ: Diagrams, Tables, Views, Stored procedure,…
� Click phải chuột vào mục Stored procedures
� Chọn chức năng New Stored procedure… trong menu sổ xuống, xuất hiện dialog soạn thảo nội dung của stored
ẢỌ
ẦN
LẬ
P T
RÌN
H W
IND
OW
SẢ
ỌẦ
N LẬ
P T
RÌN
H W
IND
OW
S
ỔN
G Q
UA
N LẬ
P T
RÌN
H C
SD
LỔ
NG
QU
AN
LẬ
P T
RÌN
H C
SD
L
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7171))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7171))
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
BÀ
I GIẢ
NG
HỌ
C P
HẦ
N LẬ
TỔ
NG
QU
AN
LẬ
TỔ
NG
QU
AN
LẬ
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
� Tạo Stored Procedure
� Đặt tên Stored trong [PROCEDURE NAME]� Viết nội dung stored� Sau khi viết xong nội dung xử lý trong stored
� Nhấn Check Syntax: để kiểm tra cú pháp của các câu lệnh trong stored� Nhấn OK: Lưu stored� Nhấn Cancel: hủy bỏ thao tác tạo
� Sửa Stored Procedure� Click vào mục Stored procedures để hiển thị danh sách Stored procedure tương ứng
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7272))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7272))
(bên phải)� Chọn Stored procedure trong danh sách Stored procedures� Click phải chuột vào mục Stored procedure cần sửa, vd: MyStoredPro � Chọn mục Properties trong menu context � Xuất hiện màn hình tương tự như màn hình Stored procedure� Thực hiện các thao tác tương tự như phần tạo
� Xóa Stored Procedure� Click vào m ục Stored procedures để hiển th ị danh sách Stored procedure t ương ứng (bên phải)� Chọn Stored procedure trong danh sách Stored procedure� Click phải chuột vào mục Stored procedure cần xóa, vd: MyStoredPro � Chọn mục Delete trong menu context
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
CREATE PROCEDURE StoredName
@Parameter1 DataType [=DefaultValue,]
@Parameter2 DataType OUTPUT,
@Parameter3 DataType OUTPUTAS
BEGIN
BEGIN TRANSACTION{T-SQL Statement1}If @Error <> 0
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7373))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7373))
If @Error <> 0 Goto Err_Handle
{T-SQL Statement2}If @Error <> 0
Goto Err_HandleCOMMIT TRANSACTIONReturn(0) Err_Handle:
ROLLBACK TRANSACTIONReturn(@Error)
END
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
Cấu trúc của một Stored Procedure bao gồm các phần chính sau đâyPhần TênCú phápCREATE PROCEDURE StoredNameÝ nghĩaĐịnh ngh ĩa thủ tục nội với tên là StoredNameVí dụCREATE PROCEDURE DemNhanVienASSELECT Count(*)
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7474))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7474))
SELECT Count(*)FROM NhanVienPhần tham s ố
Tương tự như bất kỳ một thủ tục nào trong m ột ngôn ng ữ lập trình, ph ần tham s ố của một Stored được khai báo ngay sau ph ần tên c ủa nó.
Tham số nhậpCú pháp:@Parameter1 DataType [=DefaultValue]
@Parameter1: Tên c ủa biến sốDataType: Ki ểu dữ liệu của biếnDefaultValue: Giá tr ị mặc định của biến
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
CREATE PROCEDURE TruyenThamSo @param0 int=NULL, -- Giá trị mặc định là NULL@param1 int=1, -- Giá trị mặc định là 1@param2 int=2 -- Giá trị mặc định là 2ASSELECT @param0, @param1, @param2Với câu lệnh thực thi thủ tục TruyenThamSo EXEC TruyenThamSoKết quả
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7575))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7575))
Kết quả(Null) 1 2EXEC TruyenThamSo 10,20,30Kết quả10 20 30EXEC TruyenThamSo @param2=200, @param1=NULLKết quảNull Null 200EXEC TruyenThamSo 0, DEFAULT, 20Kết quả0 1 200
SQL Server Object – Stored ProcedureSQL Server Object – Stored Procedure
Tham số xuấtCú pháp:@Parameter1 DataType OUTPUT
@Parameter1: Tên c ủa biến sốDataType: Ki ểu dữ liệu của biếnDefaultValue: Giá tr ị mặc định của biến
Ví dụ:--Khai báo thủ tụcCREATE PROCEDURE count_tables @authorcount int OUTP UT,
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7676))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7676))
@titlecount int OUTPUTASSELECT * FROM authorsSET @authorcount=@@ROWCOUNTSELECT * FROM titlesSET @titlecount=@@ROWCOUNTRETURN(0)--Thực thi thủ tụcDECLARE @a_count int, @t_count intEXEC count_tables @a_count OUTPUT, @t_count OUTPUT
KHAI BÁO BIẾN KHAI BÁO BIẾN
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7777))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7777))
Khai báo bi ếnCú phápDECLARE @Name DataType @Name: là tên của biến, phải được bắt đầu với ký tự @DataType: kiểu dữ liệu của biến, bao gồm tất cả các kiểu dữ liệu của hệ thống trừ các kiểu sau: text, ntext, image.Ví dụ
KHAI BÁO BIẾNKHAI BÁO BIẾN
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7878))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7878))
Ví dụ--Khai báo biến lưu trữ số Record trong một Table nào đóDECLARE @nNumRecord int--Khai báo biến lưu trữ số tổng số tiềnDECLARE @SumMoney decimal(18,2)--Khai báo biến lưu trữ tên DECLARE @sName char(30)
KHAI BÁO BIẾNKHAI BÁO BIẾN
Cú pháp 1:SET @Name = Value
@Name: Tên biếnValue: Giá trị cần gán cho biến
Cú pháp 2:SELECT @Name = Value
@Name: Tên biếnValue: Giá trị cần gán cho biến
Ví dụCú pháp 1:DECLARE @HoTen char(20)
SET @HoTen = ‘Nguyễn Công Phú’Cú pháp 2:DECLARE @HoTen char(20)
SELECT @HoTen = ‘Nguyễn Công Phú’hoặc
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7979))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((7979))
Value: Giá trị cần gán cho biếnHoặc SELECT @Name = coloumFROM TableName
@Name: Tên biếnColumn: Tên cột trong Table cần gán cho biến
hoặc --Tìm lương lớn nhất của tất cả các nhân
viênDECLARE @MaxSalary decimal(18,2)
SELECT @MaxSalary = MAX(Salary)FROM Employee
SQL Server Object – Local VariablesSQL Server Object – Local Variables
Các biến được sử dụng trong cấu truy vấn như là các tham số. -Cho lược đồ CSDL và dữ liệu tương ứng như sau:
HocSinh DiemThi
MaHS TenHS NgaySinh DiaChi MaHS HocKy NH Diem
01 Hang 10/10/1984 123 01 01 2007 10
LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((8080))LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN �� FIT, HCMUP FIT, HCMUP �� ((8080))
02 Phu 11/10/1079 124 03 01 2002 8
-Ví dụ 1: Liệt kê danh sách học sinh có ngày sinh vào ngày ‘10/10/1977’DECLARE @NgaySinh datetimeSET @NgaySinh=’10/10/1984’SELECT * FROM HocSinhWHERE NgaySinh = @NgaySinh
Ví dụ 3: Liệt kê danh sách các học sinh có địa chỉ là ‘123’ và điểm thi lớn hơn 10DECLARE @DiaChi varchar(50), @Diem DecimalSELECT @DiaChi=’123’, @Diem=10SELECT * FROM HocSinh JOIN DiemThi ON HocSinh.MaHS = DiemThi.MaHSWHERE DiaChi = @DiaChi AND DiemThi >= @Diem
ADO.NETADO.NETLương Trần Hy Hiến
1
Lương Trần Hy Hiến
Nội dung�� ADO.NETADO.NET� Sơ lược lịch sử phát triển� Kiến trúc ADO.NET� .NET Data Provider
DataSet
2
� DataSet� Hỏi & Đáp
Giới thi ệu ADO.NET
�� AActiveX DData OObject .NET (ADO.NET)� Công nghệ của MS� Phát triển từ nền tảng ADO� Cung cấp các lớp đối tượng và hàm thư viện phục
vụ cho việc kết nối và xử lý dữ liệuvụ cho việc kết nối và xử lý dữ liệu
.NET Application.NET Application
ADO.NETADO.NET
3
Giới thi ệu ADO.NET� Mô hình .NET Framework
Microsoft .NET Framework
Web Services User Interface
Common Language Runtime
Base Classes
Data and XML
ADO.NETADO.NET XML ... ...
4
Nội dung• ADO.NET�Sơ lược lịch sử phát triển� Kiến trúc ADO.NET� .NET Data Provider
DataSet
5
� DataSet� Hỏi & Đáp
Sơ lược l ịch sử phát tri ển
� Native API
ApplicationDatabase
DB API
DB API
DB API
6
ODBC
Driver
Driver
Driver
Application
Database
Database
ODBC API
DB API
DB API
DB API
�� OOpen pen DDataataBBase ase CConnectivityonnectivity
Sơ lược l ịch sử phát tri ển (cont)
� OLEDB và ADO
ADO
OLE DBNon-Relational Data
Provider
Provider
Provider
7
OLE DB
Application
Relational Data
ODBC
Driver
Driver
Driver
Provider
Provider
OLE: Object Linking and EmbeddingOLE: Object Linking and Embedding
Sơ lược l ịch sử phát tri ển (cont)ADO.NETADO.NET
8
Introduction
Storedinto
9
into
Database (Oracle, SQL Server)
Client
ADO.NET
Data access technology
ADO.NET architecture
XML
10
Database
XML
XML
ADO.NET (tt)� Hổ trợ bởi .Net Platform� Sử dụng công nghệ XML để chuyển đổi dữ
liệu. � Tương tác với tất cả các loại cơ sở dữ liệu.
11
� Khả năng thực thi nhanh.� Sử dụng cho các loại ứng dụng client-server.
Nội dung� ADO.NET� Sơ lược lịch sử phát triển�Kiến trúc ADO.NET� .NET Data Provider
DataSet
12
� DataSet� Hỏi & Đáp
Kiến trúc� Connected Model
Chương trình
13
� Disconnected Model
Chương trình
Chương trình
ADO.NET� ADO.NET là một phần của .NET Framework� Thư viện lớp có chức năng xử lý dữ liệuxử lý dữ liệu trong ngôn
ngữ MS.NET
� ADO.NET là dạng “DisconnectedDisconnected”� Cho phép lấy cả một cấu trúc phức tạp của DL từ � Cho phép lấy cả một cấu trúc phức tạp của DL từ
CSDL, sau đó ngắt kết nối rồi mới thực hiện thao tác xử lý� Trước đây ADO luôn phải duy trì kết nối trong quá
trình thiết kế
14
ADO.NET� ADO.NET mạnh mẽ� Kế thừa các ưu điểm của ADO � Kết hợp với ý tưởng thiết kế hoàn toàn mới
� Đặc điểm nổi bật� Thiết kế hoàn toàn dựa vào XML� Thiết kế hoàn toàn dựa vào XML� Chuẩn giao tiếp dữ liệu tốt nhất trên môi trường Internet
hiện nay
� Thiết kế hoàn toàn hướng đối tượng� Đặc trưng của thư viện .NET Framework
15
ADO.NET vs. ADOĐặc ĐiểmĐặc Điểm ADOADO ADO.NETADO.NET
DL xử lý được đưa vào bộ nhớ dưới dạng
Recordset : tương đương 1 bảng dữ liệu trong database
Dataset : tương đương 1 database
Duyệt dữ liệu Recordset chỉ cho phép duyệt tuần tự, từng dòng một.
Dataset : duyệt “t ự do, ngẫu nhiên”, truy cập thẳng tới bảng, dòng ,cột mong muốn.
Dữ liệu ngắt kết nối
Recordset thiên về hướng kết nối, nên việc hỗ trợ ngắt kết nối không mạnh
Dataset hỗ trợ hoàn toàn ngắt kết nối
Trao đổi dữ liệu qua Internet
Khả năng trao đổi dữ liệu ADO qua Internet thường có nhiều hạn chế. Do dùng chuẩn COM
ADO.NET trao đổi dữ liệu qua Internet r ất dễ dàng vì ADO.NET được thiết kế theo chuẩn XML, là chuẩn dữ liệu chính được sử dụng để trao đổi trên Internet.
16
Môi tr ường “ connected ”� Mỗi user có một kết nối cố định tới data source� Ưu điểm� Môi trường được bảo vệ tốt� Kiểm soát được sự đồng bộ� Dữ liệu luôn được mới� Dữ liệu luôn được mới
� Nhược� Phải có một kết nối mạng cố định� Scalability
17
Môi tr ường “ disconnected ”� Một tập con của dữ liệu trung tâm được sao chép và
bổ sung độc lập, sau đó sẽ được merge lại vào dữ liệu trung tâm.� Ưu điểm� Có thể làm việc bất cứ lúc nào, cũng như có thể kết nối
bất kỳ vào Data Source� Cho phép user khác có thể kết nối� Nâng cao hiệu suất thực hiện của ứng dụng
� Khuyết� Dữ liệu không được cập nhật một cách nhanh nhất� Sự tranh chấp có thể xuất hiện và phải giải quyết
18
ADO.NET� Kiến trúc của ADO.NET gồm 2 phần chính�� Phần kết nốiPhần kết nối: sử dụng khi kết nối CSDL và thao
tác dữ liệu, phải thực hiện kết nối khi thao tác�� ConnectionConnection : quản lý việc đóng mở DB� ???Connection : SqlConnection, OleDbConnection� ???Connection : SqlConnection, OleDbConnection
�� CommandCommand : lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối� ???Command : SqlCommand, OleDbCommand
�� DataReaderDataReader : đọc dữ liệu, chỉ xử lý 1 dòng dữ liệu tại một thời điểm� ???DataReader : SqlDataReader, OleDbDataReader
�� DataAdapterDataAdapter : cầu nối giữa DB và DataSet
19
ADO.NET�� Phần ngắt kết nốiPhần ngắt kết nối: là DataSetDataSet� DataSet không quan tâm đến Database thuộc kiểu
gì, và lấy dữ liệu từ DataAdapter để xử lý� DataSet xem như một Database trong bộ nhớ:
bảng, quan hệ…bảng, quan hệ…� DataSet có các thành phần con như� DataTable� DataRow� DataColumn� DataRelation� Các đối tượng nhóm: DataTableCollection,
DataRowCollection, DataColumnCollection
20
Mô h ình đối tượng ADO.NET
21
Namespace� System.Data — All generic data access classes
� System.Data.Common — Classes shared (or overridden) by individual data providers
� System.Data.Odbc — ODBC provider classes
� System.Data.OleDb — OLE DB provider classes
� System.Data.ProviderBase — New base classes and
22
� System.Data.ProviderBase — New base classes and connection factory classes
� System.Data.Oracle — Oracle provider classes
� System.Data.Sql — New generic interfaces and classes for SQL Server data access
� System.Data.SqlClient — SQL Server provider classes
� System.Data.SqlTypes — SQL Server data types
Các lớp thư viện ADO.NET� System.Data.OleDb: Access, SQL Server, Oracle� System.Data.SqlClient: SQL Server� System.Data.OracleClient: Oracle� Đặc điểm:
Cả ba thư viện trên về giao tiếp lập trình là giống � Cả ba thư viện trên về giao tiếp lập trình là giống nhau� Dùng thư viện SqlClient truy xuất SQL Server
nhanh hơn OleDb� Tương tự cho OracleClient
23
Nội dung� ADO.NET� Sơ lược lịch sử phát triển� Kiến trúc ADO.NET� .NET Data Provider
DataSet
24
� DataSet� Hỏi & Đáp
Database-Specific Classes� IDbCommand — Used as wrappers for SQL statements or stored
procedure calls.� IDbCommandBuilder — Used to generate SQL commands (such
as INSERT, UPDATE, and DELETE statements) from a SELECT statement.
� IDbConnection — Used to connect to the database. Similar to an ADO Connection.
25
ADO Connection.� IDbDataAdapter — Used to hold select, insert, update, and delete
commands, which are then used to populate a DataSet and update the Database.
� IDbDataReader — Used as a forward only, connected data reader.� IDbParameter — Used to define a parameter to a stored
procedure.� IDbTransaction — Used for a database transaction, wrapped in an
object.
.NET Data Provider� Các thành phần .NET Data Provider
.NET Data Provider
???Connection ???DataAdapter
26
???Connection
???Transaction
???Command
???DataReader
???DataAdapter
SelectCommand
DeleteCommand
UpdateCommand
InsertCommand
Parameters ???Parameter
Connected Model� Kết nối vào CSDL� Thực hiện lệnh� Thêm/Xóa/Sửa dữ liệu� Đọc dữ liệu từ CSDL
27
Connected Model� Kết nối vào CSDL� Các lớp phụ trách kết nối � ODBCConnection� OleDBConnection� SqlConnection
28
� OracleConnection
� Thuộc tính quan trọng� ConnectionString: xác định nguồn dữ liệu cần kết nối
� Phương thức quan trọng� Open: mở kết nối� Close: đóng kết nối
.NET Data Provider - Connection
Data SourceApplication
Connection
29
� Các đối tượng Connection tuân thủ IDbConnection interface.� ConnectionString: loại Data Source cần kết nối.�Open(): thiết lập kết nối đến Data Source.� Close(): ngắt kết nối đến Data Source.
.NET Data Provider – Connection (cont)
� Kết nối vào CSDL AccessOleDbConnection cnn = new OleDbConnection();
cnn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;
Data Source=QLHS.mdb";
cnn.Open();
30
//Các lệnh cần thực hiện
cnn.Close();
.NET Data Provider – Connection (cont)
� Kết nối vào CSDL SQL Server:SqlConnection cnn = new SqlConnection(“server=
HIENLTH-PC\\SQLEXPRESS; database = QLHS; user id=sa; password=sa”);
31
cnn.Open();// Thực hiện truy vấn dữ liệu
cnn.Close();
SQL2005 ConnectionString
� Theo đặc quy ền của SQL Server (có user, pass):server= HIENLTH-PC\SQLEXPRESS; database =
QLHS; user id=sa; password=sa
� Theo đặc quy ền của hệ điều hành:
32
� Theo đặc quy ền của hệ điều hành:server= HIENLTH-PC\SQLEXPRESS; database =
QLHS; Trusted Connection = True;server= HIENLTH-PC\SQLEXPRESS; database =
QLHS; Integrated Security = True;
Tập tin l ưu trữ kết nối� Cho phép người dùng có thể cấu hình các giá trị
thuộc tính cho chuỗi kết nối CSDL.� Thường có dạng *.ini, *.txt. Từ .NET 1.0 trở lên
có thể sử dụng tập tin App.config (định dạng XML) chứa khai báo các tham số cùng giá trị và
33
XML) chứa khai báo các tham số cùng giá trị và các chỉ thị khác.� Ví dụ: Tập tin DBConfig.ini
Đọc thông tin t ập tin l ưu trữ kết nối� Loại *.ini, *.txt sử dụng StreamReader (using
System.IO)StreamReader docfile = new StreamReader(@"DBConfig.ini");
servername = Tach(docfile.ReadLine());
databasename = Tach(docfile.ReadLine());
34
databasename = Tach(docfile.ReadLine());
username = Tach(docfile.ReadLine());
password = Tach(docfile.ReadLine());
Đọc thông tin t ập tin l ưu trữ kết nối� Loại App.config<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="SqlServer" connectionString="server=HIENLTH-
35
PC\sqlexpress;database=SEQLHS;integrated security=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Đọc thông tin t ập tin l ưu trữ kết nối� Loại App.config:
connectionstring = ConfigurationManager.ConnectionStrings[tên].ConnectionString;
Ví dụ:
36
Ví dụ:
con.ConnectionString = ConfigurationManager.ConnectionStrings[“SqlServer "]. ConnectionString;
.NET Data Provider - Command
Connection 011010011011010011
37
Data SourceApplication
Command
.NET Data Provider - Command� Các đối tượng Command tuân thủ
IDbCommand interface.� Connection: kết nối dùng để thực hiện câu lệnh.� CommandText: câu lệnh SQL cần thực hiện trên Data
Source.� CommandType: loại câu lệnh trong CommandText (Text,
38
� CommandType: loại câu lệnh trong CommandText (Text, TableDirect, StoredProc).� ExecuteScalar(): thực hiện câu lệnh trong CommandText,
kết quả trả về là một giá trị đơn.� ExecuteNonQuery(): thực hiện câu lệnh trong
CommandText và không có kết quả trả về.� ExecuteReader(): thực hiện câu lệnh trong CommandText,
kết quả trả về là một DataReader.
Command (cont) – SQL Server
SqlConnection cnn = new SqlConnection(“server=HIENLTH-PC\\SQLEXPRESS; database=QLHS; user id=sa; password=sa”);
SqlCommand cmd = new SqlCommand();
39
cmd.Connection = cnn;cmd.CommandText = “SELECT COUNT(*) FROM HocSinh”;cmd.CommandType = CommandType.Text;cnn.Open();int count = (int)cmd.ExecuteScalar();cnn.Close();
Command (cont) – SQL ServerSqlConnection cnn = new SqlConnection(“server=HIENLTH-
PC\SQLEXPRESS; database=QLHS; user id=sa; password=sa”);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;cmd.CommandText =
40
cmd.CommandText =“INSERT INTO HocSinh(Ho, Ten, DienThoai) VALUES(N‘Nguyễn Văn’, N‘Trường’, ‘0989366990’)”;
cmd.CommandType = CommandType.Text;
cnn.Open();cmd.ExecuteNonQuery();cnn.Close();
Command (cont) – MS Access� Thực hiện lệnh� Thêm/Xóa/Sửa dữ liệu
Ví dụ:
OleDbCommand cmd = new OleDbCommand();
41
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = cnn;
cmd.CommandText = “INSERT INTO Hocsinh VALUES(5, 'Lê Văn Xiêm','11/12/2006', 'Khánh Hòa', '221 Nguyễn Văn Cừ')";
cmd.ExecuteNonQuery();
.NET Data Provider - Parameter� Mục đích sử dụng:�Một vài giá trị trong câu lệnh chỉ biết khi thực hiện câu lệnh.� Cần thực hiện câu lệnh nhiều lần với các giá trị khác nhau.
� Các bước thực hiện:� Tham số hóa câu lệnh: ? hoặc @[tên tham số].
42
� Tạo các parameters tương ứng cho command.� Đặt giá trị cho các parameter mỗi khi dùng command thực
hiện câu lệnh.
.NET Data Provider – Parameter(cont)
� Tham số hóa� SQL Data Provider:
cmd.CommandText =“SELECT * FROM HocSinh WHERE tenhocsinh = @ten”;
cmd.CommandText =
43
cmd.CommandText =“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” +“VALUES(@id, @ten, @dtb)”;
� Các provider khác:cmd.CommandText =
“SELECT * FROM HocSinh WHERE tenhocsinh = ?”;
cmd.CommandText =“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” +“VALUES(?, ?, ?)”;
.NET Data Provider – Parameter(cont)� Tạo các parameter
cmd.Parameters.Add(“@id”, 5);cmd.Parameters.Add(“@ten”, “Nguyễn Văn A”);cmd.Parameters.Add(“@dtb”, 8.5);
� Đặt giá trị cho các parameter
44
� Đặt giá trị cho các parameterforeach (Student s in studentList){
cmd.Parameters[“@id”] = i;cmd.Parameters[“@ten”] = s.studentName;cmd.Parameters[“@dtb”] = s.studentMarks;cmd.ExecuteNonQuery();
}
Parameter(cont) – MS Access� Ví dụ
OleDbCommand cmd = new OleDbCommand();cmd.Connection = cnn;cmd.CommandText = "INSERT INTO Hocsinh VALUES
(@Ma,@Ten,@Diachi,@NgaySinh,@Toan,@Van)“;OleDbParameter para=cmd.Parameters.Add("@Ma",OleDbType.Integer);para.Value=1;para=cmd.Parameters.Add("@Ten",OleDbType.VarWChar);para.Value= N"Lê Văn A";
45
para.Value= N"Lê Văn A";para=cmd.Parameters.Add("@Diachi",OleDbType.VarWChar);para.Value= N"Nguyễn Văn Cừ";para = cmd.Parameters.Add("@Ngaysinh", OleDbType.Date);para.Value = new DateTime(1982,10,1);para=cmd.Parameters.Add("@Toan",OleDbType.Integer);para.Value=5;para=cmd.Parameters.Add("@Van",OleDbType.Integer);para.Value=7;
cmd.ExecuteNonQuery();
.NET Data Provider – DataReader
ConnectionDataReader
ExecuteReader()
Read()
011010011011010011
MaHS HoTen DiaChi
i HocSinh I DiaChi i
46
Data SourceApplication
Command
.NET Data Provider – DataReader� DataReader là gì?� Chỉ di chuyển tới phía trước, chỉ đọc� truy cập dữ liệu nhanh,� kết nối đến nguồn dữ liệu (data source)� Quản lý dữ liệu, hoặc ràng buộc vào điều khiển list-
47
� Quản lý dữ liệu, hoặc ràng buộc vào điều khiển list-bound� Sử dụng tài nguyên
.NET Data Provider - DataReader� Các đối tượng DataReader tuân thủ interface
IDataReader.� HasRow: cho biết còn dữ liệu để đọc nữa không.� Read(): đọc một mẫu tin vào DataReader.� Toán tử [ i ]: truy xuất đến cột i trong mẫu tin đọc được.
48
� Close(): đóng DataReader.
� Lưu ý:� Truy xuất tuần tự và không quay lui.� Không cập nhật dữ liệu.� Cơ chế kết nối.
.NET Data Provider – DataReader (cont)
SqlConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”);
SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;cmd.CommandText = “select * from Orders”;
49
cmd.CommandText = “select * from Orders”;cmd.CommandType = CommandType.Text;
cnn.Open();SqlDataReader dr = cmd.ExecuteReader();while (dr.Read()){
MessageBox.Show(dr[“CustomerID”].ToString());}dr.Close();cnn.Close();
DataReader (cont) – MS Access� Thực hiện lệnh� Đọc dữ liệu từ CSDL� Ví dụ
OleDbDataReader rd = cmd.ExecuteReader();
50
OleDbDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
if (!rd.IsDBNull(3))
MessageBox.Show(dr[“CustomerID”].ToString());
}
.NET Data Provider - SqlDataAdapter� Bộ đọc dữ liệu từ CSDL nguồn (SQLServer) và đổ vào đối tượng DataSet hay DataTable.� Phân trang dữ liệu� Phương thức:� Fill(datasource)
51
� Fill(datasource)� Fill(datasource, start, number, “tablename”)
.NET Data Provider - DataAdapter
SelectCommand
UpdateCommand
InsertCommand
DataAdapter
DataSet
52
� Các đối tượng DataAdapter tuân thủ interface IDbDataAdapter.� Fill(DataSet): dùng SelectCommand lấy dữ liệu từ Data Source đổ vào DataSet.� Update(DataSet): dùng InsertCommand, UpdateCommand và
DeleteCommand cập nhật dữ liệu trong DataSet vào Data Source.
UpdateCommand
DeleteCommand
Data Source
.NET Data Provider – DataAdapter (cont)SqlConnection cnn = new
SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”);
SqlDataAdapter da = new SqlDataAdapter(“select * from Orders”, cnn)
DataSet ds = new DataSet();
53
DataSet ds = new DataSet();
da.Fill(ds);// Does something on the DataSet.da.Update(ds);
Nội dung� Sơ lược lịch sử phát triển� Kiến trúc ADO.NET� .NET Data Provider�DataSet
Hỏi & Đáp
54
� Hỏi & Đáp
System.Data namespace� DataSet — This object is designed for disconnected use and can
contain a set of DataTables and include relationships between these tables.
� DataTable — A container of data that consists of one or more DataColumns and, when populated, will have one or more DataRows containing data.
DataRow — A number of values, akin to a row from a database
55
� DataRow — A number of values, akin to a row from a database table, or a row from a spreadsheet.
� DataColumn — This object contains the definition of a column, such as the name and data type.
� DataRelation — A link between two DataTable classes within a DataSet class. Used for foreign key and master/detail relationships.
� Constraint — This class defines a rule for a DataColumn class (or set of data columns), such as unique values.
DataSet
DataSet
�� DataSet là gì?DataSet là gì?
Ánh xạ
56
� DataSet là cơ sở dữ liệu được lưu trữ trong bộ nhớ chính (in-memory database).� Cơ chế không kết nối.� Gồm các đối tượng� DataTable� DataRelation
Data Source
DataSet
DataSet (cont)
DataSet
DataTableTables
57
Columns
Rows
DataColumn
DataRow
Relations DataRelation
Các phương th ức của DataSet� Thêm 1 đối tượng DataTable:
ds.Tables.Add(datatable_name);
� Xóa 1 đối tượng:� ds.Tables.Remove(datatable_name);� ds.Table.RemoveAt(datatable_index);
58
� Loại bỏ tất cả DataTable: ds.Tables.Clear();
� Kiểm tra tồn tại: ds.Tables.Contains(datatable_name);
� Kiểm tra tồn tại và có thể xóa được: ds.Tables.CanRemove(datatable_name);
� Đếm số lượng DataTable: ds.Tables.Count (thuộc tính)
Các phương th ức của DataSet� Ghi ra file XML: ds.WriteXml (ten_file_xml);� Đọc từ file XML: ds.ReadXml (ten_file_xml);
59
DataSet - DataTable� DataTable thể hiện một bảng trong cơ sở dữ liệu.� Gồm các đối tượng:� DataColumn� DataRow
� Các thuộc tính và phương thức:
60
� Các thuộc tính và phương thức:� TableName: tên bảng.� Columns: danh sách các cột (DataColumn).� Rows: danh sách các mẫu tin (DataRow).� PrimaryKey: danh sách các cột làm khóa chính
(DataColumn).� NewRow(): tạo một mẫu tin mới.
DataSet - DataColumn� DataColumn thể hiện một cột trong bảng.� Các thuộc tính và phương thức:� ColumnName: tên cột.� DataType: kiểu dữ liệu cột.
61
DataSet - DataRow� DataRow thể hiện một mẫu tin trong bảng.� Các thuộc tính và phương thức:� RowState: trạng thái của mẫu tin (Added, Modified, Deleted,
Unchanged, Detach).� Toán tử [i]: truy xuất đến cột i của mẫu tin.
62
� Delete(): đánh dấu xóa mẫu tin.
DataSet (cont)DataTable table = new DataTable(“SinhVien”);
table.Columns.Add(new DataColumn(“MSSV”, Type.GetType(“Int32”));
table.Columns.Add(new DataColumn(“HoTen”, Type.GetType(“string”));
63
table.PrimaryKey = new DataColumn[] { table.Columns[“MSSV”] };
DataRow row = table.NewRow();row[“MSSV”] = 123;row[“HoTen”] = “Nguyễn Văn A”;table.Rows.Add(row);
DataSet (cont)SqlConnection cnn = new
SqlConnection(“server=HIENLTH-PC\SQLEXPRESS; database=Northwind; user id=sa; password=sa”);
SqlDataAdapter da = new SqlDataAdapter(“select * from Orders”, cnn)
DataSet ds = new DataSet();
64
DataSet ds = new DataSet();
da.Fill(ds);foreach (DataRow row in ds.Tables[0].Rows)
row[“OrderDate”] = DateTime.Now;da.Update(ds);
DataSet (cont)
SqlConnection cnn = new SqlConnection(“server=HIENLTH-PC\SQLEXPRESS; database=Northwind; user id=sa; password=sa”);
SqlDataAdapter da = new SqlDataAdapter(“select * from Orders”, cnn)
65
Orders”, cnn)
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows)
if (row[“CustomerID”].ToString() == “Nguyễn Văn A”)
row.Delete();
da.Update(ds);
DataSet (cont)� So sánh DataSet và DataReader:� Tốc độ truy xuất.� Bô nhớ lưu trữ.� Thuận tiện trong thao tác.� Cơ chế kết nối và không kết nối.
66
DataSet (cont) – MS Access
� Đọc dữ liệu từ CSDL
OleDbDataAdapter da = new OleDbDataAdapter(
"select * from HocSinh", cnn);
DataSet dsHocSinh=new DataSet();
67
DataSet dsHocSinh=new DataSet();
da.Fill(dsHocSinh, "HocSinh");
for (int i = 0; i < dsHocSinh.Tables["HocSinh"].Rows.Count; i++)
{
listBox1.Items.Add(
dsHocSinh.Tables["HocSinh"].Rows[i]["HoTen"].ToString());
}
DataSet (cont) – MS Access� Xử lý dữ liệu� Thêm dữ liệu
DataRow newRow;newRow=dsHocSinh.Tables["HocSinh"].NewRow();newRow[0] = 10;newRow[1] = "Lê Thị B";dsHocSinh.Tables["HocSinh"].Rows.Add(newRow);
68
dsHocSinh.Tables["HocSinh"].Rows.Add(newRow);� Xoá dữ liệu
dsHocSinh.Tables["HocSinh"].Rows[0].Delete();� Thay đổi dữ liệu
DataRow row = dsHocSinh.Tables["HocSinh"].Rows[1];row.BeginEdit();row[0] = 11;
row[1] = "Lê Thị C";row.EndEdit();
DataSet (cont) – MS Access� Cập nhật dữ liệu xuống CSDL
OleDbCommandBuilder buider = new OleDbCommandBuilder(da);
da.Update(dsHocSinh, "HocSinh");
69
Trình bày dữ liệu
70
Nhắc lại SqlDataAdapter� SqlDataAdapter được dùng để điền dữ liệu vào đối
tượng DataSet, DataTable và cập nhật dữ liệu từ hai đối tượng này trở lại dữ liệu nguồn.
� Các trường hợp tạo đối tượng SqlDataAdapter:� SqlDataAdapter(string SQL, SqlConnection cnn);� SqlDataAdapter(SqlCommand cmd);
� Điền dữ liệu:� sqlDataAdapter.Fill(datasetname);� sqlDataAdapter.Fill(datatable);� sqlDataAdapter(DataSet dataset, int start, int end);� sqlDataAdapter(int start, int end, DataTable datatable);
Phân trang
71
Cập nhật dữ liệu từ DataAdapter� Trong Form khai báo các thuộc tính là đối tượng
DataSet (hay DataTable)� Lấy dữ liệu: Đổ dữ liệu vào DataSet
dataAdapter.Fill(dataset);� Cập nhật dữ liệu: Cập nhật dữ liệu từ DataSet
72
� Cập nhật dữ liệu: Cập nhật dữ liệu từ DataSet vào CSDL
dataAdapter.Update(dataset);
DataView� Thể hiện của 1 DataTable.
� Đóng vai trò quan trọng trong DataBinding
� 1 DataTable có thể có nhiều View khác nhau� Dùng để trình bày dữ liệu dưới hình thức lọc, sắp
xếp, tìm kiếm, hiệu chỉnh và điều hướng dữ liệu trong
73
xếp, tìm kiếm, hiệu chỉnh và điều hướng dữ liệu trong DataTable
DataTable
DataViewDataViewDataView
Khai báo DataView� Có thể sử dụng các cú pháp sau:� dataView = new DataView();
dataView.Table = dataTable;� dataView = new DataView(dataTable);� dataView = new DataView(dataTable, sortFilter,
74
� dataView = new DataView(dataTable, sortFilter, sortString, DataViewRowState);
DataView
Tên Ý nghĩa
AllowDelete Cho phép xóa trên thể hiện
Danh sách các thuộc tính
75
AllowDelete Cho phép xóa trên thể hiện
AllowEdit Cho phép chỉnh sửa
AllowNew Cho phép thêm mới
Item (index) Lấy giá trị value tại column có chỉ số index
RowFilter Thiết lập Expression dùng để lọc row
Sort Sắp xếp tăng hoặc giảm theo column
Table Cho biết view này được tạo bởi table nào
Count Lấy số lượng mẫu tin có trong DataView
DataView
Tên Ý nghĩa
AddNew Thêm mới 1 mẫu tin
Danh sách các phương thức
76
AddNew Thêm mới 1 mẫu tin
Delete(index) Xóa mẫu tin thứ index
77
DataBinding� Hiển thị dữ liệu trong DataTable, … vào các
control (TextBox, ComboBox, DataGrid, …)� Gồm 2 loại:� Simple Binding� Complex Binding
78
� Ví dụ: Điền nội dung bảng TonGiao vào ComboBox Tôn Giáo
DataTable bang = ketnoi.GetDataTable(“SELECT * FROM TonGiao”);
cboTonGiao.DataSource = bang;cboTonGiao.DisplayMember = bang.Columns[1].ToString();//TenTGcboTonGiao.SelectedValue = bang.Columns[0].ToString();//MaTG
Đưa dữ liệu vào l ưới DataGridView
79
Điền dữ liệu vào DataGridView� datagridview.DataSource = datatable;� datagridview.DataSource =
dataset.Tables[index];
80
DataGridView (tt)� Các thu ộc tính c ủa DataGridView:� DataSource : điền dữ liệu vào DataGridView� CurrentRow : lấy mẫu tin đang chọn� CurrentCell : lấy ô đang chọn
� Các bi ến cố (Event) c ủa DataGridView:
81
� Các bi ến cố (Event) c ủa DataGridView:� SelectionChanged : xảy ra khi người dùng di
chuyển vào vùng dữ liệu� DoubleClick
Nội dung� Sơ lược lịch sử phát triển� Kiến trúc ADO.NET� .NET Data Provider� DataSet
Hỏi & Đáp
82
�Hỏi & Đáp
Tham kh ảo� Bài giảng ADO.NET của thầy Nguyễn Minh Huy, ĐH KHTN TpHCM
83
Lương Trần Hy Hiến 1/23
BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS – C#
1. Phần 1: Làm quen với ứng dụng Form
1.1. Bài 01 – Viết chương trình nhập vào 2 số a và b, cho biết số lớn nhất và nhỏ nhất
trong 2 số a,b với giao diện như sau
Hình 1: Chương trình tìm Min, Max 2 số
Hướng dẫn gợi ý: sử dụng cấu trúc If …Else
1.2. Bài 02 – Viết chương trình nhập vào 2 số a, b và c cho biết số lớn nhất và nhỏ nhất
trong 3 số a, b và c với giao diện như sau
Hình 2: Chương trình tìm Min, Max 3 số
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HCM KHOA TOÁN – TIN HỌC http://www.hcmup.edu.vn
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 2/23
1.3. Bài 03 - Nhập vào một số nguyên từ 0 đến 9, hiển thị bằng “chữ” các ký số trên, ví dụ:
- Nhập 1 � “Một” - Nhập 2 � “Hai” - Nhập 3 � “Ba” - .. - Nhập 9 � “Chín”
Hình 3: Chương trình đọc số
Hướng dẫn gợi ý: sử dụng cấu trúc switch … case
1.4. Bài 04 - Nhập vào một số nguyên dương N, hiển thị bằng “chữ” số vừa nhập trên, ví
dụ:
- Nhập 1 � “Một” - Nhập 12 � “Mười hai” - Nhập 123 � “Một trăm hai mươi ba”
Hình 4: Chương trình đọc số tổng quát
Hướng dẫn gợi ý: sử dụng cấu trúc switch … case
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 3/23
1.5. Bài 05 - Viết chương trình nhập vào giá trị nguyên dương N, tính tổng
S = 1 + 2 + 3 +…+ N với giao diện như sau
Hình 5: CT tính tổng N số nguyên liên tiếp - 1
Hướng dẫn gợi ý: sử dụng vòng lặp While, For
1.6. Bài 06- Viết chương trình nhập vào giá trị nguyên dương N, tính tổng
S = 1 + 2 + 3 +…+ N với giao diện như sau
Hình 6: CT tính tổng N số nguyên liên tiếp - 2
Tương tự tính tổng - S = 1 + 3 + 5 + 7 +…+ (2N +1) - S = 2 + 4 + 6 + 8 +…+ 2N.
1.7. Bài 07: Viết chương trình gồm 1 form trong đó có 1 button và 1 label hiển thị số lần nhấn button đó.
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 4/23
1.8. Bài 08- Viết chương trình nhập vào giá trị nguyên dương N, và số thực X, tính tổng
S = X + X2 + X3 + X4 +..+ XN
Hình 7: CT tính tỗng lũy thừa Tương tự tính tổng - S = X + X3 + X5 + X5 +..+ X2N+1 - S = X2 + X4 + X6 +..+ X2N
1.9. Bài 09 – (BT có hướng dẫn) Máy tính đơn giản thực hiện các chức năng +, -, *, /.
MÁY TÍNH ĐƠN GIẢN
Hình 8: Chương trình máy tính đơn giản
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 5/23
Bước 1: Tạo Project, ghi tiêu đề form, icon form, ẩn nút Minimize, Maximize
Bước 2: Thiết kế màn hình và đặt tên như hình sau:
Trong đó các phím số đặt tên từ btn0 � btn9. Bước 3: Khai báo các biến cần thiết
• string chuoitam = "" ; //Dùng để lưu giữ tạm giá trị của số nhập vào • char toantu; //Dùng lưu kí hiệu toán tử của phép toán, vd: +, -, *, / • double[] toanhang = new double[2];//Lưu 2 toán hạng (số hạng) của phép toán • double ketqua; //Dùng lưu kết quả của phép toán • int buoc = 1; //Dùng lưu giữ số bước thực hiện phép toán
//Khai báo biến string chuoitam = "" ;
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 6/23
char toantu; double[] toanhang = new double[2]; double ketqua; int buoc = 1;
Bước 4: Viết hàm cho chung cho các phím số (0 � 9) Đặt tên cho phím vừa bấm là b. Nếu b rỗng, kết thúc hàm. Ngoài ra chúng ta cũng loại trừ trường hợp có rất nhiều số 0 đứng trước một số khác (ví dụ 000000001 chính là 1). Do đó b.Text == “0” && chuoitam.Length == 0 thì kết thúc hàm. //Hàm bấm phím số private void NumberButtons(object sender, EventArgs e) {
Button b = sender as Button; if ((b == null) || (b.Text == "0" && chuoitam.Length == 0)) return; chuoitam += b.Text; txtManHinh.Text = chuoitam;
} Lưu ý: Cho tất cả các phím số gọi hàm này ứng với sự kiện click. Bước 5: Viết hàm xử lý cho nút +/- (dương/âm) //Hàm xử lý cho nút +/- (dương/âm) private void btnCongTru_Click(object sender, EventArgs e) { if (chuoitam.Contains('-')) chuoitam = chuoitam.Replace("-" , "" ); else chuoitam = "-" + chuoitam; txtManHinh.Text = chuoitam; } Bước 6: Viết hàm xử lý cho phím . //Hàm xử lý phím chấm private void btnCham_Click(object sender, EventArgs e) { if (!chuoitam.Contains('.')) { chuoitam = chuoitam + "."; txtManHinh.Text = chuoitam; } } Bước 7: Viết hàm xử lý cho nút C //Hàm xử lý nút C private void btnC_Click(object sender, EventArgs e) { if (chuoitam.Length == 0) { buoc = 1; toanhang[0] = toanhang[1] = 0.0; toantu = ' '; ketqua = 0.0; } else chuoitam = "0";
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 7/23
txtManHinh.Text = chuoitam; } Bước 8: Viết hàm xử lý cho phím bằng1
Bước 8: Viết hàm xử lý các phím thực hiện phép toán2
1.10. Bài 10: Chương trình máy tính của Windows 7. Thiết kế máy tính bỏ túi có các chức năng như hình bên. Không cần thiết kế menu.
1 Sinh viên tự hoàn chỉnh thêm cho trường hợp bấm nhiều dấu = liên tiếp. 2 Sinh viên tự hoàn chỉnh thêm cho trường hợp bấm nhiều lần 1 toán tử.
//Hàm bấm phím số private void btnBang_Click(object sender, EventArgs e) { if (chuoitam.Length != 0) toanhang[1] = Double.Parse(chuoitam); switch (toantu) { case '+': ketqua = toanhang[0] + toanhang[1]; break; case '-': ketqua = toanhang[0] - toanhang[1]; break; case '*': ketqua = toanhang[0] * toanhang[1]; break; case '/': ketqua = toanhang[0] / toanhang[1]; break; } txtManHinh.Text = ketqua.ToString(); //Gán lại giá trị ban đầu buoc = 1; chuoitam = "" ; }
//Hàm bấm phím số private void Operations(object sender, EventArgs e) { Button b = sender as Button; if (buoc == 1) toantu = b.Text[0];//Lấy kí hiệu toán tử if (chuoitam.Length == 0) toanhang[buoc - 1] = ketqua; else toanhang[buoc - 1] = Double.Parse(chuoitam); if (buoc == 2) { btnBang_Click(null, null); toantu = b.Text[0]; toanhang[0] = ketqua; buoc = 2; } else { txtManHinh.Text = toanhang[0].ToString(); buoc++; } chuoitam = "" ; }
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 8/23
1.11. Bài 11: Viết chương trình tính ti ền dịch vụ nha khoa với yêu cầu sau:
Hình 9: Chương trình tính ti ền nha khoa
1. Khi chạy chương trình (F5) sẽ xuất hiện màn hình như trên, trong đó cấm thao tác trên tất cà các
đối tượng trừ đối tượng textbox lưu trữ tên khách hàng và nút thoát. 2. Nếu người dùng nhập tên khách hàng thì mới cho phép thao tác trên các control khác (trừ
textbox tổng cộng). 3. Nhấn vào nút “Tính ti ền”, thực hiện tính tổng tiền theo lựa chọn của khách hàng và hiển thị
thông báo dạng “Khách hàng: XYZ cần trả số tiền ABC” với XYZ là tên nhập vào, ABC là số tiền cần trả.
4. Nhấn vào nút “Xóa”: đưa màn hình trở lại trạng thái lúc khởi tạo. 5. Nhấn vào nút “Thoát”: Xuất hiện thông báo “Bạn muốn có đóng chương trình không?”
o Nếu người dùng chọn Yes, đóng chương trình. o Nếu người dùng chọn No, trở lại chức năng trước đó.
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 9/23
2. Phần 2: Làm quen Combobox, Listbox
2.1. Bài 01: Danh sách tên
2.1.1. Tạo Form theo mẫu:
2.1.2. Các thuộc tính:
2.1.2.1.Không cho phép resize form: Property New Value FormBorderStyle FixedSingle Size 370, 225 Text Add Names
2.1.2.2. Các Control: Control Type Property New Value Button Name closeButton Location 273, 16 Text Close Button Name addButton Location 16, 16 Text Add Label Text Title Label Text First Name Location 132, 56 Label Text Last Name Location 248, 56 TextBox Name firstTextBox Location 132, 80 Text (blank) TextBox Name lastTextBox Location 248, 80 Text (blank) ComboBox Name titleComboBox Items Mr.;Mrs.;Ms.;Miss.;Dr. Location 16, 80 MaxDropDownItems 4 Size 100,21
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 10/23
Text (blank) ListBox Name namesListBox Location 16, 112 Size 336, 69
2.1.3. Các sự kiện:
2.1.3.1.Sự kiện cho nút Close: private void closeButton_Click( object sender, EventArgs e) {
this .Close();//thêm code này }
2.1.3.2.Sự kiện cho nút Add: private void addButton_Click( object sender, EventArgs e)
{ //add the following code string first = firstTextBox.Text; string title = titleComboBox.Text; string last = lastTextBox.Text; string nameToAdd = title + " " + first + " " + last; namesListBox.Items.Add(nameToAdd); }
2.1.4. Kết quả chương trình:
Hình 10: Chương trình hiển thị danh sách tên
Ghi chú: Bài tập này sinh viên tự thực hiện
2.2. Bài 02: Sercurity Panel
2.2.1. Xây dựng ứng dụng theo yêu cầu sau: Một phòng lab muốn thiết lập một Sercurity Panel đặt bên ngoài cửa. Chỉ cho phép những
các cá nhân có trách nhiệm mới được vào và mỗi lần đăng nhập họ phải nhập các sercurity code được cung cấp. Những sercurity code (hay còn gọi là access code) sau được xem là hợp lệ và cung cấp cho các nhóm nhân viên như bảng sau: Value Group 6990 oe 6999 Technicians 0100 Custodians 9998, 1006 – 1008 Scientist
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 11/23
Một khi nhập access code thì sẽ có hai trạng thái: granted hoặc denied. Tất cả thông tin truy cập sẽ được hiển thị trong một khung thông tin bên dưới keypad. Nếu access là granted thì ngày, thời gian, group (technician, custodian, scientist) sẽ được hiển thị ở khung thông tin. Trường hợp access là denied thì ngày, giờ và thông tin “Access denied” sẽ hiển thị ở khung bên dưới. Ngoài ra user nếu chỉ nhấn một con số sercurity code thì sẽ hiển thị ra thông báo là ngày, giờ và “Restricted Access”.
2.2.2. Giao diện chương trình:
Hình 11: Minh họa giao diện của ứng dụng Security Panel
2.2.3. Yêu cầu nâng cao:3 - Bổ sung chức năng log file: tất cả thông tin login dù access granted hay denied đều
được ghi nhận vào file dạng text. File này được lưu trữ cùng với thư mục của ứng dụng.
3 Sinh viên tự thực hiện sau khi đã đọc bài làm việc với file.
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 12/23
3. Phần 3: Làm quen với các control Toolbar, Menu
3.1. Bài 01 – Viết chương trình thể hiện màn hình “Đăng nhập” (login) chương trình như
sau
Hình 12: Màn hình đăng nhập
- Khi nhấn vào nút “Đăng nhập”, thực hiện kiểm tra
o Nếu tên người dùng = “DHSP” và mật khẩu = “tinhoc” thì hiển thị thông báo (MessageBox) “Đăng nhập thành công
o Ngược lại: thông báo “Không đúng tên người dùng/mật khẩu” - Khi nhấn vào nút “Thoát”� Kết thúc chương trình
3.2. Bài 02 – Viết chương trình thể hiện màn hình “Đăng nhập” (login) chương trình như
sau
Hình 13: Màn hình đăng nhập
- Khi nhấn vào nút “Đăng nhập”, thực hiện kiểm tra
o Nếu tên người dùng = “DHSP” và mật khẩu = “tinhoc” thì � Ẩn màn hình “Đăng nhập” � Hiển thị màn hình chính với hình thức thể hiện như sau
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 13/23
o Ngược lại: thông báo “Không đúng tên người dùng/mật khẩu” - Khi nhấn vào nút “Thoát” hiển thị thong báo “Bạn có muốn thoát chương trình không ?”
o Nếu chọn “Yes”� Kết thúc chương trình o Ngược lại: trở lại màn hình login
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 14/23
3.3. Bài 03 – Viết chương trình quản lý học sinh với hệ thống menu và Toolbar như sau4
- Nhấn vào chức năng “H ệ thống\Đăng nhập” trong menu hoặc nút hình “Chùm khóa” trên ToolBar, hiển thị màn hình login như trong bài tập 01.
- Nhấn vào chức năng “Qu ản lý học sinh\Thông tin học sinh” trong menu hoặc nút hình “M ũ tốt nghiệp” trên ToolBar, hiển thị màn hình thông tin sinh viên như trong bài tập 03.
- Nhấn vào chức năng “H ệ thống\Thoát”: Kết thúc chương trình
4 Sinh viên có thể dùng bài thiết kế này để làm Project Quản lý Sinh viên.
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 15/23
- Hệ thống Menu như sau:
Hệ thống thực đơn
Hệ thống Danh mục Quản lý học sinh Báo cáo thống kê Giúp đỡ
- Cấu hình hệ thống - Quản lý người dùng - Đăng nhập - Đổi mật khẩu - Thoát
- Danh mục giáo viên - Danh mục quận huyện - Danh mục loại hồ sơ
- Hồ sơ học sinh - Phân lớp - Xem điểm - Điểm danh - Khen thưởng - Kỷ luật
- Thống kê danh sách học sinh - Bảng điểm
- Hướng dẫn sử dụng - Tác giả
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 16/23
3.4. Bài 04 – Viết chương trình thể hiện thông tin sinh viên với giao diện như hình vẽ
- Nhấn vào nút “đọc dữ liệu từ file”: đọc dữ liệu từ tập tin “ThongTinSV.txt” với định dạng như bên dưới đưa vào các control trên màn hình.
- Định dạng tập tin “ThongTinSV.txt” Họ và chữ lót: Nguyễn Văn Tên: Thịnh Ngày Sinh: 05/11/2005 Tôn giáo: Không Địa chỉ: 123 Trương Định – Q3 Điện Thoại: 8234567 Email: [email protected] Dân tộc: Kinh Giới tính: Nam Ngoại ngữ: Anh Văn, Pháp Văn
- Nhấn vào nút “Lưu dữ liệu xuống file”, ghi dữ liệu thông tin sinh viên trên màn hình xuống tập tin “ThongTinSV.txt”
- Khi nhấn vào nút “Thoát”� Kết thúc chương trình
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 17/23
4. Phần 4: Đồ họa GDI+
4.1. Hộp thoại màu đơn giản
4.1.1. Sử dụng hộp thoại Font: Thiết kế Form theo mẫu:
Yêu cầu: Hiển thị hộp thoại màu (ColorDialog) để thay đổi màu nền, màu chữ.
4.1.2. Một số kiến thức:
Khái niệm cơ bản:
� 1 đối tượng Graphics quản lý 1 bối cảnh đồ họa � Mỗi phương thức có nguồn gốc từ System.Windows.Forms.Form kế thừa 1 phương thức
virtual OnPaint. � Các đối số trong phương thức OnPaint bao gồm 1 đối tượng PaintEventArgs. Graphics g = e.Graphics;
FONT
Khai báo thư viện: System.Drawing và System.Drawing.Text 4 lớp cơ bản liên quan đến đối tượng FONT:FontStyle, FontFamily,GraphicsUnit, Font Hàm vẽ chuỗi: void DrawString(string s, Font font, Brush brush, float x, float y); void DrawString(string s, Font font, Brush brush, Point p); Bút vẽ:
Pen(Color c); Pen(Color c, float width); Pen(Brush b); Pen(Brush b, float width);
Chổi tô: SolidBrush: Chổi tô đặc với màu đã chọn. SolidBrush(Color c); FontStyle:
Thành phần Đặc tả Bold Chữ in đậm Italic Chữ in nghiêng
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 18/23
Regular Chữ bình thường StrikeOut Chữ với đường gạch ngang thân Underline Chữ gạch chân
FontStyle style = FontStyle .Bold; Font: Font(tên_font, c ỡ); Font(tên_font, c ỡ, style ); Các hàm vẽ Vẽ (rỗng): Draw____ Vẽ đường thẳng: DrawLine Vẽ elip: DrawEllipse Vẽ hình chữ nhật: DrawRectangles … Vẽ hình đặc: Fill____ Hàm tô hình chữ nhật: void FillRectangle(Brush brush, int x, int y, int width, int height);
4.2. Bài tập vẽ hình Thiết kế Form theo mẫu:
Sự kiện vẽ: Ấn chuột trái để lấy điểm đầu tiên, nhả phím chuột để xác định điểm cuối cùng. Sau đó thực hiện vẽ và tô theo màu theo hình đã chọn trên khung vẽ. Hướng dẫn: //Các thuộc tính private Color fill; //l ưu tr ữ màu tô private Color border; //l ưu tr ữ màu nét v ẽ private bool mouse_is_down= false ; private Point start; private Graphics g; // ñối t ượng ñồ h ọa //Sự kiện Form_Load g = panel1.CreateGraphics(); border = Color .Black; fill = Color .Red; //Sự kiện Click chọn màu cho Border ColorDialog dl = new ColorDialog ();
Panel
Button FlatStyle: Flat
NumbericUpDown
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 19/23
dl.FullOpen = true ; dl.AnyColor = true ; if (dl.ShowDialog() == DialogResult .OK) { btn_border.BackColor = dl.Color; border = dl.Color; } //Sự kiện nhấn chuột vào vùng vẽ (MouseDown) mouse_is_down = true ; start = new Point (e.X, e.Y); //Sự kiện nhả chuột vào vùng vẽ (MouseUp) mouse_is_down = false ; //Sự kiện rê (di chuyển) chuột trong vùng vẽ (MouseMove) if (mouse_is_down ) { g.Clear(panel1.BackColor); Point end = new Point(e.X, e.Y); switch(comboBox1.SelectedIndex) { //line case 0: g.DrawLine(new Pen(border,(int)DoDayNet Ve.Value),start, end); break; //empty ellipse. case 1: g.DrawEllipse(new Pen(border,(int)DoDay NetVe.Value), start.X, start.Y,e.X-start.X,e.Y-start.Y); break; //filled ellipse case 2: { g.DrawEllipse(new Pen(border,(int)DoDay NetVe.Value), start.X, start.Y,e.X-start.X,e.Y-start.Y); g.FillEllipse(new SolidBrush(fill),star t.X, start.Y,e.X-start.X,e.Y-start.Y); break; } //empty rectangle case 3: g.DrawRectangle(new Pen(border,(int)DoD ayNetVe.Value), start.X, start.Y,e.X-start.X,e.Y-start.Y); break; //filled rectangle case 4: g.DrawRectangle(new Pen(border,(int)DoD ayNetVe.Value), start.X, start.Y,e.X-start.X,e.Y-start.Y); g.FillRectangle(new SolidBrush(fill),st art.X, start.Y,e.X-start.X,e.Y-start.Y); break; default: break; } }
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 20/23
5. Thiết kế chương trình tựa WordPad: RichTextEditor
5.1. Mục tiêu
• Phát triển ứng dụng Single Document Interface • Làm quen với MenuStrip, ToolStrip, StatusStrip. • Sử dụng các Common Dialog: OpenFileDialog, SaveFileDialog, ColorDialog… • Sử dụng control RichTextBox.
5.2. Nội dung Xây dựng một ứng dụng soạn thảo văn bản có các chức năng sau:
Nhóm ch ức năng cơ bản: - Cho phép soạn thảo trên hai định dạng
o Cơ bản: text File (*.txt) o Nâng cao: Rich Text Format (*.rtf)
- Cho phép định dạng các đoạn text o Align: left, right và center. o Format: bold, italic, underline o Chọn font chữ o Chọn màu chữ o Chọn màu nền của document
- Chức năng Cut, copy và paste. Nhóm ch ức năng nâng cao:
- Các chức năng như sau o Open file: mở file RTF hoặc TXT o Save file: lưu document o New file: tạo mới document o Chức năng chèn ảnh o Chức năng chèn bullet o Indent o Zoom o ...
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 21/23
Hình 14: Giao diện chương trình RichTextEditor
Chi ti ết các Menu:
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 22/23
5.3. Lưu ý: - Sinh viên chỉ cần làm nhóm chức năng cơ bản là đạt yêu cầu - Chức năng nâng cao tùy chọn, sinh viên khá giỏi nên làm.
5.4. Mở rộng: Sinh viên có thể mở rộng bất cứ tính năng nào cho ứng dụng của mình, sự sáng tạo luôn được đánh giá cao.
Hướng dẫn cơ bản:
Sinh viên tìm hiểu các thuộc tính cơ bản của RichTextBox control như: - SelectionFont - SelectionFont.Style: mô tả các kiểu chữ
o Gồm có các kiểu mô tả trong enumeration FontStyle như sau
- SelectionAlignment: thiết lập thuộc tính canh lề
o Gồm có các kiểu mô tả trong enumeration HorizontalAlignment như sau
- SelectionColor: thiết lập màu của text, sử dụng struct Color để mô tả màu
- BackColor: thiết lập màu nền cho document chứa text, sử dụng struct Color
Các phương thức của RichTextBox như: - Cut(): cut đoạn text được chọn vào Clipboard - Copy(): copy đoạn text được chọn vào Clipboard - Paste(): dán đoạn text trong Clipboard vào document.
Hướng dẫn chức năng Bold trên ToolStrip:
Bài tập thực hành lập trình Windows Form với C#
Lương Trần Hy Hiến 23/23
Sinh viên làm tương tự với các chức năng: Italic, Underline… Hướng dẫn chức năng canh lề Thiết lập thuộc tính canh lề trái cho RichTextBox tên rtbDoc
rtbDoc.SelectionAlignment = HorizontalAlignment .Left;
Hướng dẫn chức năng cut, copy và paste cho RichTextBox tên rtbDoc rtbDoc.Cut(); // cut ñoạn text ñược ch ọn vào clipboard
tương tự cho copy và paste Hướng dẫn chức năng nâng cao Insert ảnh vào document: Sinh viên tự nghiên cứu đoạn code sau: OpenFileDialog dlg = new OpenFileDialog (); dlg.Filter = "Bitmap File| *.bmp" ; if (dlg.ShowDialog() == DialogResult .OK) { Image img = Image .FromFile(dlg.FileName); Clipboard .SetDataObject(img); DataFormats . Format df; df = DataFormats .GetFormat( DataFormats .Bitmap); if ( this .rtbDoc.CanPaste(df)) rtbDoc.Paste(df); }
---Chúc các b ạn thành công---
Lương Trần Hy Hiến 1/9
ĐẶC TẢ YÊU CẦU BÀI TẬP PROJECT 02 Nội dung yêu cầu: Viết chương trình qu ản lý h ọc sinh v ới yêu c ầu như sau
1.1. Cơ sở dữ liệu chương trình g ồm có các Table sau (SQL Server 2005)
- Table NguoiDung : quản lý danh sách “người dùng” được phép đăng nhập vào hệ thống, với cấu trúc & dữ liệu tương ứng như sau:
MaND
(ID) TenND
(UserName) MatKhau
(Password) HoTen
(FullName) DiaChi
(Address) Email
1 Admin Admin Quản trị hệ thống
123 Trương Định
2
DHSP dhsp DHSP 280 An Dương Vương
3 Sv01 Sv01 Sinh Viên 153/2 Hoàng Văn Thụ
- Table HocSinh : quản lý danh sách học sinh của chương trình, với các field như sau
STT Tên field Kiểudữ liệu Ghi chú 1. MaHS Numeric Mã học sinh, khóa chính, tự động
tăng 2. Ho nvarchar(50) Họ và chữ lót 3. Ten nvarchar(30) Tên học sinh 4. NgaySinh DateTime Ngày sinh 5. DiaChi nvarchar(100) Địa chỉ 6. DienThoai nvarchar(50) Điện thoại 7. Email nvarchar(50) 8. TonGiao Numeric Tôn giáo 9. DanToc Numeric Dân tộc 10. Hinh Image Hình 11. GioiTinh Int Giới tính
0: Nữ 1: Nam
12. AnhVan Int Anh văn 0: không có 1: có
13. PhapVan Int Pháp văn 0: không có 1: có
14. HoaVan Int Hoa văn 0: không có 1: có
15. HoTenCha nvarchar(50) Họ tên cha
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM TP.HCM KHOA TOÁN – TIN HỌC http://www.hcmup.edu.vn
Bài tập thực hành project 02
Lương Trần Hy Hiến 2/9
16. NgheNghiepCha nvarchar(50) Nghề nghiệp của Cha 17. DiaChiCha nvarchar(50) Địa chỉ của cha 18. HoTenMe nvarchar(50) Họ tên mẹ 19. NgheNghiepMe nvarchar(50) Nghề nghiệp của mẹ 20. DiaChiMe nvarchar(50) Địa chỉ của mẹ
- Table DanToc : lưu trữ danh mục dân tộc
MaDT Ten 1 Kinh 2 Tày 3 Mường 4 H’Mông
- Table TonGiao : lưu trữ danh mục tôn giáo
MaTG Ten 1 Phật giáo 2 Không 3 Thiên chúa giáo 4 Cao đài 5 Hòa hảo
Lược đồ quan h ệ:
Bài tập thực hành project 02
Lương Trần Hy Hiến 3/9
1.2. Viết chương trình th ể hiện màn hình “ Đăng nh ập” (login) ch ương trình nh ư
sau
- Khi nhấn vào nút “Đăng nh ập”, thực hiện kiểm tra o Nếu tên ng ười dùng và mật khẩu tồn tại trong Table NguoiDung thì
� Ẩn màn hình “Đăng nhập” � Hiển thị màn hình chính với hình thức thể hiện như hình màn hình
chính bên dưới • Nếu TenND = “Admin” thì cho phép xem tất cả các chức năng
trong hệ thống menu • Nếu TenND = “DHSP” thì cho phép xem tất cả các chức năng
trong hệ thống menu ngoại trừ chức năng “Quản lý người dùng” trong hệ thống và “danh mục”
• Ngược lại thì cho phép xem tất cả các chức năng trong hệ thống menu ngoại trừ chức năng “Quản lý người dùng” trong “hệ thống”, “danh mục”, “Quản lý học sinh”
o Ngược lại: thông báo “Không đúng tên ng ười dùng/m ật khẩu” - Khi nhấn vào nút “Thoát ” hiển thị thong báo “Bạn có muốn thoát chương trình
không ?” o Nếu chọn “Yes”� Kết thúc chương trình o Ngược lại: trở lại màn hình đăng nhập.
Bài tập thực hành project 02
Lương Trần Hy Hiến 4/9
Bài tập thực hành project 02
Lương Trần Hy Hiến 5/9
- Hệ thống Menu như sau: (có thể thêm nếu thấy cần thiết)
Hệ thống thực đơn
Hệ thống Danh mục Quản lý học sinh Báo cáo thống kê Giúp đỡ
- Cấu hình hệ thống - Quản lý người dùng - Đăng nhập - Đổi mật khẩu - Thoát
- Danh mục giáo viên - Danh mục quận huyện - Danh mục loại hồ sơ
- Hồ sơ học sinh - Phân lớp - Xem điểm - Điểm danh - Khen thưởng - Kỷ luật
- Thống kê danh sách học sinh - Bảng điểm
- Hướng dẫn sử dụng - Tác giả
Bài tập thực hành project 02
Lương Trần Hy Hiến 6/9
- Nhấn vào chức năng “Hệ thống\Đăng nh ập” trong menu hoặc nút hình “Ổ khóa” trên ToolBar , hiển thị màn hình đăng nhập cho phép đăng nhập lại.
- Nhấn vào chức năng “Hệ thống\Thoát”: Kết thúc chương trình - Nhấn vào chức năng “Hệ thống\Quản lý ng ười dùng” trong menu hoặc nút hình
“3 ng ười” trên ToolBar , hiển thị màn hình quản lý người dùng như hình bên dưới.
o Khi màn hình vừa được load, không cho phép người dùng thao tác � Các TextBox � Các nút: Ghi, Không, Thoát
o Xử lý nút lệnh “Thêm” : thêm mới người dùng � Cho phép nhập thông trong các TextBox (trừ thông tin ID) � Disbale các nút lệnh “Thêm”, “Xóa”, “Sửa”, “Thoát” � Enable các nút lệnh “Ghi”, “Không”
o Xử lý nút lệnh “Xóa” : � Nếu TenNguoiDung = “Admin” thì hiển thị thông báo “không được
quyền xóa user này” � Ngược lại hiển thị thông báo hỏi “Bạn có muốn xóa không?”
Bài tập thực hành project 02
Lương Trần Hy Hiến 7/9
• Nếu chọn “Yes” thì thực hiện xóa và load lại danh sách người dùng
• Ngượi lại (chọn “No”): quay lại màn hình quản lý người dùng o Xử lý nút lệnh “Sửa” : cho phép sửa thông tin người dùng
� Cho phép nhập thông trong các TextBox (trừ thông tin mã) � Disbale các nút lệnh “Thêm”, “Xóa”, “Sửa”, “Thoát” � Enable các nút lệnh “Lưu”, “Không”
o Xử lý nút lệnh “Không”: � Hủy bỏ thao tác thêm/sửa thông tin người dùng � Hiển thị thông tin người dùng đã chọn trước đó
o Xử lý nút lệnh “Ghi”: c ập nhật CSDL (thêm/sửa) thông tin người dùng và load lại danh sách người dùng
- Nhấn vào chức năng “Qu ản lý h ọc sinh\Thông tin h ọc sinh” trong menu hoặc
nút hình “th ằng ng ười có cà v ạt” trên ToolBar , hiển thị màn hình thông tin sinh viên.
Bài tập thực hành project 02
Lương Trần Hy Hiến 8/9
o Khi màn hình vừa được load, không cho phép người dùng thao tác � Các TextBox � Các nút: Ghi, Không, Thoát
o Xử lý nút lệnh “Thêm” : thêm mới học sinh � Cho phép nhập thông trong các TextBox (trừ thông tin ID) � Disbale các nút lệnh “Thêm”, “Xóa”, “Sửa”, “Thoát” � Enable các nút lệnh “Lưu”, “Không”
o Xử lý nút lệnh “Xóa” : Hiển thị thông báo hỏi “Bạn có muốn xóa không ?” � Nếu chọn “Yes” thì thực hiện xóa và load lại danh sách học sinh � Ngượi lại (chọn “No”): quay lại màn hình quản lý học sinh
o Xử lý nút lệnh “Sửa” : cho phép sửa thông tin học sinh � Cho phép nhập thông trong các TextBox (trừ thông tin ID) � Disbale các nút lệnh “Thêm”, “Xóa”, “Sửa”, “Thoát” � Enable các nút lệnh “Lưu”, “Không”
o Xử lý nút lệnh “Không”: � Hủy bỏ thao tác thêm/sửa thông tin học sinh � Hiển thị thông tin học sinh đã chọn trước đó
o Xử lý nút lệnh “L ưu”: c ập nhật CSDL (thêm/sửa) thông tin học sinh và load lại danh sách học sinh
Bài tập thực hành project 02
Lương Trần Hy Hiến 9/9
1.3. Sử dụng Crystal Report t ạo các Report sau
- In danh sách thí sinh theo dân tộc
- In danh sách thí sinh theo tôn giáo
HƯỚNG DẪN TẠO USER LOGIN VÀO SQL 2005 VỚI DATABASE MÌNH CH ỌN
1. CHUYỂN SANG ĐĂNG NHẬP BẰNG TÀI KHO ẢN SQL
• Trong Object Explorer , right click vào [tên máy]\SQLEXPRESS , chọn Properties . Ví dụ: .\ SQLEXPRESS
• Trong dialog "Server Properties ", chọn Security • Phần "Server Authentication ", chọn option thứ 2: "SQL Server and
Windows Authentication mode "
TẠO USER LOGIN VÀO DATABASE 2
• Bấm OK. • Restart lại SQL Express Service (hoặc restart lại máy nếu cần). • Login lại vào SQL 2005 Express bằng user của bạn.
2. TẠO USER LOGIN VÀO DATABASE
• Trong Object Explorer, right click vào phần Security �Login , chọn New Login .
3 TẠO USER LOGIN VÀO DATABASE
• Điền các thông tin về User:
(Enforce password policy: Mật khẩu tuân theo quy tắc của SQL – chữ, số)
TẠO USER LOGIN VÀO DATABASE 4
• Gán quyền trên database mà bạn cần thao tác:
• 2 quyền cơ bản: db_datawriter (ghi), db_datareader (đọc). • Bấm OK để hoàn tất quá trình tạo User Login. (Chú ý quyền trên Database
nào).
Chúc các b ạn thành công!
1 GV: Lương Trần Hy Hiến
Hướng dẫn Backup và Restore Database trong SQL2005 Mục đích:
• Dùng để di chuyển CSDL đến Server mới. • Tạo bản sao lưu (backup) dự phòng.
1. Backup: Bước 1: Trong cửa sổ của MSSQL Server Management Studio, chuột phải trên Database cần Backup, chọn Tasks, chọn tiếp Backup…
2 GV: Lương Trần Hy Hiến
Bước 2: Chọn nơi lưu Database Backup, mặc định sẽ lưu tại C:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\Backup. Sau đó bấm .
Bước 3: Bấm để hoàn tất quá trình Backup.
3 GV: Lương Trần Hy Hiến
2. Restore: Bước 1: Trong cửa sổ của MSSQL Server Management Studio, chuột phải trên mục Databases, chọn Restore Database…
Bước 2: Chọn nơi chứa Database backup bằng cách click chọn và click
4 GV: Lương Trần Hy Hiến
Bước 3: Click , sau đó chọn file backup. Sau đó bấm .
5 GV: Lương Trần Hy Hiến
Bước 4: Bấm
Bước 5: Click chọn ( ) database tương ứng. Sau đó chọn tên Database cần Restore ở phần To
database ( ).Sau đó bấm .
6 GV: Lương Trần Hy Hiến
Bước 6: Click để hoàn tất quá trình Restore.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 1/19
HƯỚNG DẪN THỰC HÀNH CRYSTAL REPORT
Trong VS2005, bạn đã tạo 1 ứng dụng dạng Windows Form mới với tên là QuanLyNhanVien (để làm các phần khác).
1/ Tạo CSDL cho ứng dụng: Giả sử CSDL bao gồm 2 bảng NhanVien và PhongBan với cấu trúc như
sau:
Hình 1: Bảng Nhân Viên (NhanVien)
Hình 2: Bảng Phòng Ban (PhongBan)
Giữa 2 bảng NhanVien và PhongBan có liên kết thông qua khóa ngoại MaPB trong bảng NhanVien
Hình 3: Relationship
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 2/19
2/ Thêm 1 report mới vào ứng dụng: - Từ Solution Explorer, right-click, chọn Add New Item, thêm 1 Report
mới vào ứng dụng với tên là reportNhanVien
Hình 4: Màn hình thêm Item Crystal Report
Trong màn hình Crystal Report Gallery, chọn Blank Report:
Hình 5: Màn hình chọn loại Report
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 3/19
3/ Thiết kế report:
3.1/ Cấu trúc 1 report Một report bao gồm 5 phần chính: - Report header: phần thông tin đầu tiên của report. Một báo cáo report
thường sẽ gồm nhiều trang, report header chính là phần xuất hiện chỉ một lần ở trang đầu tiên của toàn report.
- Page header: phần hiển thị thông tin xuất hiện ở đầu mỗi trang của report. Ví dụ như một báo cáo dạng bảng có nhiều cột như: STT, Tên, Địa chỉ, SĐT… thì đầu mỗi trang cần lặp lại những tiêu đề cột để người đọc nhận biết dễ dàng ý nghĩa mỗi cột.
- Details: phần hiển thị thông tin chi tiết của report. Một report thường bao gồm nhiều mục với vai trò như nhau tương ứng với các record của database mà report sử dụng. Phần details sẽ liệt kê những record đó.
- Report footer: phần hiển thị thông tin xuất hiện chỉ một lần ở cuối report. Ví dụ thông tin như người lập báo cáo là ai, tại đâu, hôm nào sẽ được đặt ở report footer.
- Page footer: phần thông tin xuất hiện cuối mỗi trang. Ví dụ số trang được đặt ở page footer.
Hình 6: Cấu trúc Report 1 trang
Hình 7: Cấu trúc Report nhiều trang
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 4/19
2.2/ Kết nối report đến CSDL: Từ Field Explorer, chọn Database Fields, right-click, chọn Database
Expert:
Hình 8: Màn hình chọn Database Expert
Trong hộp thoại Data Expert, chọn node Create New Connection |
OLEDB | Make New Connection, right-click chọn Make New Connection.
Hình 9: Màn hình tạo mới 1 Connect
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 5/19
Chọn Microsoft OLEDB Provider for SQL Server
Hình 10: Màn hình chọn Provider cho SQL Server
Thiết lập kết nối đến CSDL QuanLyNhanVien:
Hình 11: Màn hình khai báo thông tin Connect
Chọn Next, Finish để trở về hộp thoại Data Expert. Trong hộp thoại Data Expert, danh sách bên tay phải sẽ là các thông tin sẽ được hiển thị lên report.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 6/19
Hình 12: Chọn Table cho Report
Chẳng hạn, ta cần hiển thị thông tin bảng NhanVien lên report, click chọn
bảng NhanVien và click button để đưa bảng này sang danh sách bên tay phải, click OK.
Hình 13: Hướng dẫn chọn Table (dùng >)
Trên Field Explorer sẽ hiển thị danh sách các field trong table NhanVien.
Hình 14: Fields Explorer
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 7/19
Để thông tin ta đưa lên Field Explorer là kết quả của 1 câu truy vấn, ta trở lại hộp thoại Data Expert, bỏ node NhanVien ở danh sách bên tay phải
Chọn Add Command, click button
Hộp thoại Add Command To Report xuất hiện, nhập câu lệnh sql vào textBox bên tay trái:
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 8/19
Kết quả của quá trình dùng lệnh SQL để truy vấn lấy dữ liệu:
Hình 15: Màn hình kết quả chọn field từ Command
Trên Field Explorer, danh sách các thuộc tính có thể được hiển thị trên
report sẽ là kết quả của câu truy vấn trên:
Bạn có thể chọn và kéo rê vào report hoặc có thể thiết kế bằng Wizard.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 9/19
Dùng Wizard:
Hình 16: Chọn field hiển thị trên Report
Hình 17: Chọn field gom nhóm
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 10/19
Hình 18: Chọn field gom nhóm
Hình 19: Chọn cột sắp xếp theo tên nhóm
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 11/19
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 12/19
Hình 20: Cọn kiểu Report
2.3/ Thiết kế các thành phần của report Sau khi lấy được thông tin từ CSDL, ta sẽ thiết kết report để hiển thị nội
dung của các thông tin này. a/ Thiết kế Report Header: Ở Report Header, giả sử ta sẽ hiển thị logo của công ty và 1 dòng văn
bản thể hiện nội dung report. - Thêm 1 hình ảnh vào report:
Tại Report Header, right-click, chọn Insert | Picture, xác định đường dẫn đến file hình ảnh sẽ được chèn lên report. Ảnh chèn vào có thể thay đổi vị trí, kích thước để phù hợp với kích thước của report.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 13/19
- Thêm 1 đoạn văn bản vào report:
Right-click, chọn Insert | Text Object , nhập nội dung văn bản cần chèn. Để thay đổi định dạng hiển thị của đoạn văn bản này, click chọn đối
tượng, right-click, chọn Format Object. - Thêm 1 đường kẻ vào report
Right-click, chọn Insert | Line , kéo thả đường kẻ cần vẽ
b/ Thiết kế nội dung báo cáo ( Details ) Từ Field Explorer, drag drop các Database field cần hiển thị lên report vào
vùng Details trên report Khi drag drop một Database field vào vùng Details, 1 văn bản được tự
động thêm vào vùng Page Header với nội dung là tên cột của field dữ liệu này, để thay đổi tên cột, double click vào đối tượng object này hay right-click, chọn Edit Text Object.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 14/19
Tiếp tục drag drop lên vùng Details các Database field thông tin khác mà
cần hiển thị lên report.
Sau khi thiết kế xong, click vào tab Main Report Review để xem kết quả.
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 15/19
c/ Hoàn thiện report:
- Chèn số thứ tự của từng record trong báo cáo: Trên vùng Details, right-click, chọn Insert | Special Fields | Record
Number
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 16/19
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 17/19
- Đánh số trang cho từng trang của report: Thông tin về số trang sẽ được hiển thị ở vùng Page Footer của report Trên vùng Page Footer, right-click, chọn Insert | Special Field | Page
Number
2.4/ Nạp report lên của sổ ứng dụng: Từ tab Crystal Reports trên thanh toolBox, kéo thả 1 control Crystal
Report Viewer vào Form
Thiết lập thuộc tính ReportSource của Crystal Report Viewer
Chạy ứng dụng để xem kết quả.
2.5/ Gom nhóm việc hiển thị thông tin: Giả sử ta có nhu cầu cần gom nhóm danh sách nhân viên theo từng Phòng
ban để hiển thị theo dạng sau:
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 18/19
Phòng A STT Họ tên Ngày sinh Lương 1 ABC 1/1/1990 2000000 2 DEF 1/1/1988 2100000 Phòng B STT Họ tên Ngày sinh Lương 3 GHK 1/1/1990 2000000 4 MNO 1/1/1988 2100000 Trên Fields Explorer, tại node Group Name Fields, right-click chọn
Insert Group Trên hộp thoại Insert Group, chọn thuộc tính dùng để gom nhóm (trong
trường hợp này là gom nhóm theo tên phòng ban ).
Khi ta Insert một Group vào Report, Group Header và Group Footer sẽ
được thêm vào Thiết kế lại report với cấu trúc như sau:
Lương Trần Hy Hiến Email: [email protected]
Crystal Report vs 2005 – SQL Server 19/19
Kết quả:
2.3/ Hiển thị report từ nguồn dữ liệu lấy bằng lệnh SQL � Bước 1: Thiết kế report với nguồn dữ liệu thiết kế bằng tay (kết nối tạo
bằng Wizard – tức phải thực hiện kết nối). � Bước 2: Xây dựng form để hiển thị Report (trong đó có đối tượng
crystalReportViewer1) � Bước 3: Thực hiện kết nối file report đã thiết kế lên form hiển thị report
//Lấy dữ liệu SqlConnection con = new SqlConnection(“Server=.\\SQLEXPRESS; Database=QuanLyNhanVien; User Id = sa; Password = sa;”); con.Open(); SqlCommand cmd = new SqlCommand(“Chuỗi lệnh SQL”, con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); con.Close(); ReportDocument rd = new ReportDocument(); rd.Load(ten_file_report); rd.SetDataSource(ds); crystalReportViewer1.ReportSource = rd; Khai báo thư viện cho ReportDocument: using CrystalDecisions.CrystalReports.Engine;
----o0o---