Với những ứng dụng thươngmại, chẳng hạn một ứng dụng bán hàng trực tuyến, việc cung cấp một giao diện ngườidùng mạnh có thể tạo nên sự khác biệt giữa một công ty với các đối thủ cạnh tra
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Website: itf.ud.edu.vn, E-mail: cntt@ud.edu.vn
LUẬN VĂN TỐT NGHIỆP KỸ SƯ
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI :
NGHIÊN CỨU CÔNG NGHỆ WPF
(WINDOWS PRESENTATION FOUNDATION) XÂY DỰNG CHƯƠNG TRÌNH QUẢN LÝ HỌC SINH TRƯỜNG TIỂU HỌC THỊ TRẤN CHỢ CHÙA
Mã số :06T4-058
06T4-018 Ngày bảo vệ: 15-16/06/2011
SINH VIÊN : NGUYỄN MINH CHÍ
Trang 2Bách Khoa, sự giúp đỡ động viên của gia đình và bạn bè.
Trước tiên em xin chân thành cảm ơn tất cả các thầy cô của trường Đại học Bách Khoa, Đại học Đà Nẵng đã dạy dỗ và truyền đạt kiến thức cho
em trong thời gian học tại trường.
Em xin chân thành cám ơn thầy Phan Thanh Tao Cám ơn thầy đã tận tình hướng dẫn góp ý cho em trong quá trình thực hiện đồ án này Nhờ đó
mà em có thể hoàn thành theo đúng yêu cầu về nội dung của một đồ án tốt nghiệp.
Em cũng xin được cám ơn những người bạn cùng ngành đã động viên giúp đỡ em trong suốt thời gian làm đồ án.
Cuối cùng, con xin cảm ơn gia đình đã tạo mọi điều kiện tốt nhất để bản thân có thể hoàn thành được đồ án đúng hạn.
Mặc dù đã cố gắng hết sức, nhưng vì khả năng và thời gian có hạn, đề tài nghiên cứu chắc chắn còn nhiều khiếm khuyết Rất mong các Thầy Cô giáo chỉ bảo giúp đỡ Rất mong sự góp ý của bạn bè, đồng nghiệp.
Sinh viên Nguyễn Minh Chí
Truơng Văn Khánh
LỜI CAM ĐOAN
Tôi xin cam đoan:
1 Những nội dung trong báo cáo này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy GV.Phan Thanh Tao.
Trang 33 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,
tôi xin chịu hoàn toàn trách nhiệm.
Sinh viên Nguyễn Minh Chí Trương Văn Khánh
NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
………
………
………
………
………
………
………
………
………
………
………
………
Trang 4………
………
………
………
………
………
………
………
………
………
………
………
………
Đà Nẵng ngày….tháng….năm 2011 Cán bộ hướng dẫn GV Phan Thanh Tao NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN ………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 5………
………
………
………
………
Cán bộ phản biện
Trang 6
MỤC LỤC MỞ ĐẦU 1
I Giới thiệu bối cảnh đề tài 1
-II Ý nghĩa thực tiễn và mục đích đề tài 2
-III Nhiệm vụ phải thực hiện 2
-III.1 Mục tiêu nghiên cứu 2
-III.2 Kết quả dự kiến 2
-III.3 Tóm tắt phương pháp triển khai 3
-III.4 Bố cục sẽ trình bày 3
CƠ SỞ LÝ THUYẾT 5
I Tổng quan về WPF(Windows presentaion foundation) 5
-I.1 Giới thiệu về WPF 5
-I.2 Mục tiêu của WPF 5
-I.3 XAML 5
-I.4 Công nghệ chung cho Windows và cho trình duyệt web 8
-I.5 Các thành phần Mã số của WPF 9
-I.6 Công cụ phát triển WPF 16
-I.7 Ứng đụng đầu tiên với WPF 17
-II LINQ 20
-II.1 Tổng quan về LINQ Mã số 20
-II.2 LINQ căn bản 21
-II.3 LinQ to Sql 26
-III Cơ sở dữ liệu SQL Server 35
-III.1 Giới thiệu về SQL Server 35
-III.2 Lịch sử phát triển 36
-III.3 Các editions của SQl server 37
-III.4 Các thành phần của SQL server 37
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 41
I Giới thiệu bài toán 41
-II Các yêu cầu 42
-II.1 Giới thiệu 42
-II.2 Yêu cầu đặt ra 42
-II.3 Các thông tin cần quản lý 43
-III Phân tích yêu cầu 44
-III.1 Dữ liệu nhập vào 44
-III.2 Dữ liệu xuất 45
-III.3 Phân tích yêu cầu 45
-IV Phân tích hệ thống thông tin 47
-IV.1 Sơ đồ Use Case 47
-IV.2 Sơ đồ lớp của chương trình 53
-IV.3 Phân tích các chức năng trong chương trình 55
PHÁT TRIỂN VÀ ỨNG DỤNG 69
Trang 7-II Một số kết quả đạt được 69
-II.1 Giao diện đăng nhập 69
-II.2 Giao diện chính chương trình 70
-II.3 Các Form chính của chương trình 70
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 75
I Kết luận 75
-I.1 Kết quả đạt được 75
-I.2 Hạn chế 76
-II Hướng phát triển 76
Trang 8-MỤC LỤC CÁC BẢNG
Bảng 1.:Các thành phần trên Form đăng nhập 57
Bảng 2:Các thành phần trong Form nhập thông tin 60
Bảng 3: Các thành phần trong Form xóa 62
Bảng 4:Các thành phần trong Form tìm kiếm 65
Bảng 5:Các thành phần trong Form báo cáo thống kê 68
Trang 9-MỤC LỤC HÌNH ẢNH
Hình 1.Tương tác giữa nhà thiết kế và lập trình viên thông qua XAML 7
Hình 2.Các thành phần cơ bản của WPF 9
Hình 3.Quan hệ giữa đối tượng dữ liệu và đối tượng phụ thuộc 15
Hình 4 Giao diện của công cụ Microsoft Expression Design 17
Hình 5 Tạo một project HelloWorld 18
Hình 6 Giao diện thiết kế ứng dụng 18
Hình 7 Xử lý sự kiện Click 19
Hình 8 Mô hình cơ sở dữ liệu LinQ to Sql 27
Hình 9 Mô hình quản lý của trường tiểu học Thị Trấn Chợ Chùa 42
Hình 10 Sơ đồ use case của Giáo Vụ trường 47
Hình 11 Biểu đồ use case quản lí hồ sơ học sinh 48
Hình 12.Biểu đồ use case quản lí hồ sơ giáo viên 48
Hình 13 Biểu đồ use case quản lí điểm học sinh 49
Hình 14 Biểu đò use case thống kê 49
Hình 15 Biều đồ use case hệ thống 50
Hình 16 Sơ đồ lớp hồ sơ Giáo Viên 53
Hình 17 Sơ đồ lớp hồ sơ Học Sinh 54
Hình 18 Sơ đồ lớp điểm 55
Hình 19.Sơ đồ hoạt động chức năng đăng nhập 56
Hình 20 Sơ đồ tuần tự chức năng đăng nhập 56
Hình 21 Giao diện trang đăng nhập 57
Hình 22 Sơ đồ hoạt động chức năng nhập thông tin và điểm 58
Hình 23 Sơ đồ tuần tự chức năng nhập thông tin và điểm 58
Hình 24 Giao diện Nhập thông tin học sinh 59
Hình 25 Giao diện Nhập điểm học sinh 59
Hình 26 Sơ đồ hoạt động chức năng Xóa 61
Hình 27 Sơ đồ tuần tự chức năng Xóa 61
Hình 28 Giao diện xóa thông tin Giáo viên 62
Hình 29 Sơ đồ hoạt động chức năng tim kiếm 63
Hình 30 Sơ đồ tuần tự chức năng tìm kiếm 64
Hình 31 Giao diện tìm kiếm học sinh 64
Hình 32.Giao diện tìm kiếm điểm học tập 65
Hình 33 Form hiển thị nội dung tìm kiếm được 66
Hình 34 Sơ đồ hoạt động chức năng thống kê 67
Hình 35 Sơ đồ tuần tự chức năng thống kê 67
Hình 36 Giao diện yêu cầu thống kê,báo cáo 68
Hình 37 Danh sách học sinh hiển thị sau khi thống kê 68
Hình 39 Giao diện đăng nhập 69
Hình 40 Giao diện chính chương trình 70
Hình 41.Thông tin hồ sơ giáo viên 70
Hình 42 Form nhập điểm cho học sinh 71
Hình 43 Form báo cáo kết quả học tập của học sinh 71
Hình 44 Form tìm kiếm điểm hóc tập của học sinh 72
Hình 45 Form thực hiện chức năng phân lớp cho học sinh 72
Hình 46 Form danh mục năm học 73
Hình 47.Form danh mục lớp 73
Hình 48 Form danh mục các môn học 74
Hình 49 Giao diện cửa sổ đổi mật khẩu 74
Trang 11MỞ ĐẦU
.I Giới thiệu bối cảnh đề tài
Trong những năm gần đây với sự phát triển vượt trội của Công Nghệ Thông Tin,những ứng dụng của Công Nghệ Thông Tin vào khắp các lĩnh vực đời sống đã đónggóp to lớn cho sự phát triển của nhân loại về nhiều mặt Việc đưa tin học vào cáctrường học, nhà máy, công ty, các đơn vị tổ chức, doanh nghiệp và thậm chí đếntừng gia đình thay cho việc quản lý bằng tay đã tiết kiệm được thời gian, công sức vàtiền của đem lại hiệu quả cao giúp phát triển xã hội vững mạnh hơn, giàu đẹp hơn.Đặc biệt là việc phổ cập tin học trong nhà trường đang dần được triển khai đã giúpgiới trẻ ngày nay không còn lạ lẫm với những con người, đất nước trên thế giới nữa.Tin học đã thật sự đưa đất nước ta đến gần với các nước tiên tiến trên thế giới
Song, những ứng dụng của tin học không chỉ dừng ở lại đó mà nó dần được nângcao hơn nữa, nhằm đáp ứng nhu cầu sử dụng tin học ngày càng cao của con người.Ngày nay, trong các ứng dụng hiện đại, giao diện người dùng trực quan chiếm vị tríhết sức quan trọng Việc trình diễn đúng thông tin, theo đúng cách và vào đúng thờiđiểm có thể đem lại những giá trị kinh tế xã hội đáng kể Với những ứng dụng thươngmại, chẳng hạn một ứng dụng bán hàng trực tuyến, việc cung cấp một giao diện ngườidùng mạnh có thể tạo nên sự khác biệt giữa một công ty với các đối thủ cạnh tranh,góp phần làm tăng tăng doanh số và giá trị thương hiệu của hãng này so với hãngkhác Để có được một giao diện người dùng như vậy, việc tích hợp đồ họa, media,văn bản và các thành phần trực quan khác như một thể thống nhất đóng đóng vai tròmấu chốt
Cũng ví lí do đó mà chúng em đã chọn đề tài ”Nghiên cứu công nghệ WPF( Windows Presentation Foundation) - Xây dựng chương trình quản lý học sinhtrường tiểu học Thị Trấn Chợ Chùa ”
Trang 12.II Ý nghĩa thực tiễn và mục đích đề tài
Việc quản lý lí lịch, điểm học tập học sinh và giáo viên đều dựa vào sổ sách nênviệc tra cứu, tìm kiếm rất mất thời gian và dễ xảy ra sai sót Mỗi giáo viên phải tự lưutrữ và quản lý điểm học tập của học sinh lớp mình quản lý Đến cuối học kỳ và nămhọc, giáo viên phải tổng kết điểm và đánh giá học lực của học sinh dựa vào số liệuđiểm của cả học kỳ/năm học trong sổ sách
Yêu cầu đề ra với chương trình là phải quản lý được lí lịch, điểm của học sinh và
hồ sơ giáo viên để có thể tra cứu, tổng kết kết quả học tập của học sinh một cáchchính xác và nhanh nhất Giáo viên có thể tự cập nhật, tra cứu, thống kê điểm học tậpcủa học sinh
.III Nhiệm vụ phải thực hiện
.III.1 Mục tiêu nghiên cứu
Mục tiêu và hướng nghiên cứu đề tài
Nghiên cứu và nắm vững công nghệ WPF của NET framword 3.5 sp1 ,và LinQ
To SQL
Nghiên cứu thông tin liên quan đến giáo dục cập tiểu học
Xây dựng chương trình quản lý trường tiểu học Thị Trấn Chợ Chùa
.III.2 Kết quả dự kiến
* Về mặt lý thuyết:
- Nắm vững cơ bản về công nghệ WPF( Windows Presentation Foundation) , vàcông nghệ LinQ to SQL Cách xây dựng phần mềm ứng dụng thực tiễn
- Có kinh nghệm hợp tác và làm việc theo nhóm
- Có khả năng tìm kiếm tốt trên mạng
Trang 13- Quản lí hồ sơ học sinh.
- Quản lí điểm, kết quả học tập
.III.3 Tóm tắt phương pháp triển khai
Thu thập thông tin liên quan đến việc giáo dục cấp tiểu học hiên nay
Nghiên cứu công nghệ WPF (Window Present Foundation) và xây dựng ứng dụngthực tế
Nghiên cứu về LinQ để áp đụng mô hình kết nối cơ sở dữ liệu LinQ To SQL Tìm hiểu lý thuyết về quy trình phân tích thiết kế 1 hệ thống thông tin quản lý để
tứ đó xây dựng giải pháp cho bài toán”Xây dựng chương trình quản lí học sinh tiểuhọc”
Công cụ nghiên cứu cơ sở lý thuyết: các tài liệu tham khỏa về phân tích hệ thốngthông tin quản lý, sách tham khỏa về ngôn ngữ lập trình C #
Công cụ thiết kế và xây dựng hệ thống: Microsoft Visual Studio.NET 2008 ,Microsoft SQL Server 2000, Microsoft Expression Blend
.III.4 Bố cục sẽ trình bày
Chương 1 (Giới thiệu): Giới thiệu bối cảnh của đề tài Chọn tên đề tài, mục đích
và ý nghĩa của đề tài Nhiệm vụ phải thực hiện (các mục tiêu nghiên cứu cụ thể và kếtquả dự kiến) Tóm tắt phương pháp triển khai, tóm tắt nội dung, bố cục sẽ trình bày
Chương 2 (Cơ sở lý thuyết): Trình bày tổng quan về công nghệ WPF, những
điểm mạnh của việc ứng dụng WPF để xây dựng ứng dụng , trình bày về phương thứckết nối cơ sở dữ liệu LinQ To SQL
Chương 3 (Phân tích và thiết kế hệ thống): Giới thiệu bài toán, các yêu cầu
chức năng, phương pháp giải quyết, trình bày kết quả phân tích và thiết kế bài toángồm: phân tích chức năng như sơ đồ UseCase, sơ đồ tuần tự, thiết kế như sơ đồ lớp,giao diện,…
Chương 4 (Phát triển ứng dụng): Giới thiệu môi trường, công cụ và công nghệ
được áp dụng; và trình bày một số kết quả đạt được
Trang 14Chương 5 (Kết luận và hướng phát triển): Trình bày, đánh giá kết quả đạt được
và chưa đạt được của chương trình, hướng bổ sung và mở rộng đề tài
Trang 15CƠ SỞ LÝ THUYẾT
foundation)
.I.1 Giới thiệu về WPF
WPF, viết tắt của Windows Presentation Foundation, là hệ thống API mới hỗ trợviệc xây dựng giao diện đồ họa trên nên Windows Được xem như thế hệ kế tiếp củaWinForms, WPF tăng cường khả năng lập trình giao diện của lập trình viên bằng cáchcung cấp các API cho phép tận dụng những lợi thế về đa phương tiện hiện đại Là một
bộ phận của NET Framework 3.5, WPF sẵn có trong Windows Vista và WindowsServer 2008 Đồng thời, WPF cũng có thể hoạt động trên nền Windows XP Pack 2hoặc mới hơn, và cả trên Windows Server 2003
.I.2 Mục tiêu của WPF
WPF được xây dựng nhằm vào 3 mục tiêu cơ bản:
- Cung cấp một nền tảng thống nhất để xây dựng giao diện người dùng
- Cho phép người lập trình và người thiết kế giao diện làm việc cùng nhau mộtcách dễ dàng
- Cung cấp một công nghệ chung để xây dựng giao diện người dùng trên cảWindows và trình duyệt Web
.I.3 XAML
XAML là gì
XAML, viết tắt của Extensible Application Markup Language, là ngôn ngữđặc tả dựa trên XML được dùng để định nghĩa các đối tượng và thuộc tính của chúng,mối quan hệ cũng như sự tương tác XAML đặc biệt được dùng trong các công nghệcủa NET Framework 3.0 (trong đó có WPF) như ngôn ngữ đặc tả giao diện người
Trang 16dùng (user interface - UI) nhằm mô tả cấu trúc và đặc tính của các phần tử UI, sự liênkết dữ liệu, các sự kiện và các đặc tính khác XAML là mô hình có tính đột phá tronglĩnh vực tính toán trên Internet được chấp nhận rộng rãi trong nhiều hệ thống và bởinhiều nhà cung cấp phần mềm
XAML định ra một tập các phần tử XML như Button, TextBox, Label…,nhằm định nghĩa các đối tượng đồ họa tương ứng như nút bấm, hộp thoại, nhãn…, vànhờ đó cho phép mô tả chính xác diện mạo của giao diện người dùng Các phần tửXAML cũng chứa các thuộc tính, cho phép thiết lập nhiều tính chất khác nhau của đốitượng đồ họa tương ứng Ví dụ, đoạn mã sau sẽ tạo ra một nút bấm màu đỏ có nhan
đề “Bỏ qua”
<Button Background="Red">No</Button>
Mỗi phần tử XAML lại tương ứng với một lớp WPF, và mỗi thuộc tính củaphần tử đó lại tương ứng với thuộc tính hay sự kiện của lớp này Chẳng hạn, nút bấmmàu đỏ trong ví dụ trên có thể tạo bằng C# code như sau:
Button btn = new Button();
btn.Background = Brushes.Red;
btn.Content = "No";
Nếu như mọi thứ có thể biểu diễn bằng XAML thì cũng có thể biểu diễn bằngđoạn mã, thì câu hỏi đặt ra là XAML có ý nghĩa gì? Câu trả lời là việc xây dựng cáccông cụ sinh và sử dụng các đặc tả bằng XML dễ dàng hơn nhiều so với xây dựngmột công cụ tương tự làm việc với đoạn mã Bởi vậy, XAML mở ra một cách thức tốthơn để lập trình viên và người thiết kế làm việc với nhau
Trang 17Hình 1.Tương tác giữa nhà thiết kế và lập trình viên thông qua XAML
Vai trò của XAML trong việc tạo môi trường làm việc chung giữa người lập trình và người thiết kế giao diện
XAML đóng vai trò một ngôn ngữ chung giữa môi trường thiết kế giao diện
và môi trường lập trình Đối với người thiết kế, XAML không những cho phép ngườithiết kế dễ dàng mô tả, chỉnh sửa các đối tượng UI và các đặc tính của chúng, mà còncho phép họ tương tác với các đối tượng này ở mức độ nhất định Do vậy, tăng khảnăng cảm quan của người thiết kế đối với giao diện Ngoài ra, nó cũng giúp ngườithiết kế hạn chế những ý tưởng đồ họa không khả thi khi lập trình Đối với người lậptrình, nhờ một môi trường lập trình có khả năng tự động tái tạo giao diện đã thiết kếdựa trên file đặc tả bằng XAML do người thiết kế chuyển sang, người lập trình khôngcần tự mình tái tạo lại giao diện Điều này giảm đi nhiều công sức và thời gian đểphát triển giao diện, cũng như tránh những sai lệch giữa giao diện do người thiết kế
và giao diện do người lập trình tái tạo Vì cả môi trường thiết kế và lập trình đều cókhả năng hiểu và sử dụng XAML, ứng dụng WPF có thể chuyển qua lại giữa hai môitrường phát triển để sửa đổi hay bổ sung giao diện một cách dễ dàng Với tất cảnhững lợi điểm này, vị thế của người thiết kế trong việc xây dựng giao diện đượcnâng cao
Trang 18.I.4 Công nghệ chung cho Windows và cho trình duyệt web
Trong thời đại bùng nổ của Internet, các ứng dụng Web ngày một phát triển Việctrang bị giao diện người dùng với đầy đủ tính năng như một ứng dụng desktop sẽ thuhút nhiều người sử dụng;, và do đó góp phần làm tăng giá trị doanh nghiệp Tuynhiên, như đã nêu trong phần đầu, với những công nghệ truyền thống, để phát triểnmột giao diện đồ họa vừa hoạt động trên desktop vừa trên trình duyệt Web, đòi hỏiphải sử dụng những công nghệ hoàn toàn khác nhau, giống như việc xây dựng haigiao diện hoàn toàn độc lập Điều này tạo ra chi phí không cần thiết để phát triển giaodiện
WPF là một giải pháp cho vấn đề này Lập trình viên có thể tạo ra một ứng dụng
trình duyệt XAML (XBAP) sử dụng WPF chạy trên Internet Explore Trên thực tế,
cùng đoạn code này có thể được dùng để sinh ứng dụng WPF chạy độc lập trênWindows
Phần giao diện của ứng dụng dạng XBAP được trình duyệt chia thành các framethay vì chạy trên các cửa sổ riêng, ngoài ra, các chức năng đều được bảo toàn Cùngmột đoạn mã được sử dụng chung cho cả hai trường hợp sẽ làm giảm khối lượng côngviệc cần thiết để phát triển hai dạng giao diện Thêm vào đó, sử dụng cùng một đoạn
mã cũng có nghĩa là sử dụng cùng kỹ năng của lập trình viên Do đó, lập trình viênchỉ cần có học một kiến thức chung là có thể sử dụng trong cả hai trường hợp Mộtlợi điểm nữa của việc dùng chung công nghệ cho cả giao diện Windows và giao diệnWeb là người xây dựng ứng dụng không nhất thiết phải quyết định trước loại giaodiện nào được sử dụng Miễn là máy client đáp ứng được những yêu cầu hệ thống đểchạy XBAP, một ứng dụng có thể cung cấp cả giao diện Windows và giao diện Web,
mà chỉ sử dụng phần lớn những đoạn mã giống nhau
Mỗi ứng dụng XBAP được download khi cần từ một Web server, nên nó phảituân theo những yêu cầu về an ninh khắt khe hơn đối với một ứng dụng Windows độclập Theo đó, XBAP chạy trong phạm vi sandbox an ninh do hệ thống an ninh truynhập mã của NET Framework cung cấp XBAP chỉ chạy với các hệ thống Windows
có cài đặt WPF và chỉ với Internet Explore phiên bản 6 và 7 trở lên
Trang 19.I.5 Các thành phần của WPF
Giống như các thành phần khác của NET Framework, WPF tổ chức các chứcnăng theo một nhóm namespace cùng trực thuộc namespace System.Windows Bất kểchức năng nào được sử dụng, cấu trúc cơ bản của mọi ứng dụng WPF đều gần nhưnhau Là ứng dụng Windows độc lập hay là một XBAP, một ứng dụng WPF điển hìnhbao giờ cũng gồm một tập các trang XAML và phần code tương ứng được viết bằngC# hoặc Visual Basic, còn gọi là các file code-behind Tất cả các ứng dụng đều kếthừa từ lớp chuẩn Application của WPF Lớp này cung cấp những dịch vụ chung chomọi ứng dụng, chẳng hạn như các biến lưu trữ trạng thái của ứng dụng, các phươngthức chuẩn để kích hoạt hay kết thúc ứng dụng
Mặc dù WPF cung cấp một nền tảng thống nhất để tạo giao diện người dùng,những công nghệ mà WPF chứa đựng có thể phân chia thành những thành phần độclập Nhân của WPF là cơ chế tạo sinh đồ họa dựa trên vector và độc lập với độ phângiải nhằm tận dụng những lợi thế của phần cứng đồ họa hiện đại WPF được mở rộngvới các tập tính năng phát triển ứng dụng bao gồm XAML, các control, cơ chế mócnối dữ liệu, layout, đồ họa 2 chiều, ba chiều, hoạt họa, style, khuôn dạng mẫu, vănbản, media, text và in ấn WPF nằm trong NET Framework, nên ngoài ra, ứng dụngWPF có thể kết hợp các thành phần khác có trong thư viện lớp của NET Framework
Hình 2.Các thành phần cơ bản của WPF.
Trang 20Phần tiếp theo sẽ giới thiệu sơ lược những thành phần và khái niệm quan trọngcủa WPF
LAYOUT và CONTROL
Để sắp đặt các thành phần khác nhau trên giao diện, ứng dụng WPF sử dụngpanel Mỗi panel có thể chứa các thành phần con, bao gồm các control như nút bấmhay hộp thoại, hay bản thân những panel khác Những loại panel khác nhau cho phépsắp xếp thành phần con theo những cách khác nhau Ví dụ, DockPanel cho phép cácthành phần con có thể được đặt dọc theo cạnh của panel đó, trong khi Grid cho phépsắp đặt các thành phần con của nó trên một lưới tọa độ
Giống như bất kỳ một công nghệ giao diện người dùng nào, WPF cung cấpmột số lượng lớn các control Ngoài ra, người dùng có thể tùy ý định nghĩa cáccontrol theo ý mình Các control chuẩn gồm Button, Label, TextBox, ListBox, Menu,Slider, hay phức tạp hơn có SpellCheck, PasswordBox… Các sự kiện do người dùngtạo ra, như di chuyển chuột hay ấn phím, có thể được các control nắm bắt và xử lý.Trong khi các control và các thành phần giao diện khác có thể được đặc tả đầy đủbằng XAML, các sự kiện bắt buộc phải được xử lý bằng mã trình
STYLE và TEMPLATE
Giống như sử dụng Cascading Style Sheets (CSS) đối với HTML, việc định rathuộc tính đồ họa cho các đối tượng giao diện một lần, rồi sau đó áp dụng lại cho cácđối tượng khác cùng loại thường rất tiện lợi WPF cũng cung cấp tính năng tương tựbằng việc sử dụng thành phần Style của XAML Ví dụ, kiểu ButtonStyle có thể đượcđịnh nghĩa như sau:
<Style x:Key="ButtonStyle">
<Setter Property="Control.Background" Value="Red"/>
<Setter Property="Control.FontSize" Value="16"/>
</Style>
Bất kỳ nút bấm nào sử dụng kiểu này sẽ có nền màu đỏ và sử dụng font chữ kíchthước 16
Trang 21tự như một style, và ở hai dạng:
- Template cho dữ liệu: sử dụng thành phần DataTemplate của XAML để thiếtlập một nhóm thuộc tính hiển thị của dữ liệu như màu sắc, phương thức căn lề
- Template cho control: sử dụng thành phần ControlTemplate của XAML đểđịnh ra diện mạo của một control
TEXT
Giao diện người dùng ít nhiều đều hiển thị chữ hay text Đối với phần lớn mọingười, đọc text trên màn hình thường khó hơn đọc trên giấy in Đó là do chất lượnghiển thị text trên màn hình kém hơn so với khi in ra giấy WPF tập trung giải quyếtvấn đề này, làm chất lượng text hiển thị trên màn hình tương đương trên giấy in Cụthể, WPF hỗ trợ các font chữ OpenType chuẩn, cho phép sử dụng các thư viện font đã
có WPF cũng hỗ trợ công nghệ font chữ mới ClearType, cho phép hiển thị các ký tựmịn hơn đối với mắt người, đặc biệt là trên màn hình tinh thể lỏng (LCD)
Để nâng cao hơn nữa chất lượng hiển thị text, WPF cho phép một số công nghệkhác như chữ ghép, theo đó một nhóm ký tự được thay thế bằng một ảnh đơn nhất,tạo tâm lý thoải mái hơn khi đọc đối với người dùng
Văn bản
WPF hỗ trợ ba dạng văn bản: văn bản cố định (fixed), văn bản thích nghi(flow/adaptive) và văn bản XPS (XML Paper Specification) Kèm theo đó, WPF cũngcung cấp các dịch vụ để tạo, xem, quản lý, ghi chú, đóng gói và in ấn văn bản
Văn bản cố định trông không đổi bất kể chúng được hiển thị trên màn hình hay
in ra máy in Trong WPF, những văn bản dạng này được định nghĩa bằng phần tửFixedDocument trong XAML và được hiển thị bằng control DocumentViewer
Trang 22Trong khi đó, văn bản thích nghi thường chỉ dùng để đọc trên màn hình, và cókhả năng tự động thay đổi các thuộc tính hiển thị ảnh và text cho phù hợp với kíchthước cửa số hay các yếu tố môi trường khác nhằm nâng cao chất lượng đọc chongười dùng Văn bản thích nghi được định nghĩa bằng phần tử FlowDocument Đểhiển thị văn bản thích nghi, WPF sử dụng một số control khác nhau, chẳng hạn nhưFlowDocumentPageViewer, FlowDocumentScrollViewer, FlowDocumentReader… Văn bản XPS xây dựng trên cơ sở văn bản bất động của WPF XPS là một địnhdạng mở theo đặc tả XML, có khả năng sử dụng trên nhiều nền tảng khác nhau, đượcthiết kế nhằm tạo thuận lợi cho việc xây dựng, chia sẻ, in ấn và lưu trữ văn bản Cũngnhư văn bản cố định, văn bản XPS được hiển thị bằng DocumentViewer
Hình ảnh
Trong WPF, hình ảnh được hiển thị nhờ control Image, ví dụ:
<Image Width="200"
Source="C:\Documents and Settings\All Users\Documents\My Pictures\Ava.jpg" />
Control Image có thể hiển thị hình ảnh lưu trữ dưới nhiều khuôn dạng khácnhau, bao gồm JPEG, BMP, TIFF, GIF và PNG Nó cũng có thể hiển thị hình ảnhdạng Windows Media Photo mới được sử dụng trong Windows Vista Bất kể ở khuôndạng nào, WPF sử dụng Windows Imaging Component (WIC) để tạo ra hình ảnh.Cùng với các codec dùng cho các khuôn dạng ảnh kể trên, WIC cũng cung cấp mộtnền tảng chung để bổ sung codec khác
Video và âm thanh
Khi tốc độ của các bộ xử lý và truyền thông mạng ngày một nâng cao, video trởthành một phần tương tác lớn của người dùng với phần mềm Người dùng cũng sửdụng nhiều thời gian để nghe nhạc và các dạng âm thanh khác trên máy tính Do đó,WPF cung cấp tính năng hỗ trợ cả hai dạng media này thông qua phần tửMediaElement Control này có thể chơi các định dạng video WMV, MPEG và AVI,
và nhiều định dạng âm thanh khác nhau Việc lập trình để chạy một đoạn video trởnên khá đơn giản, như trong ví dụ sau:
<MediaElement
Trang 23Source="C:\Documents and Settings\All Users\Documents\
My Videos\Ruby.wmv" />
Đồ họa hai chiều
Trong 20 năm gần đây, việc tạo ra đồ họa hai chiều trên Windows dựa trênGraphics Device Interface (GDI) và phiên bản sau của nó GDI+ Các ứng dụngWindows Forms phải sử dụng chức năng này thông qua một namespace khác hoàntoàn, bởi bản thân Windows Forms không tích hợp đồ họa 2 chiều Đối với đồ họa 3chiều thì càng tồi hơn, Windows Forms phải dựa trên công nghệ hoàn toàn biệt lập làDirect3D Với WPF, vấn đề trở nên đơn giản hơn nhiều Cả đồ họa 2 chiều và 3 chiềuđều có thể được tạo ra trực tiếp trong XAML hoặc trong code sử dụng thư viện WPFtương ứng
Đối với đồ họa 2 chiều, WPF định ra nhóm control của các khuôn hình (shapes)
mà ứng dụng có thể sử dụng để tạo nên hình ảnh, gồm:
* Line: vẽ đường thẳng qua 2 điểm
* Elllipse: vẽ ellipse
* Rectangle: vẽ chữ nhật
* Polygon: vẽ đa giác
* Polyline: vẽ đa giác mở
* Path: vẽ hình theo một đường bất kỳ
Mỗi khuôn hình đều có các thuộc tính phong phú cho phép hiển thị với nhiềutính chất khác nhau: màu nền, màu biên… Một đặc điểm quan trọng trong WPF là: vìmọi thứ đều được xây dựng trên một nền chung, việc kết hợp các đặc tính và đốitượng khác nhau, chẳng hạn, lồng một ảnh vào một hình chữ nhật, trở nên đơn giản.Điểm thú vị nữa là các đối tượng hình học này còn có thể thu nhận các sự kiện từphía người dùng như một control, chẳng hạn sự kiện nhắp chuột
Ngoài ra, WPF cũng cung cấp một nhóm chức năng hình học khác, gọi làgeometries, để làm việc với đồ họa hai chiều, như LineGeometry, RectangleGeometry,EllipseGeometry, và PathGeometry Dạng hình học này có nhiều thuộc tính và chứcnăng tương tự như các khuôn hình đã nêu trên Điểm khác biệt quan trọng nhất là cácgeometries không được dùng để hiển thị, chúng được dùng chủ yếu để tính toán hìnhhọc, ví dụ như để định ra các vùng miền, theo dõi vị trí bấm chuột
Trang 24Thêm vào đó, WPF cung cấp lớp Transform cho phép thực hiện các biến đổi hình họcnhư xoay, dịch chuyển, co giãn đối tượng đồ họa; hoặc cho phép thực hiện các hiệuứng hoạt họa theo thời gian thông qua các lớp Animation và Timing.
Đồ họa ba chiều
WPF hỗ trợ đồ họa 3 chiều bằng việc gói các lời gọi API của Direct3D, và dovậy, việc sử dụng chúng trở nên thống nhất và đơn giản hơn đáng kể Để hiển thị đồhọa ba chiều, ứng dụng WPF sử dụng control Viewport3D Để tạo ra các cảnh bachiều, lập trình viên mô tả một hay nhiều mô hình, sau đó, phân định cách thức các
mô hình này được chiếu sáng hay hiển thị Như thường lệ, điều này được thực hiệnbằng XAML, bằng code hay trộn cả hai Để mô tả mô hình, WPF cung cấp lớpGeometryModel3D để tạo ra hình dạng của mô hình Khi mô hình đã được định hình,diện mạo bên ngoài của nó có thể được điều khiển bằng việc phủ lên các vật liệu(material) Chẳng hạn, lớp SpecularMaterial cho phép tạo bóng trên bề mặt mô hình Bất kể được làm từ vật liệu gì, một mô hình có thể được chiếu sáng theo nhiềucách Lớp DirectionalLight cho phép ánh sáng tới từ một hướng xác định, trong khilớp AmbientLight tạo ra ánh sáng đồng đều trên mọi vật trong cảnh Cuối cùng, để
định ra cách nhìn cảnh, lập trình viên phải định ra một camera Ví dụ,
PerspectiveCamera cho phép phân định khoảng cách từ vị trí nhìn tới vật thể và kiểunhìn phối cảnh (tuân theo luật gần xa)
Xây dựng cảnh ba chiều trực tiếp bằng XAML hay mã trình đều không đơngiản Do đó, chỉ nên dùng ứng dụng WPF để hiển thị cảnh ba chiều, việc xây dựngcảnh nên được thực hiện bằng những công cụ đồ họa chuyên biệt
Móc nối dữ liệu
Phần lớn các ứng dụng được tạo ra đều cung cấp cho người dùng phương tiện đểxem và sửa đổi dữ liệu Trong các ứng dụng WPF, việc lưu trữ và truy xuất dữ liệu đãđược thực hiện bởi các công nghệ như Microsoft SQL Server và ADO.NET Sau khi
dữ liệu được truy xuất và tải vào các đối tượng quản lý dữ liệu trên ứng dụng, phầnviệc khó khăn của ứng dụng WPF mới bắt đầu Về cơ bản, có hai công việc phải thựchiện:
Trang 251 1) Sao chép dữ liệu từ các đối tượng quản lý dữ liệu vào các control trên giaodiện, qua đó, dữ liệu có thể được hiển thị hay sửa đổi
2 2) Đảm bảo rằng những thay đổi trên dữ liệu từ các control được cập nhật trởlại các đối tượng quản lý dữ liệu
Để đơn giản hóa quá trình phát triển ứng dụng, WPF cung cấp một cơ chế mócnối dữ liệu để thực hiện tự động những bước này Phần nhân của cơ chế móc nối dữliệu là lớp Binding mà nhiệm vụ của nó là liên kết control trên giao diện (đích) vớiđối tượng quản lý dữ liệu (nguồn) Mối quan hệ này được minh họa trong hình 4 dướiđây:
Hình 3.Quan hệ giữa đối tượng dữ liệu và đối tượng phụ thuộc.
Việc hỗ trợ móc nối dữ liệu được xây dựng ngay từ nhân của WPF Tất cả cácđối tượng đồ họa trong WPF đều kế thừa từ DependencyObject, chúng là các đốitượng phụ thuộc Chức năng mà lớp cơ sở này hỗ trợ cho phép thực hiện hiệu ứnghoạt họa, tạo kiểu mẫu (styling) và móc nối dữ liệu Các đối tượng này đều mang mộtthuộc tính đặc biệt gọi là DependencyProperty, thuộc tính phụ thuộc Phần lớn cácthuộc tính hay dùng như Text, Content, Width, Height, vân vân đều là các thuộc tínhphụ thuộc Tất cả các thuộc tính phụ thuộc đều có thể tạo hiệu ứng hoạt họa, tạo kiểu
Trang 26.I.6 Công cụ phát triển WPF
WPF cung cấp rất nhiều tính năng cho những lập trình viên Tuy nhiên, một côngnghệ dù có hữu dụng đến đâu cũng cần một công cụ và môi trường tốt để phát huynhững lợi điểm của nó Đối với WPF, Microsoft cung cấp một công cụ chuyên dùngcho lập trình viên, và một công cụ khác phục vụ người thiết kế giao diện Phần dướiđây đề cập ngắn gọn về những công cụ này
Microsoft Visual Studio-Công cụ cho lập trình viên
Visual Studio là công cụ chủ đạo của Microsoft dành cho lập trình viên phầnmềm Microsoft cung cấp thành phần mở rộng cho Visual Studio 2005 cho phép lậptrình viên có thể tạo ra các ứng dụng WPF Phiên bản tiếp theo của Visual Studio(2008) có bổ sung thêm các tính năng phát triển ứng dụng WPF, trong đó bao gồmVisual Designer, môi trường thiết kế giao diện cho WPF Sử dụng công cụ này, lậptrình viên có thể tạo ra giao diện WPF một cách trực quan, trong khi sản sinh các đặc
tả XAML tương ứng một cách tự động
Microsoft Expression Design – Công cụ cho người thiết kế
Mục tiêu cơ bản của WPF là nâng cao vị thế của người thiết kế trong việc tạogiao diện người dùng Để đạt mục tiêu này, ngoài XAML là công nghệ cốt lõi,Microsoft cũng đưa ra một công cụ mới cho phép người thiết kế làm việc thuận tiện
hơn, đó là Microsoft Expression Design(Hình 5)
Hình 4 Giao diện của công cụ Microsoft Expression Design.
Microsoft Expression Design cung cấp những tính năng truyền thống của mộtcông cụ thiết kế, cho phép người dùng làm việc theo cách quen thuộc Ngoài ra, công
Trang 27cụ này đặc biệt tập trung vào việc hỗ trợ tạo giao diện cho các ứng dụng WPF Tất cảcác tính năng WPF mô tả ở trên đều sẵn có trong môi trường thiết kế này, và cho phépngười dùng thiết kế một cách trực quan Kết quả thiết kế được biểu diễn dưới dạngfile XAML do công cụ này sinh ra, và sau đó có thể được nhập vào môi trường VisualStudio
.I.7 Ứng đụng đầu tiên với WPF
Phần này giúp các bạn làm quen với lập trình WPF thông qua một ví dụ kinhđiển: Hello World Ứng dụng chỉ bao gồm một nút bấm có nhãn ban đầu là HelloWorld Khi nhắp chuột vào nút, nút sẽ đổi tên thành “From Hanoi, Vietnam” Môitrường lập trình ở đây là bộ Visual Studio 2008 với NET Framework 3.5
Quy trình thực hiện như sau:
Tạo ứng dụng WPF
Ví dụ 1
Trang 28Hình 5 Tạo một project HelloWorld
Ở đây, ta chú ý chọn Net Framework 3.5 sp1
Hình 6 Giao diện thiết kế ứng dụng
Tạo ứng dụng Hello world bằng XAML
WPF hỗ trợ trên nền tảng XAML nên ta có thể tạo đối tượng hoàn toàn bằngngôn ngữ XAML Lưu ý, với cùng project trên, muốn viết đặc tả bằng XAML tươngđương ta cần xóa bỏ phần mã trình C# cũ đi, vì C# và XAML không thể cùng sinh
Trang 29một đối tượng Cách thực hiện: Mở file Window1.xaml tương ứng với file codeWindow1.xaml.cs ở trên Thêm đoạn mã đặc tả XAML tương đương sau:
< Window x:Class="HelloWorld.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
< Button Name="button" Margin="10">
Để tạo phương thức xử lý sự kiện Click cho button Code tự sinh ra như sau:
private void button_Click( object sender, RoutedEventArgs e)
{
}
Trong phương thức này, ta thêm vào dòng lệnh:
button.Content = "From Hanoi, Vietnam" ;
Nhấn F5 để biên dịch project và chạy kết quả
Trang 30
Trên cơ sở đó, xây dựng phần mền “ quản lý học sinh trường tiểu học Thị Trấn Chợ
Chùa”
.II LINQ
.II.1 Tổng quan về LINQ
Khi nền tảng Microsoft.NET cùng với những ngôn ngữ hỗ trợ nó như C# và
VB đã trưởng thành, người ta bắt đầu nhận thấy rằng một trong những lĩnh vực rắcrối nhất mà các nhà phát triển vẫn phải đối mặt là truy xuất dữ liệu từ các nguồn khácnhau Đặc biệt là việc truy xuất và xử lý database và XML thường cồng kềnh và phứctạp trong những tình huống tốt nhất, và trở nên nguồn phát sinh các vấn đề trong cáckịch bản xấu nhất
Các vấn đề với database nhiều vô kể Trước tiên phải kể đến việc chúng takhông thể tương tác bằng lập trình với cơ sở dữ liệu ở cấp độ tự nhiên (native) củangôn ngữ Điều này có nghĩa là các lỗi cú pháp thường không được phát hiện cho đếnkhi thực thi Các field trong database bị tham chiếu không đúng cũng không đượcphát hiện Đây có thể là một tai họa, đặc biệt khi nó xảy ra ngay trong lúc thực thi cácđoạn code quản lý lỗi Không gì đau đầu hơn là toàn bộ cơ chế quản lý lỗi sụp đổ chỉ
vì một một đoạn code sai cú pháp chưa bao giờ được kiểm tra Đôi khi điều này làkhông thể tránh khỏi vì những hành vi lỗi không thể dự đoán được Các đoạn codedatabase không được kiểm tra vào thời điểm biên dịch chắc chắn sẽ dẫn tới nhữngvấn đề này
Vấn đề thứ hai là rắc rối gây ra bởi những kiểu dữ liệu khác nhau được sử dụng trongmột miền dữ liệu cụ thể nào đó Chẳng hạn như các kiểu dữ liệu của database vàXML với các kiểu tự nhiên của ngôn ngữ dùng để viết chương trình Đặc biệt là ngày
và thời gian có thể là cả một thách đố
Trang 31XML parsing, duyệt và xử lý là một công việc nhàm chán Thông thường, một mẩu
dữ liệu XML nhỏ là tất cả những gì bạn mong muốn, nhưng theo W3C DOM XMLAPI, một XMLDocument phải được tạo ra chỉ để thực hiện vài thao tác trên mẩuXML đó
Thay vì chỉ thêm vào các lớp và phương thức để giải quyết những thiếu sót trên mộtcách chắp vá Nhóm phát triển tại Microsoft đã quyết định tiến một bước xa hơn bằngviệc trừu tượng hóa nền tảng truy vấn dữ liệu khỏi những miền dữ liệu cụ thể này.Kết quả chính là LINQ LINQ là công nghệ của Microsoft để cung cấp một cơ chế hỗtrợ ở cấp độ ngôn ngữ cho việc truy vấn dữ liệu thuộc mọi kiểu Những kiểu này baogồm các mảng và tập hợp trong bộ nhớ, các văn bản XML và hơn nữa
.II.2 LINQ căn bản
LINQ chủ yếu là về truy vấn dữ liệu, dù đó là những câu truy vấn trả về mộttập hợp các đối tượng, một đối tượng, hay một tập con các field từ một đối tượng haytập hợp các đối tượng Trong LINQ, tập các đối tượng trả về này được gọi làsequence Hầu hết các LINQ sequence có kiểu IEnumerable<T>, trong đó T là kiểu
dữ liệu của đối tượng được chứa trong sequence Ví dụ, nếu bạn có 1 sequence các sốnguyên, chúng sẽ được lưu trong 1 biến thuộc kiểu IEnumerable<int> Rất nhiềuphương thức LINQ có kiểu trả về là IEnumerable<T>
Các thành phần của LinQ
Vì LINQ là một công nghệ rất mạnh và tiếm năng, bạn sẽ được thấy nhiều hệthống và sản phẩm trở nên tương thích với LINQ Hầu như bất cứ kho dữ liệu nàocũng là một ứng viên tốt cho việc hỗ trợ LINQ, bao gồm database, Microsoft ActiveDirectory, registry, hệ thống file… và chắc chắn danh sách này sẽ còn dài hơn nữa
· LINQ to Object: cho phép truy vấn các mảng và tập hợp trên bộ nhớ
· LINQ to XML: trước đây được gọi là XLinq, đơn giản hóa việc thao tác với XML
· LINQ to Dataset: truy xuất Dataset với các câu truy vấn LINQ
· LINQ to SQL: trước đây được gọi là DLinq, cung cấp một cách mới để truy xuấtdatabase
Trang 32· LINQ to Entity: là một LINQ API khác để giao tiếp với cơ sở dữ liệu So với LINQ
to SQL, LINQ to Entity mang nhiều tham vọng hơn, mạnh mẽ hơn nhưng cũng phứctạp hơn Hiện tại, LINQ to Entity chưa hoàn thiện như LINQ to SQL
Những hỗ trợ của C# 3.0 cho LINQ
Để LINQ tích hợp chặt chẽ với C#, những cải tiến quan trọng đã được thêmvào trong ngôn ngữ Có thể nói những thay đổi chính trong C# 3.0 là để phục vụLINQ Sau đây là vài tính năng mới được bổ sung:
(param1, param2, …paramN) => expr
Khi việc tính toán phức tạp hơn, ta có thể sử dụng một khối câu lệnh:
(param1, param2, …paramN) =>
Trang 33Từ khóa var, cách khởi tạo đối tượng và tập hợp mới, các kiểu nặc danh (anonymoustypes):
Ta hãy khảo sát câu lệnh sau:
var mySpouse = new { FirstName = "Vickey", LastName = "Rattz" };
Trong ví dụ trên, một biến có tên là mySpouse được khai báo với từ khóa var Nóđược gán 1 giá trị thuộc một kiểu nặc danh sử dụng tính năng khởi tạo đối tượng mớicủa C# 3.0
Nói một cách ngắn gọn, từ khóa var cho phép kiểu dữ liệu của một đối tượngđược suy ra dựa trên các kiểu dữ liệu được dùng để khởi tạo nó Kiểu nặc danh chophép các kiểu dữ liệu mới được tạo ra nhanh gọn Đúng với cái tên “nặc danh”, cáckiểu dữ liệu này đều không có tên Và kiểu nặc danh không thể được tạo ra nếu nhưkhông biết các biến thành viên của nó Điều này được giải quyết với tính năng khởitạo đối tượng mới
Từ dòng code trên, trình biên dịch sẽ tạo một kiểu nặc danh mới chứa haithành viên public kiểu string Thành viên thứ nhất tên là FirstName và thành viên thứhai tên là LastName
Các phương thức mở rộng (extension method):
Một phương thức mở rộng là một phương thức static thuộc 1 lớp static màbạn có thể gọi như thể nó là 1 phương thức instance của 1 lớp khác Ví dụ, bạn có thểtạo một phương thức mở rộng tên là ToDouble là một phương thức static trong mộtlớp static nào đó, rồi gọi nó trên một đối tượng thuộc kiểu string
Làm thế nào để khai báo một phương thức là extension method? Rất đơn giản,các phương thức có từ khóa this đặt tại tham số thứ nhất sẽ tự động trở thànhextension method Ví dụ, nếu tham số thứ nhất của một phương thức có kiểu là string
và được khai báo với từ khóa this, nó sẽ trở thành phương thức mở rộng của kiểustring và có thể được gọi trên bất kì đối tượng string nào
public static double ToDouble(this string s) {
Trang 34Cách dễ nhất để tiếp cận LINQ là xem xét cách nó làm việc với các đối tượngtrong bộ nhớ Đây là LINQ to Objects – dạng đơn giản nhất của LINQ Nói một cách
cơ bản nhất, LINQ to Objects cho phép thay thế logic lặp (như một khối lệnh foreach)với một biểu thức LINQ mang tính khai báo Để ví dụ, hãy hình dung bạn muốn lấy
về danh sách các nhân viên có LastName bắt đầu bằng chữ ‘D’ Sử dụng code C#, bạn
có thể lặp qua toàn bộ tập hợp Employee, và thêm các nhân viên đạt điều kiện vàomột tập hợp thứ hai:
// Lấy về danh sách nhân viên đầy đủ
List<EmployeeDetails> employees = db.GetEmployees();
// Tìm những nhân viên có tên bắt đầu bằng chữ ‘D’.
List<EmployeeDetails> matches = new List<EmployeeDetails>();
foreach (EmployeeDetails employee in employees)
List<EmployeeDetails> employees = db.GetEmployees();
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
where employee.LastName.StartsWith("D")
select employee;
Câu truy vấn LINQ sử dụng một tập các từ khóa mới, bao gồm from, in, where
và select Nó trả về một tập hợp mới chỉ chứa các kết quả phù hợp Kết quả cuối cùngcủa cả hai đoạn code trên là như nhau
Lưu ý: các từ khóa LINQ thực sự là một phần của ngôn ngữ C#, điều này giúpphân biệt LINQ với các công nghệ khác như EmbeddedSQL, vốn buộc người dùngphải chuyển đổi giữa cú pháp C với cú pháp SQL trong một đoạn code
Biểu thức LINQ như ở trên có những nét tương đồng với một câu truy vấnSQL, dù thứ tự của các mệnh đề đã được sắp xếp lại Nói chung, tất cả các biểu thức
Trang 35LINQ phải có một mệnh đề from chỉ ra nguồn dữ liệu và một mệnh đề select chỉ ra dữliệu cần được lấy về Mệnh đề from được đặt trước tiên:
matches = from employee in employees
;
Mệnh đề này xác định hai thông tin: từ đứng ngay sau từ khóa in xác địnhnguồn dữ liệu – trong trường hợp này là một tập hợp tên là emloyees Từ theo sau từkhóa from gán một tên giả (alias) cho từng phần tử trong tập hợp nguồn Tên giả này
có thể được sử dụng lại trong các phần sau của biểu thức, chẳng hạn như trong cácmệnh đề where và select Ngôn ngữ C# có nhiều toán tử LINQ khác không được đềcập chi tiết trong bài viết này
Dù ví dụ đơn giản trên có vẻ không có gì đặc biệt, nó có những thay đổi quantrọng so với các phương pháp tiếp cận truyền thống Đáng chú ý nhất là câu truy vấnnày được tích hợp trong ngôn ngữ, nghĩa là bạn sẽ có sự hỗ trợ ở cấp độ ngôn ngữ,bao gồm việc kiểm tra cú pháp và Intellisense Bạn sẽ cảm nhận được điều này rõràng hơn với LINQ to SQL, không còn những ngày mà bạn phải lo lắng với việc viếtmột câu truy vấn SQL trong một chuỗi để rồi không phát hiện được những lỗi cú phápcho đến khi thực thi Hoặc bạn mệt mỏi vì không thể nhớ được tên cột nào đó trongtable? Nay thì Intellisense đã làm tất cả những chuyện đó!
LinQ hoạt động như thế nào
Các bước sử dụng LINQ:
· Để sử dụng LINQ, bạn tạo một biểu thức LINQ
· Giá trị trả về từ một biểu thức LINQ là một đối tượng iterator hiện thựcIEnumerable<T>
· Khi bạn lặp qua đối tượng iterator, LINQ mới thực sự thực hiện công việc Cơ chếnày được gọi là Deferred Execution
Vậy LINQ thực thi các biểu thức như thế nào? Câu trả lời phụ thuộc vào loại
dữ liệu mà bạn truy vấn Ví dụ như LINQ to SQL chuyển các biểu thức LINQ thànhcác lệnh cơ sở dữ liệu, trong khi với LINQ to Objects, mọi chuyện đơn giản hơnnhiều Chẳng hạn như trong ví dụ trên, LINQ thực ra sử dụng một vòng lặp foreach
để quét qua tập hợp, Mặc dù điều này nghe có vẻ không ấn tượng, lợi ích của LINQnằm ở chỗ nó mang đến một cách linh động để định nghĩa các câu truy vấn có thể áp
Trang 36dụng được cho nhiều nguồn dữ liệu khác nhau, bao gồm các tập hợp trên bộ nhớ,XML, Dataset…
.II.3 LinQ to Sql
LINQ to SQL là một phiên bản hiện thực hóa của O/RM (object relationalmapping) có bên trong NET Framework bản “Orcas” (nay là NET 3.5), nó cho phépbạn mô hình hóa một cơ sở dữ liệu dùng các lớp NET Sau đó bạn có thể truy vấn cơ
sở dữ liệu (CSDL) dùng LINQ, cũng như cập nhật/thêm/xóa dữ liệu từ đó
LINQ to SQL hỗ trợ đầy đủ transaction, view và các stored procedure (SP) Nócũng cung cấp một cách dễ dàng để thêm khả năng kiểm tra tính hợp lệ của dữ liệu vàcác quy tắc vào trong mô hình dữ liệu của bạn
Mô hình hóa cơ sở dữ liệu dùng LinQ to Sql
Visual Studio “Orcas” đã tích hợp thêm một trình thiết kế LINQ to SQL nhưmột công cụ dễ dàng cho việc mô hình hóa một cách trực quan các CSDL dùng LINQ
to SQL
Trang 37Ví dụ 2
Hình 8 Mô hình cơ sở dữ liệu LinQ to Sql
Mô hình LINQ to SQL ở trên định nghĩa bốn lớp thực thể: Product, Category,Order và OrderDetail Các thuộc tính của mỗi lớp ánh xạ vào các cột của bảng tươngứng trong CSDL Mỗi instance của một lớp biểu diễn một dòng trong bảng dữ liệu Các mũi tên giữa bốn lớp thực thể trên biểu diễn quan hệ giữa các thực thểkhác nhau, chúng được tạo ra dựa trên các mối quan hệ primary-key/foreign-keytrong CSDL Hướng của mũi tên chỉ ra mối quan hệ là một – một hay một – nhiều.Các thuộc tính tương ứng sẽ được thêm vào các lớp thực thể trong các trường hợpnày Lấy ví dụ, lớp Category ở trên có một mối quan hệ một nhiều với lớp Product,điều này có nghĩa nó sẽ có một thuộc tính “Categories” là một tập hợp các đối tượngProduct trong Category này Lớp Product cũng sẽ có một thuộc tính “Category” chỉđến đối tượng ”Category” chứa Product này bên trong
Bảng các phương thức bên tay phải bên trong trình thiết kế LINQ to SQL ởtrên chứa một danh sách các SP để tương tác với mô hình dữ liệu của chúng ta Trong
ví dụ trên tôi đã thêm một thủ tục có tên “GetProductsByCategory” Nó nhận vào mộtcategoryID và trả về một chuỗi các Product Chúng ta sẽ xem bằng cách nào có thểgọi được thủ tục này trong một đoạn code bên dưới
Trang 38Tìm hiểu lớp DataContext
Khi bạn bấm nút “Save” bên trong màn hình thiết kế LINQ to SQL, VisualStudio sẽ lưu các lớp NET biểu diễn các thực thể và quan hệ bên trong CSDL màchúng ta vừa mô hình hóa Cứ mỗi một file LINQ to SQL chúng ta thêm vào solution,một lớp DataContext sẽ được tạo ra, nó sẽ được dùng khi cần truy vấn hay cập nhậtlại các thay đổi Lớp DataContext được tạo sẽ có các thuộc tính để biểu diễn mốibảng được mô hình hóa từ CSDL, cũng như các phương thức cho mỗi SP mà chúng ta
đã thêm vào
Một khi đã mô hình hóa CSDL dùng trình thiết kế LINQ to SQL, chúng ta cóthể dễ dàng viết các đoạn lệnh để làm việc với nó Dưới đây là một vài ví dụ về cácthao tác chung khi xử lý dữ liệu:
-Lấy product từ cơ sở dữ liệu
Đoạn lệnh dưới đây dùng cú pháp LINQ để lấy về một tập IEnumerable các đối tượngProduct Các sản phẩm được lấy ra phải thuộc phân loại “Beverages”:
-Cập nhật một sản phẩm trong CSDL
Đoạn lệnh dưới đây cho thấy cách lấy một sản phẩm, cập nhật lại giá tiền và lưu lạiCSDL
C#:
Trang 39- Chèn thêm một phân loại mới và hai sản phẩm vào CSDL
Đoạn mã dưới đây biểu diễn cách tạo một phân loại mới, và tạo hai sản phẩm mới vàđưa chúng vào trong phân loại đã tạo Cả ba sau đó sẽ được đưa vào cơ sở dữ liệu.Chú ý rằng tôi không cần phải tự quản lý các mối quan hệ primary key/foreign key,thay vào đó, tôi chỉ đơn giản thêm các đối tượng Product vào tập hợp Products củađối tượng category, và rồi thêm đối tượng category vào tập hợp Categories củaDataContext, LINQ to SQL sẽ biết cách thiết lập các giá trị primary key/foreign keymột cách thích hợp
- Xóa các sản phẩm
Đoạn mã sau sẽ biểu diễn cách xóa tất cả các sản phẩm Toy khỏi CSDL:
C#
Trang 40- Gọi một thủ tục:
Đoạn mã dưới đây biểu diễn cách lấy các thực thể Product mà không dùng cú phápcủa LINQ, mà gọi đến thủ tục “GetProductsByCategory” chúng ta đã thêm vào trướcđây Nhớ rằng một khi đã lấy về kết quả, tôi có thể cập nhật/xóa và sau đó gọidb.SubmitChanges() để cập nhật các thay đổi trở lại CSDL
C#:
- Lấy các sản phẩm và phân trang
Đoạn mã dưới đây biểu diễn cách phân trang trên server như một phần của câu truyvấn LINQ Bằng cách dùng các toán tử Skip() và Take(), chúng ta sẽ chỉ trả về 10dòng từ CSDL – bắt đầu từ dòng 200
C#: