cshape full

247

Click here to load reader

Upload: vu-quang-dinh

Post on 08-Nov-2014

212 views

Category:

Documents


60 download

TRANSCRIPT

Page 1: CShape Full

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]

Page 2: CShape Full

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

Page 3: CShape Full

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

Page 4: CShape Full

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

Page 5: CShape Full

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

Page 6: CShape Full

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

Page 7: CShape Full

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

Page 8: CShape Full

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

Page 9: CShape Full

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

Page 10: CShape Full

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

Page 11: CShape Full

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

Page 12: CShape Full

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

Page 13: CShape Full

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

Page 14: CShape Full

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

Page 15: CShape Full

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

Page 16: CShape Full

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

Page 17: CShape Full

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);

Page 18: CShape Full

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

Page 19: CShape Full

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

Page 20: CShape Full

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

Page 21: CShape Full

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

Page 22: CShape Full

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

Page 23: CShape Full

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);

Page 24: CShape Full

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);

Page 25: CShape Full

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

Page 26: CShape Full

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"} };

Page 27: CShape Full

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;}

}

Page 28: CShape Full

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);

Page 29: CShape Full

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

Page 30: CShape Full

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

Page 31: CShape Full

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

Page 32: CShape Full

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

Page 33: CShape Full

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

Page 34: CShape Full

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

Page 35: CShape Full

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

Page 36: CShape Full

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

Page 37: CShape Full

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

Page 38: CShape Full

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

Page 39: CShape Full

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

Page 40: CShape Full

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

Page 41: CShape Full

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

Page 42: CShape Full

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

Page 43: CShape Full

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

Page 44: CShape Full

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

Page 45: CShape Full

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

Page 46: CShape Full

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

Page 47: CShape Full

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

Page 48: CShape Full

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

Page 49: CShape Full

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

Page 50: CShape Full

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

Page 51: CShape Full

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

Page 52: CShape Full

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

Page 53: CShape Full

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

Page 54: CShape Full

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

Page 55: CShape Full

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

Page 56: CShape Full

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

Page 57: CShape Full

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

Page 58: CShape Full

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

Page 59: CShape Full

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

Page 60: CShape Full

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

Page 61: CShape Full

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

Page 62: CShape Full

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

Page 63: CShape Full

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

Page 64: CShape Full

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

Page 65: CShape Full

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

Page 66: CShape Full

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

Page 67: CShape Full

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

Page 68: CShape Full

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

Page 69: CShape Full

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

Page 70: CShape Full

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

Page 71: CShape Full

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

Page 72: CShape Full

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

Page 73: CShape Full

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

Page 74: CShape Full

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

Page 75: CShape Full

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

Page 76: CShape Full

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

Page 77: CShape Full

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

Page 78: CShape Full

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

Page 79: CShape Full

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

Page 80: CShape Full

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

Page 81: CShape Full

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

Page 82: CShape Full

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

Page 83: CShape Full

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

Page 84: CShape Full

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

Page 85: CShape Full

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

Page 86: CShape Full

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

Page 87: CShape Full

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

Page 88: CShape Full

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

Page 89: CShape Full

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

Page 90: CShape Full

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

Page 91: CShape Full

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

Page 92: CShape Full

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

Page 93: CShape Full

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

Page 94: CShape Full

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

Page 95: CShape Full

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

Page 96: CShape Full

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

Page 97: CShape Full

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

Page 98: CShape Full

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

Page 99: CShape Full

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.

Page 100: CShape Full

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

Page 101: CShape Full

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

Page 102: CShape Full

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

Page 103: CShape Full

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

Page 104: CShape Full

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

Page 105: CShape Full

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

Page 106: CShape Full

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

Page 107: CShape Full

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

Page 108: CShape Full

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

Page 109: CShape Full

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

Page 110: CShape Full

Nội dung� Quản lý file� Move, Copy, Delete file� Đọc/Ghi file

2

Page 111: CShape Full

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.

Page 112: CShape Full

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

Page 113: CShape Full

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);

Page 114: CShape Full

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);

Page 115: CShape Full

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

Page 116: CShape Full

Đọ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.

Page 117: CShape Full

Đọ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

Page 118: CShape Full

Đọ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

Page 119: CShape Full

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();

}

Page 120: CShape Full

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;

}

Page 121: CShape Full

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

Page 122: CShape Full

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

Page 123: CShape Full

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

Page 124: CShape Full

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

Page 125: CShape Full

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

Page 126: CShape Full

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

Page 127: CShape Full

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

Page 128: CShape Full

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

Page 129: CShape Full

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

Page 130: CShape Full

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

Page 131: CShape Full

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

Page 132: CShape Full

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

Page 133: CShape Full

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

Page 134: CShape Full

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

Page 135: CShape Full

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

Page 136: CShape Full

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

Page 137: CShape Full

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

Page 138: CShape Full

Hien Luong Tran-Hy

MDI Application

(Multiple Document Interfaces)

Hien Luong Tran-Hy

[email protected]

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

Page 139: CShape Full

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

Page 140: CShape Full

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

Page 141: CShape Full

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

Page 142: CShape Full

� Đ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

Page 143: CShape Full

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

Page 144: CShape Full

� 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

Page 145: CShape Full

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

Page 146: CShape Full

Đạ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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 ?

Page 147: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 148: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 149: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 150: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 151: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 152: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 153: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 154: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 155: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 156: CShape Full

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

TỔ

NG

QU

AN

LẬ

TỔ

NG

QU

AN

LẬ

Page 157: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

Page 158: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 159: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 160: CShape Full

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

Page 161: CShape Full

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

Page 162: CShape Full

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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>

Page 163: CShape Full

ẢỌ

Ầ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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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))

I GIẢ

NG

HỌ

C P

HẦ

N LẬ

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

Page 164: CShape Full

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

Page 165: CShape Full

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

Page 166: CShape Full

ADO.NETADO.NETLương Trần Hy Hiến

1

Lương Trần Hy Hiến

[email protected]

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

Page 167: CShape Full

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

Page 168: CShape Full

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

Page 169: CShape Full

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

Page 170: CShape Full

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

Page 171: CShape Full

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

Page 172: CShape Full

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

Page 173: CShape Full

.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;

Page 174: CShape Full

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;

Page 175: CShape Full

.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();

Page 176: CShape Full

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();

}

Page 177: CShape Full

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.

Page 178: CShape Full

.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

Page 179: CShape Full

.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

Page 180: CShape Full

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.

Page 181: CShape Full

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);

Page 182: CShape Full

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();

Page 183: CShape Full

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);

Page 184: CShape Full

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

Page 185: CShape Full

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

Page 186: CShape Full

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

Page 187: CShape Full

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

Page 188: CShape Full

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

Page 189: CShape Full

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 đó.

Page 190: CShape Full

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

Page 191: CShape Full

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 = "" ;

Page 192: CShape Full

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";

Page 193: CShape Full

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 = "" ; }

Page 194: CShape Full

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 đó.

Page 195: CShape Full

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

Page 196: CShape Full

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

Page 197: CShape Full

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.

Page 198: CShape Full

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

Page 199: CShape Full

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

Page 200: CShape Full

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.

Page 201: CShape Full

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ả

Page 202: CShape Full

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

Page 203: CShape Full

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

Page 204: CShape Full

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

Page 205: CShape Full

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; } }

Page 206: CShape Full

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 ...

Page 207: CShape Full

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:

Page 208: CShape Full

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:

Page 209: CShape Full

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---

Page 210: CShape Full

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

[email protected]

2

DHSP dhsp DHSP 280 An Dương Vương

[email protected]

3 Sv01 Sv01 Sinh Viên 153/2 Hoàng Văn Thụ

[email protected]

- 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

Page 211: CShape Full

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 ệ:

Page 212: CShape Full

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.

Page 213: CShape Full

Bài tập thực hành project 02

Lương Trần Hy Hiến 4/9

Page 214: CShape Full

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ả

Page 215: CShape Full

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?”

Page 216: CShape Full

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.

Page 217: CShape Full

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

Page 218: CShape Full

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

Page 219: CShape Full

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 "

Page 220: CShape Full

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 .

Page 221: CShape Full

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ố)

Page 222: CShape Full

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!

Page 223: CShape Full

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…

Page 224: CShape Full

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.

Page 225: CShape Full

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

Page 226: CShape Full

4 GV: Lương Trần Hy Hiến

Bước 3: Click , sau đó chọn file backup. Sau đó bấm .

Page 227: CShape Full

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 .

Page 228: CShape Full

6 GV: Lương Trần Hy Hiến

Bước 6: Click để hoàn tất quá trình Restore.

Page 229: CShape Full

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

Page 230: CShape Full

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

Page 231: CShape Full

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

Page 232: CShape Full

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

Page 233: CShape Full

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.

Page 234: CShape Full

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

Page 235: CShape Full

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:

Page 236: CShape Full

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.

Page 237: CShape Full

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

Page 238: CShape Full

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

Page 239: CShape Full

Lương Trần Hy Hiến Email: [email protected]

Crystal Report vs 2005 – SQL Server 11/19

Page 240: CShape Full

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.

Page 241: CShape Full

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.

Page 242: CShape Full

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ả.

Page 243: CShape Full

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

Page 244: CShape Full

Lương Trần Hy Hiến Email: [email protected]

Crystal Report vs 2005 – SQL Server 16/19

Page 245: CShape Full

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:

Page 246: CShape Full

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:

Page 247: CShape Full

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---