Nội dung học

207
Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 1 Nội dung học • Tổng quan về .Net FrameWork • Sử dụng IDE • Giới thiệu NNLT C# • ASP.NET • LINQ: LINQ TO SQL • Xây dựng ứng dụng Web

description

Nội dung học. Tổng quan về .Net FrameWork Sử dụng IDE Giới thiệu NNLT C# ASP.NET LINQ: LINQ TO SQL Xây dựng ứng dụng Web. CHƯƠNG I. Tổng quan về .NET FrameWork. Giới thiệu. - PowerPoint PPT Presentation

Transcript of Nội dung học

Page 1: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 1

Nội dung học

• Tổng quan về .Net FrameWork

• Sử dụng IDE

• Giới thiệu NNLT C#

• ASP.NET

• LINQ: LINQ TO SQL

• Xây dựng ứng dụng Web

Page 2: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 2

CHƯƠNG I

Page 3: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 3

Giới thiệu

• .NET Framework là môi trường tích hợp để đơn giản hóa việc phát triển và thực thi các ứng dụng trên Internet, desktop và các thiết bị di động .

• Các mục tiêu chính:• Cung cấp một môi trường hướng đối tượng nhất quán

cho nhiều loại ứng dụng• Cung cấp một môi trường giảm tối thiểu sự xung đột

phiên bản.• Cung cấp một môi trường linh động, dựa trên các

chuẩn đã được chứng nhận để có thể chứa trên bất cứ hệ điều hành nào.

Page 4: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 4

Kiến trúc của .NET Framework

Page 5: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 5

Kiến trúc của .NET Framework

•CLR (Common Language Runtime): Quản lý sự thực thi mã lệnh và tất cả các tác vụ liên quan đến nó: biên dịch, quản lý bộ nhớ, bảo mật, quản lý tuyến đoạn.Mã lệnh thực thi trong CLR chia làm 2 loại:- mã được quản lý - mã không được quản lý là mã lệnh không cài đặt những yêu cầu để thực thi trong CLR – chẳng hạn như COM hoặc các thành phần dựa trên Windows API.

Page 6: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 6

Kiến trúc của .NET Framework

•FCL(Framework Class Library ) là thư viện kiểu dữ liệu có thể tái sử dụng (gồm các class, structure, …) dành cho các ứng dụng thực thi trong .NET.

•Tất cả các ngôn ngữ hỗ trợ .NET Framework đều sử dụng thư viện lớp dùng chung này.

Page 7: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 7

Các bước thực hiện của Ct truyền thống

SourceCode

Compiler

ExecutableCode

Code Executed

RUNTI

ME

Page 8: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 8

Các bước thực hiện của Ct truyền thống

• Các ngôn ngữ trước đây có chương trình dịch riêng và có môi trường chạy riêng của nó.

• Trong .NET, chương trình dịch dịch mã nguồn vào một "Intermediate Language (IL)“ và runtime được thay thế bởi CLR (Common Language Runtime).

Page 9: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 9

Các bước thực hiện của các ct .NET

1st Compliation

2nd Compliation

.NETSourceCode

LanguageCompiler

MSIL+

MetadataCLR

Machinecode

Codeexecuted

Các chương trình .NET được dịch 2 lần: lần đầu chậm, lần thứ 2 tương đối nhanh hơn.

Page 10: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 10

Các bước thực hiện của các ct .NET

• Chương trình nguồn trước hết sẽ được biên dịch và đóng gói thành một khối gọi là assembly (là tập hợp các thành phần được đóng gói trong file exe hoặc dll). Khối này sẽ chứa các mã lệnh ngôn ngữ trung gian (IL) và các metadata mô tả thông tin cần thiết cho sự hoạt động của khối.

• Mỗi khi có yêu cầu thực thi assembly nói trên, CLR sẽ dùng trình biên dịch JIT (Just-in-Time) của môi trường thực thi để chuyển đối IL chứa trong nó sang dạng mã lệnh cụ thể của máy khi ứng dụng thực sự thực thi.

Page 11: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 11

Các bước thực hiện của các ct .NET

Page 12: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 12

Các kiểu dữ liệu cơ sở của CTS

Page 13: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 13

Chương 2

Gi i thi u Visual Studio.NETớ ệGi i thi u Visual Studio.NETớ ệ

Page 14: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 14

Sử dụng IDE Microsoft Visual Studio 2008Khởi động Microsoft Visual Studio 2008. File New

Project để tạo mới một project

Page 15: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 15

Chia sẻ IDE

• VS.NET cung cấp IDE cho tất cả các ngôn

ngữ của nó.

• Giúp cho người lập trình xây dựng 1

chương trình nhanh chóng và hiệu quả

• Khi VS.NET khởi động, thì trang Start

Page được hiển thị.

Page 16: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 16

Chia sẻ IDE [3]

Page 17: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 17

Design, Split, Source• Design: chế độ thiết kế giao diện• Source: Hiển thị mã HTML tự động phát sinh khi

thiết kế

Page 18: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 18

Solution Explorer

•Solution Explorer liệt kê các projects và các file đang hoạt động•Để hiển thị Solution Explorer, nhấn Ctrl+Alt+L (View|Solution Explorer )

Page 19: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 19

ToolBox

• Bao gồm các điều khiển trên Web form và Win form, ActiveX controls, XML Web services, các thành phần HTML và các đối tượng.

• Để hiển thị Toolbox, nhấn Ctrl+Alt+X (View|Toolbox).

Page 20: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 20

Server Explorer

• Server Explorer Lập trình trên CSDL mà không cần sử dụng VS.NET IDE.

• Để hiển thị Server Explorer, nhấn Ctrl+Alt+S (View|Server Explorer)

Page 21: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 21

Class View

• Class view hiển thị các lớp, phương thức và thuộc tính đã xây dựng.

• Để hiển thị Class View, nhấn Ctrl+Alt+C (View|Class View).

Page 22: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 22

Properties Window

• Properties window để thiết lập các thuộc tính các điều khiển, lớp và projects.

• Để hiển thị Properties Window, nhấn F4.

Page 23: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 23

Kỹ thuật IntelliSense• Thông báo cho người lập trình cú pháp

đúng và cho phép hoàn thành tự động 1 câu lệnh

Page 24: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 24

Sự kiện và đáp ứng sự kiện[1]

Ta có thể tương tác giữa các đối tượng khác nhau bên trong 1ứng dụng, giữa 1 đối tượng và đối tượng bên ngoài thông qua sự kiện và đáp ứng sự kiện.

Page 25: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 25

Sự kiện và đáp ứng sự kiện[2]• Để hiển thị tất các các sự kiện của điều khiển:

– Chọn điều khiển

– Kích vào button Event trên cửa sổ Properties

Page 26: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 26

Ví dụ xử lý sự kiện

Sự kiện

Đáp ứng sự kiện

Người dùng chọn nút

Design: hiển thị bố cục của trangSource: Hiển thị mã tự động phát sinh khi tạo trang Web.

Page 27: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 27

Page 28: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 28

Nội dung

• Giới thiệu

• Biến và các kiểu dữ liệu

• Các cấu trúc điều khiển: if, switch

• Các cấu trúc lặp; for, while, do while,

foreach

• LIST, File văn bản.

Page 29: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 29

GIỚI THIỆU VỀ C#• Là NNLT đơn giản, hiện đại, an toàn và

hướng đối tượng

• Là ngôn ngữ mạnh nhất trong .NET

• Thay thế cho C++

• Có cú pháp giống C++, Java

• Sử dụng con trỏ dễ dàng hơn trong C++

Page 30: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 30

GIỚI THIỆU VỀ C#

- “bài toán” cần giải quyết là một Solution.

- Một solution bao gồm một hoặc nhiều project.

- Một solution, nếu có nhiều project thì nên được tạo ra trong một thư mục riêng để có thể chứa các project trong nó.

Page 31: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 31

Cú pháp đơn giản của 1 Project•Using các Namespace

[Namespace Ten]

{

- Tập hợp các lớp

}

Page 32: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 32

Biến

• Khai báo theo cú pháp:

Mức truy cập Kiểu Tên biến

public

protected

private

int

string

...

Page 33: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 33

Các kiểu số nguyên

0:264-1Số nguyên không dấu 64-bit

System.UInt64 ulong

0:232-1Số nguyên không dấu 32-bit

System.UInt32 uint

0:216-1Số nguyên không dấu 16-bit

System.UInt16 ushort

0:28-1Số nguyên không dấu 8-bitSystem.Byte byte

-263:263-1Số nguyên có dấu 64-bitSystem.Int64 long

-231:231-1Số nguyên có dấu 32-bitSystem.Int32 int

-215:215-1Số nguyên có dấu 16-bit System.Int16 short

-27:27-1Số nguyên có dấu 8-bit System.SByte sbyte

Vùng biểu diễn (min:max)

Mô tảKiểu trong CTS

Tên

Page 34: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 34

Kiểu số thực, Boolean, ký tự

• Kiểu số thực: float, double

• Kiểu Boolean: bool: true|false

• Kiểu ký tự: char– Biểu diễn 1 ký tự 16-bit (Unicode) Các hằng

kiểu ký tự được gán bằng cách đóng trong cặp dấu nháy đơn, ví dụ 'A'.

Page 35: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 35

Kiễu dữ liệu tham chiếu được định nghĩa sẵn

Chuỗi ký tự UnicodeSystem.String string

Kiểu dữ liệu gốc, mọi kiểu dữ liệu khác trong CTS đều kế thừa từ đây (kể cả các kiểu dữ liệu giá trị)

System.Object object

Mô tảKiểu CTSTên

Page 36: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 36

Ví dụ

protected void Page_Load(object sender, EventArgs e)

{

object t;

t = (object) 5;

string[] st = new string[2] { "ab","cd" };

object[] t1;

t1 = st;

Response.Write(t1[1].ToString());

}

Page 37: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 37

Các phương thức trên chuỗiprotected void Page_Load(object sender, EventArgs e) { string st1 = " Nguyen Anh Trung "; string st2 = "le Tien Tang"; st1 = st1.Trim(); Response.Write(string.Format("Chieu dai chuoi la {0}:\n",

st1.Length)); Response.Write(string.Format("Ky tu tai chi so thu 3 la {0}", st1[3])); string ten1 = st1.Substring(st1.LastIndexOf(' ') + 1); string ten2 = st2.Substring(st2.LastIndexOf(" ") + 1, st2.Length - st2.LastIndexOf(" ") - 1); Response.Write (string.Format("Ten2=ten1:{0}",

ten2.Equals(ten1))); Response.Write(string.Format("so sanh ten1 voi ten 2: {0}",

ten1.CompareTo(ten2))); }

Page 38: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 38

Các phương thức trên chuỗiprotected void Page_Load(object sender, EventArgs e)

{ string st1 = "Nguyen Anh Trung ";

Response.Write(string.Format( "Tim chuoi con {0}",

st1.Contains("yen")));

st1 = st1.Replace("Nguyen", "Le");

Response.Write(st1);

st1 = st1.Remove(0, 3);

Response.Write(st1);

st1 = "Le nam|tink26|dhkh";

string[] ds = st1.Split('|');

Response.Write(string.Format("ten:{0},lop:{1},truong{2}", ds[0], ds[1], ds[2]));

• }

Page 39: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 39

Các toán tử

checked unchecked Điều khiển Overflow exception

Sizeof(Kiểu)Thông tin về kiểu

new Tạo đối tượng

?: Điều kiện

() Ép kiểu

[] Indexing (cho array và các indexers)

. Truy xuất thành phần

= += -= *= /= %= &= |= ^= <<= >>= Phép gán

== != < > <= >= So sánh

<< >>Dịch bit

++ -- Tăng và giảm

+ Cộng chuỗi

&& || ! Logic

+ - * / % Số học

Ký hiệuLoại toán tử

Page 40: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 40

Luồng điều khiển của chương trình

• Các câu lệnh rẻ nhánh– if– switch

• Các câu lệnh lặp– for– while– do– foreach

Page 41: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 41

Câu lệnh ifint i = 10;

if (i<10)

{

Response.Write("less than 10");

}

else

{

Response.Write("greater or equal to 10");

}

Page 42: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 42

Câu lệnh Switch ...

int i = 2;

switch (i)

{

case 1:

Response.Write("one");

break;

case 2:

Response.Write("two");

break;

default:

Response.Write("another value");

break;}

...

Page 43: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 43

Câu lệnh Forint s = 0;

for (int i=1; i<=10; i++)

{

s+=i;

}

Response.Write(s);

int s = 0;

for (int i=1; i<=10; i++)

{

s+=i;

}

Response.Write(i);

//Error statement

Response.Write(s);

}

Page 44: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 44

Câu lệnh whileint i = 1;

int s = 0;

while (i<=10)

{

s += i;

i++;

}

Response.Write(s);

int i = 1;int s = 0;do{

s += i;i++;

} while (i<=10);Response.Write(s);

Page 45: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 45

Câu lệnh Foreach int[] a = new int[3];

a[0] = 10; a[1] = 20; a[2] = 30; foreach (var b in a){

Response.Write(b);}

Page 46: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 46

ArrayList, LIST

• Là mảng động, mỗi phần tử là một object

• Namespace: System.Collections.Generic

• Khai báo:ArrayList <tenmang> = new ArrayList();

List <Tenmang>=new List()

List<Kiểu> <Tenmang>=new List<Kiểu> ()

Page 47: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 47

Các phương thức trên ArrayList, List

• Add(object): Chèn thêm 1 phần tử vào cuối mảng

• Clear(): Xoá tất cả các phần tử• Contains(object): Tìm object trong mảng• IndexOf(object): Tìm chỉ số của object trong

mảng (-1)• RemoveAt(index): Xoá phần tử thứ index• Thuộc tính: count: cho biết số phần tử trong

mảng• …

Page 48: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 48

Thao tác trên File

• Namespace: System.IO;• Các đối tượng thao tác trên File: Stream,

StreamReader, StreamWriter, FileStream.• Thao tác trên file văn bản: StreamReader,

StreamWriter.• Mở file văn bản để đọc:StreamReader <tênbiến> = new StreamReader(“dd"[,Encoding]);

• Mở file văn bản để ghi:StreamWriter <tênbiến> = new StreamWriter (“dd“[, bool append]

[,Encoding])

Page 49: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 49

Các phương thức trên StreamReader

• Close(): đóng file

• Peek(): Trả về ký tự tiếp theo, -1;:EOF

• Read(): Đọc ký tự tiếp theo

• ReadBlock(…): Đọc dãy các byte

• ReadLine(): Đọc 1 dòng

• ReadToEnd(): Đọc hết file

• …

Page 50: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 50

Các phương thức trên StreamWriter

• Close(): đóng file• Write• WriteLine: ghi file

Ví dụ:StreamWriter f = new StreamWriter("d:\\

tt.txt",true,Encoding.Unicode);

f.WriteLine("cộng");

f.Write("abc");

f.Close();

Page 51: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 51

Ví dụ StreamReader using System;using System.IO;…StreamReader f = new StreamReader("d:\\tt.txt");string ht;while(f.Peek()>=0) { ht = f.ReadLine(); Response.Write(ht); } f.Close();

Page 52: Nội dung học

DataTable- Name space: using System.Data;-Tạo bảng:DataTable bien = new DataTable("tenbang");Tạo cột: bien.Columns.Add(“tencot"); - Tạo thêm dòng:DataRow dong=bien.NewRow();Dong[“tencot”]=gia tridt.Rows.Add(dr);dt.AcceptChanges();- Bien.Rows: trả về tập hợp các dòng- Bien.Coumns: Trả về tập các cột

Page 53: Nội dung học

Ví dụ về DataTable protected void Page_Load(object sender, EventArgs e)

{ DataTable dt = new DataTable("Sach");

// tạo ra 2 cột (field) của bảng Sach

dt.Columns.Add("Masach"); // Tạo ra cột MaSach

dt.Columns.Add("Tensach"); // Tạo ra cột TenSach

DataRow dr = dt.NewRow();//Tạo thêm 1 dòng mới

dr["Masach"] = "s1"; //Nhập dữ liệu cho cột mã sách

dr["TenSach"] = "tin";

dt.Rows.Add(dr); //Thêm dòng vào dt

dr = dt.NewRow(); //Tạo thêm 1 dòng mới

dr["Masach"] = "s2";

dr["TenSach"] = "hoa";

dt.Rows.Add(dr);

dt.AcceptChanges();

for(int i=0;i<dt.Rows.Count;i++)//Duyệt qua các dòng của dt

Response.Write(dt.Rows[i][0].ToString()+":" +

dt.Rows[i][1].ToString());

}

Page 54: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 54

Page 55: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 55

Nội dung

• Lớp đối tượng– Hàm dựng– Hàm huỷ– Trường– Phương thức

Page 56: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 56

Lớp đối tượng Mứctruycập class <Tên lớp>: <lớp cha hoặc các giao diện>

{ - Hàm dựng (Constructors)– Hàm huỷ (Destructors)– Hằng (Constants)– Trường (Fields)– Phương thức (Methods)– Thuộc tính (Properties)– Chỉ mục (Indexers)– Sự kiện (Events)– Con trỏ hàm (Delegates)– Lớp con (Classes)– Giao diện (Interfaces)– Cấu trúc (Structs)

}

Page 57: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 57

Mức truy cập

Biến hoặc phương thức chỉ có thể được truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về

private

Biến hoặc phương thức có thể được truy xuất trong phạm vi assembly hiện tại, hoặc từ các kiểu dữ liệu dẫn xuất từ kiểu dữ liệu chứa nó

protected internal

Biến hoặc phương thức chỉ có thể truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về, hoặc các kiểu dữ liệu dẫn xuất

protected

Biến hoặc phương thức chỉ có thể truy xuất trong phạm vi cùng assembly

internal

Biến hoặc phương thức có thể được truy xuất từ bất cứ nơi nào

public

Mô tảMức truy cập

Page 58: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 58

Ví dụpublic class Class_b{ private class Class_b1 { } public class Class_b2 { } } class Program { public void test() { Class_b t2 = new Class_b(); Class_b.Class_b1 t21 = new Class_b.Class_b1(); Class_b.Class_b2 t22= new Class_b.Class_b2(); } }

Page 59: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 59

Hàm dựng (Constructors)

• Là một loại đặc biệt của phương thức trong một lớp• Được gọi khi một lớp được tạo.• Thường được sử dụng để khởi tạo các giá trị trong

một lớp.• Tên trùng với tên lớp• Không trả về giá trị • Nếu không tạo ra hàm dựng C# sẽ tạo ra hàm dựng

ngầm định• Một lớp có thể có nhiều hàm dựng nhưng khác nhau

về số lượng hoặc kiểu của tham số

Page 60: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 60

Ví d vụ ề Constructors using System;public class Person{public string Ten,dc=“Khong co”;public Person(string Ten){

this.Ten = Ten;}

public Person(string Ten,string dc) { this.Ten = Ten; this.dc = dc; }}

Page 61: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 61

Ví d vụ ề Constructors

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

person p1 = new person("hung");

Response.Write(p1.Ten + p1.dc);

person p2 = new person("Nga","hue");

Response.Write(p2.Ten + p2.dc);

}

}

Page 62: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 62

Destructor

• Destructors trong C# gọi là bộ thu gom rác Garbage Collectors.

• Bộ thu gom rác sẽ giải phóng bộ nhớ khi đối tượng không còn yêu cầu hoặc tham chiếu.

• Destructors khai báo như sau: ~<tên hàm huỷ>()//giống tên lớp

{//các cài đặt của người lập trình

}

Page 63: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 63

Các trường (Fields)

• Lưu trữ giá trị

• Cú pháp: <Mứctruycập> <Kiểu> <tênfields>

• Mức truy cập: public, private, protected, internal, protected internal

• Kiểu: – Kiểu giá trị được định nghĩa sẳn (int,char …)– Kiểu tham chiếu: lớp, struct, mảng, chuỗi,….

Page 64: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 64

Ví dụnamespace Vidu

{

class Class_Lop{ }

class SinhVien

{ public string hoten;

private bool GioiTinh;

protected DateTime NgaySinh;

internal float[] DsDiem = new float[100];

Class_Lop Lop= new Class_Lop();

}

class Program

{

static void Main(string[] args)

{

SinhVien sv =new SinhVien();

sv.hoten = "Nguyen Nam";

//sv.GioiTinh = false;

//sv.NgaySinh =

DateTime.Parse("12/10/79");

sv.DsDiem[0] = 5;

}

}}

Page 65: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 65

Trường tĩnh [1]

• Được khai báo trong 1 lớp

• Khi sử dụng không cần phải tạo ra lớp chứa

trường tĩnh

• Khi khai báo chỉ cần dùng static trước tên

biến

• Truy xuất: <tênlớp>.tên trường tĩnh

Page 66: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 66

Ví dụ trường tĩnhusing System;public class List{

public static int Dem = 0;public List()//Hàm dựng: được gọi khi tạo lớp {

Dem ++;}

}public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {

Response.Write(List.Dem );List n1 = new List();Response.Write (List.Dem);List n2 = new List();Response.Write (List.Dem);

}}

Page 67: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 67

Phương thức(method)

• Là tập hợp các câu lệnh• Được khai báo trong lớp hoặc cấu trúc,

phải chỉ rõ mức truy cập, tên, kiểu trả về,danh sách các tham số. Nếu không có tham số phải có cặp dấu ngoặc

• Phương thức không trả về giá trị có kiểu trả về là void

• Dùng return để trả về giá trị của phương thức

Page 68: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 68

Tham chi u ref and out [1]ếusing System;public class Point{

int x;int y;public Point(int x,int y){

this.x = x;this.y = y;

}public void GetPoint(int x,int y){

x = this.x;y = this.y;

}}

Page 69: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 69

Tham chi u ref and out [2]ếpublic partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

int x = 0; //int x; --> Error

int y = 0; //int y; --> Error

Point p = new Point(100,200);

p.GetPoint(x,y);

Response.Write("({0},{1})",x,y);

}

}

Output:

(0,0)

Page 70: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 70

Tham chi u ref and out [3]ếusing System;public class Point{

int x;int y;public Point(int x,int y){

this.x = x;this.y = y;

}public void GetPoint(ref int x,ref int y){

x = this.x;y = this.y;

}}

Page 71: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 71

Tham chi u ref and out [4]ếpublic partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

int x = 0; // int x; --> Error

int y = 0; // int y; --> Error

Point p = new Point(100,200);

p.GetPoint(ref x,ref y);

Console.WriteLine("({0},{1})",x,y);

}

} Output:

(100,200)- phải khởi tạo giá trị cho các tham số-Khi xây dựng và gọi phương thức phải dùng ref

Page 72: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 72

Tham chi u ref and out [5]ếusing System;public class Point{

int x;int y;public Point(int x,int y){

this.x = x;this.y = y;

}public void GetPoint(out int x,out int y){

x = this.x;y = this.y;

}}

Page 73: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 73

Tham chi u ref and out [6]ếpublic partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

int x;

int y;

Point p = new Point(100,200);

p.GetPoint(out x,out y);

Console.WriteLine("({0},{1})",x,y);

}

}Output:

(100,200)•Không cần khởi tạo giá trị cho các tham số•Khi xây dựng và gọi phương thức phải dùng out

Page 74: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 74

Danh sách các tham số có chiều dài thay đổi [1]

• C# cho phép khai báo 1 tham số nhưng khi

gọi phương thức thì số lượng tham số có thể

thay đổi

• Ví dụ như WriteLine(…)

• Sử dụng từ khoá params để khai báo tham

số có chiều dài thay đổi.

Page 75: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 75

Kế thừa

- C# chỉ hỗ trợ đơn kế thừa, tức là một lớp chỉ có thể kế thừa nhiều nhất là từ một lớp cha- Lớp cơ sở nhất trong C# là lớp System.Object

class LopCon : LopCha

{ Cai dat lop con}

Page 76: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 76

Ví dụ về kế thừa [1]using System;

public class Person{

protected string name; //protected Fieldpublic Person(string name) //Function as a Constructor{

this.name = name;}

}

public class Employee:Person{public Employee(string name):base(name){}

}

Page 77: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 77

Ví dụ về kế thừa [2]public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Person p1 = new Person("Harry Potter");

Respone.Write(p1.name);

}

}

Page 78: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 78

Ví dụ về kế thừa [3]• Person là lớp cơ sở (lớp cha).• Employee là lớp dẫn xuất (lớp con) từ lớp

Person, vì thế:– Nó kế thừa tất cả các dữ liệu và hàm thành

viên của lớp cha (trừ private)– Constructors không tự động kế thừa lên lớp

cha, do đó người sử dụng phải chỉ rõ:public Employee(string name):base(name){…}

Page 79: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 79

Hàm nạp chồng (Overloading )

• Hàm nạp chồng là hàm trùng tên trong một lớp

nhưng khác nhau về số lượng và kiểu của các

tham số

• Không nạp chồng dựa vào tên tham số và kiểu trả

về của các tham số.

Page 80: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 80

Ví dụ [2]class TinhDt

{

public double Dt(double r)

{

return ((double)Math.PI*r*r);

}

public double Dt(double a,double b)

{ return a*b;

}

public double Dt(double a,double b,double c)

{ double p=(a+b+c)/2;

return Math.Sqrt(p*(p-a)*(p-b)*(p-c));

}

Page 81: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 81

Ví dụ [3]

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

TinhDt DienTich=new TinhDt();

Console.WriteLine("Dt HT {0}",DienTich.Dt(3));

Console.WriteLine("Dt HCN {0}",DienTich.Dt(3,4));

Console.WriteLine("Dt HTG{0}",DienTich.Dt(3,4,5));

}

}

Page 82: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 82

Hàm ghi đè (Overriding) [1]

Hàm ghi đè là hàm giống nhau trên cả lớp cha và lớp con.

Để ghi đè một hàm đã có trên lớp cha: Khai báo một hàm mới trong lớp con với tên

giống với lớp cha. Sử dụng từ new.

Page 83: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 83

Hàm ảo (Virtual Functions) [1]

• Cách xây dựng hàm ảo giống như hàm ghi đè nhưng sử dụng từ khoá virtual trong hàm của lớp cha và override trong hàm của lớp con

• Khi gọi hàm, trình biên dịch sẽ nhìn vào lớp thực sự được tạo ra và gọi hàm tương ứng trên lớp này

Page 84: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 84

Giao diện (Interfaces)

• Giao diện giống như lớp trừu tượng

• Chứa các phương thức trừu tượng nhưng không cài đặt.

• Một lớp kế thừa lên 1 giao diện phải cài đặt tất cả các phương thức trên giao diện đó.

• Một lớp chỉ kế thừa lên 1 lớp khác nhưng có thể kế thừa trên nhiều giao diện.

Page 85: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 85

Ví dụ [1]

using System;

interface Music

{

void PlayMusic(string filename);

void EndPlay();

}

Page 86: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 86

Ví dụ [2]public class Winamp:Music { public Winamp() { } public void PlayMusic(string filename) {

… }

public void EndPlay() { … } }

Page 87: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 87

THUỘC TÍNH

• Giới thiệu

• Các loại của thuộc tính

• Thuộc tính và trường

• Thuộc tính và phương thúc

• Thuộc tính tĩnh

Page 88: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 88

Giới thiệu [1]• Thuộc tính trong 1 lớp được sử dụng để lấy

và thay đổi giá trị trong lớp.

• Một thuộc tính thường có 2 khối lệnh:– Get: trả về một giá trị– Set: Gán một giá trị mới– Từ khoá value được sử dụng để xác định giá trị

được gán trong khối set.

• Giống như hàm thuộc tính có thể dùng bổ từ virtual, override, abstract, static

Page 89: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 89

Ví dụ [2]using System;

public class Person{

string name; // Fieldpublic string Name // Property{

get{

return (name);}set{

name = value;}

}}

Page 90: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 90

Ví dụ [3]public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Person p = new Person();

p.Name = "John Smith";

Response.Write("Person name is {0}",p.Name);

}

}

Output:

Person name is John Smith

Page 91: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 91

Các loại thuộc tính

• Read/Write: Thuộc tính có cả get và set.

• Read-Only: Thuộc tính chỉ có get.

• Write-Only: Thuộc tính chỉ có set.

Page 92: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 92

X lý ngo i l (Exception Handling)ử ạ ệ

• Dùng Trying và Catching

• Kiến trúc của ngoại lệ

• Truyền ngoại lệ

• Sử dụng Finally

Page 93: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 93

Ngoại lệ [1]

• Ngoại lệ được phát sinh khi chạy chương trình bị lỗi.

• Ngoại lệ cung cấp đầy đủ thông tin về lỗi xẩy ra.

Page 94: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 94

Kiến trúc phân tầng của ngoại lệ [2]

Exception

IOException

System Exception

OutOfMemoryException

OverflowException

CoreException

NullReferencException

Page 95: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 95

Trying và Catching [1]

• Khối try chứa đoạn chương trình

• Khối catch xử lý lỗi, khi có lỗi xảy ra.

• Dùng 1 khối try nhưng có thể nhiều khối catch

• Không có try và catch chương trình dừng lại (treo) và đưa ra lỗi.

Page 96: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 96

Trying và Catching [2]using System;class Test{

public static void Main(){

int Zero = 0;try{

int j = 22 / Zero;}catch (Exception e){

//Xử lý lỗi}

} Các lệnh sau catch}

Page 97: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 97

Trying và Catching [3]int Zero = 0;try{

int j = 22 / Zero;}catch (DivideByZeroException e){

//Xử lý lỗi1

}catch (Exception e){

////Xử lý lỗi 2

}

Page 98: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 98

Trying và Catching [4]

Kết quả hiển thị:

Loi 1:Attempted to divide by zero.

Sau catch

Page 99: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 99

Truyền ngoại lệ [1]• Trong 1 số trường hợp chúng ta không xử lý

khi lỗi xảy ra, chúng ta cần truyền các lỗi này đến hàm gọi nó

• Có 3 cách để làm điều này:– Không xử lý lỗi – Truyền lỗi đến hàm được gọi– Truyền lỗi cụ thể đến hàm được gọi.

Page 100: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 100

Truyền ngoại lệ[2]• Không xử lý lỗiusing System;public class SumClass{

int sum = 0;int count = 0;int average = 0;public void CalculateAverage(){ try

{average = sum/count;

}catch{}

}}

Page 101: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 101

Truyền ngoại lệ [4]• Bắt lỗi, sau đó truyền lỗi này đến hàm được gọiusing System;public class SumClass{ int sum = 0;

int count = 0;int average = 0;public void CalculateAverage(){ try

{average = sum/count;

}catch (DivideByZeroException e){

throw e;}

}}

Page 102: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 102

Truyền ngoại lệ[6]• Xử lý lỗi, sau đó truyền các lỗi đã xử lý đến hàm được

gọi.using System;public class SumClass{ int sum = 0;

int count = 0;int average = 0;public void CalculateAverage(){ try

{ average = sum/count;}catch (DivideByZeroException e){throw (new DivideByZeroException(“Loi roi:"));}

}}

Page 103: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 103

Sử dụng Finally• Khối Finally chứa đoạn chương trình luôn luôn

thực hiện cho dù có phát sinh lỗi hay không?try

{

//đoạn chương trình

}

catch

{

//Xử lý lỗi

}

finally

{

//đoạn chương trình luôn thực hiện

}

Page 104: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 104

Th c hànhự• Tạo 1 Project với tên ThucHanh• Tạo file ds.txt (Project -> Add New Item -> Text

File -> Name: ds.txt) với nội dung:sv1|Lê thàng nam|5|Tink32

sv2|Đỗ chữ|9|TinK32

sv3|Đỗ văn Nam|10|Tink31

Sv4| Nguyễn Hoàng Nam|2|TinK31

Sv5|Trần dũng|3|HoaK19

Page 105: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 105

Th c hànhự• Tạo lớp CauHinh để kết nối đến file ds.txtusing System.IO ;namespace ThucHanh{ public class CauHinh { public static StreamReader f; public CauHinh(string DD) { f = new StreamReader(DD); } }}

Page 106: Nội dung học

Tạo Lớp SinhVienusing System.Collections.Generic ; namespace ThucHanh{ public class SinhVien { private string masv; public string Masv { get { return masv; } set { masv = value; } } private string hoten; public string Hoten { get { return hoten; } set { hoten = value; } }

private double dtb; public double Dtb { get { return dtb; } set { dtb = value; } }private string tenlop; public string Tenlop { get { return tenlop; } set { hoten = value; } }public SinhVien(string masv, string ht,

double dtb, string tenlop) { this.masv = masv; this.hoten = ht;

this.dtb = dtb; this. tenlop= tenlop } }}

Page 107: Nội dung học

Tạo 1 lớp: LopHoc chứa các sinh viên

using System.Collections.Generic ;using System.Data;namespace ThucHanh{public class LopHoc { public List<SinhVien> LstSinhvien ; public DataTable DtSinhVien ; public LopHoc()//Hàm dựng { LstSinhvien = new List<SinhVien>();//Tạo List DtSinhVien = new DataTable("Sinhvien"); //Tao DataTable DtSinhVien.Columns.Add("Masv");//Tạo các cột của bảng DtSinhVien.Columns.Add("Hoten"); DtSinhVien.Columns.Add("DTB");

DtSinhVien.Columns.Add(“TenLop");

Page 108: Nội dung học

while (true)//Duyệt file ds.txt { string st = CauHinh.f.ReadLine();//Đọc ra 1 dòng if (st == "" || st == null) { CauHinh.f.Close(); break; } string[] tam = st.Split('|');//Tách ra các thông tin SinhVien sv = new SinhVien(tam[0],tam[1],double.Parse(tam[2]), tam[3] ); LstSinhvien.Add(sv);//Nạp dữ liệu vào List DataRow dr = DtSinhVien.NewRow(); //Tạo 1 dòng mới trên bảng dr["masv"] = tam[0]; dr["hoten"] = tam[1]; dr["DTB"] = double.Parse(tam[2]); dr[“tenlop"] = tam[3]; DtSinhVien.Rows.Add(dr); DtSinhVien.AcceptChanges(); } } }}

Page 109: Nội dung học

Lập trình trên sự kiện Page_Load của trang Default.aspx

protected void Page_Load(object sender, EventArgs e) { //Tạo ra đường kết nối đến file tt.txt CauHinh kn = new CauHinh(Server.MapPath("ttt.txt")); LopHoc sv = new LopHoc(); //Hiển thị các sinh viên trên List Response.Write("Danh sach cac sinh vien tren List "); for (int i = 0; i < sv.LstSinhvien.Count; i++) { Response.Write(sv.LstSinhvien[i].Masv +"<br>"); Response.Write(sv.LstSinhvien[i].Hoten + "<br>"); Response.Write(sv.LstSinhvien[i].Dtb.ToString() + "<br>");

}

Page 110: Nội dung học

//Hiển thi các sinh viên trên DataTableResponse.Write("Danh sach cac sinh vien tren DataTable "); for (int i = 0; i < sv.DtSinhVien.Rows.Count; i++) {Response.Write(sv.DtSinhVien.Rows[i]["Masv"].ToString() + "<br>");Response.Write(sv.DtSinhVien.Rows[i]["hoten"].ToString() + "<br>");Response.Write(sv.DtSinhVien.Rows[i]["DTB"].ToString() + "<br>");} }

Page 111: Nội dung học

• Trên lớp: LopHoc viết các phương thức để:– Hiển thị các sinh viên lên lớp– Hiển thị các sinh viên ở lại– Tính TBC của ĐTB của các sinh viên– Tạo file olai.txt để lưu các sinh viên ở lại– Xóa các sinh viên ở lại ra khỏi file ds.txt

Page 112: Nội dung học

Chương 4

LẬP TRÌNH ỨNG DỤNG WEB VỚI ASP.NET

Page 113: Nội dung học

Nội dung

• Kiến trúc của ứng dụng Web

• Công nghệ phát triển ứng dụng Web (động)

• Kiến trúc

• HTML

Page 114: Nội dung học

Web động

• Nội dung được Web Server sinh ra khi có yêu cầu từ Client.

• Nội dung hiển thị tại các lần duyệt khác nhau là khác nhau.

• Rất phổ dụng: Hầu hết các trang web thương mại đều là web động.

• Sử dụng ngôn ngữ lập trình để sinh ra trang HTML.

• Sử dụng CSDL.

Page 115: Nội dung học

Web động

Page 116: Nội dung học

Web động

CSDL

WebServer

WebBrowser

Database Provider

http://www....

Yêu cầu dữ liệu

Thao tác CSDLDữ liệu

Dữ liệu

Nội dung (HTML)

Page 117: Nội dung học

Công nghệ phát triển Web (động)

• Đa dạng và không ngừng được phát triển.

• Microsoft: ASP, ASP.NET

• Sun: Java Servelet, JSP.

• Khác: PHP

Page 118: Nội dung học

ASP.NET - Kiến trúc

ASPX

.ASPX.ASPX

Page 119: Nội dung học

ASP.NET - Kiến trúc

Client (Browser)

ASP.DLLASP.DLL

IISIISVBScriptVBScript

JavaScriptJavaScript

ActiveX Data Objects(ADO)

ActiveX Data Objects(ADO)

DatabaseDatabase ASP file

Page 120: Nội dung học

ASP.NET – Đặc điểm

• Hướng đối tượng: Mỗi trang bao gồm hai đối tượng kế thừa nhau.

• Tách mã giao diện (HTML) với mã xử lý bằng kỹ thuật Codebehind.

• => Dễ viết chương trình, tìm lỗi.• => Giấu được mã (mã được dịch thành DLL).

.aspx .aspx.cs

Page 121: Nội dung học

ASP.NET – Đặc điểm (2)

• Các điều khiển phía Server (server-side controls).

• => Có thể xử lý tất cả trên server.– <form id="Form1" method="post" runat="server">

</form>

– <asp:Button id="Button1" runat="server" Text="Tìm kiếm"></asp:Button>

– <asp:TextBox id="txtUserName" runat="Server"/>

– <input type = “text” id = “hoten” runat=“server”>

Page 122: Nội dung học

ASP.NET – Đặc điểm (3)

• Các điều khiển phía Server (server-side controls). – Auto PostBack cho từng điều khiển => Bắt

sự kiện trên điều khiển đơn giản.• <asp:CheckBox id="CheckBox1" runat="server"

AutoPostBack="True" ></asp:CheckBox>

Page 123: Nội dung học

ASP.NET – Đặc điểm (3)

• Các điều khiển phía Server (server-side controls). –Kiểm tra hợp thức (validation)

• Cần mã– Tùy biến (CustomValidator)

• Không cần mã– Yêu cầu nhập (RequiredFieldValidator)– Trong khoảng (RangeValidator)– So sánh (CompareValidator)– Biểu thức chung (RegularExpressionValidator)

Page 124: Nội dung học

HTML

Khái niệm

HTML (HyperText Markup Language) là ngôn ngữ định dạng văn bản siêu liên kết. Sự định dạng dựa trên các tab hoặc các đoạn mã đặc biệt để đánh dấu một văn bản, một file ảnh ... giúp cho Web Brower thông dịch và hiển thị chúng lên màn hình. HTML có những phần mở rộng rất quan trọng cho phép những liên kết hypertext từ một tài liệu này đến một tài liệu khác.

Page 125: Nội dung học

Cấu trúc cơ bản của một file HTML

<HTML><HEAD><TITLE> <Tiêu đề></TITLE></HEAD><BODY> <Phần thân></BODY></HTML>

Page 126: Nội dung học

Giới thiệu 1 số thẻ HTML

• <B>, <U>, <I>• <Table>, <tr>, <td>• <Img src=“file ảnh”>

• <Marquee>• <A href =“url?ts1=gtri1&ts2=gt2&…&tsn=gtn”>

Tên liên kết </a>• <Form>

Page 127: Nội dung học

Ví dụ: Các thẻ HTML

Page 128: Nội dung học

Các điều khiển phía Server

Label

PROPERTIESID: tên của Label

Text: Tiêu đề <asp:Label ID="Label1" runat="server" Text="Label"> </asp:Label>

Page 129: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 129

PROPERTIES

Events

ID

AutoPostBack

Text

TextMode TextChanged

TextBox

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" ontextchanged="TextBox1_TextChanged"></asp:TextBox>

Page 130: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 130

PROPERTIES

Events

ID

Text

ClickClick

Button

<asp:Button ID="ButDangNHap" runat="server" onclick="ButDangNHap_Click" Text="Dang NHap" />

Page 131: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 131

PROPERTIES

Events

ID

PostBackUrl

ClickClick

LinkButton

<asp:LinkButton ID="LinkTheThao" runat="server" PostBackUrl="Thethao.aspx"> Thể thao</asp:LinkButton>

Text

Page 132: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 132

PROPERTIES

Events

ID

AutoPostBack

SelectedIndexChanged

DropDownList (ListBox)

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" onselectedindexchanged="DropDownList1_SelectedIndexChanged"> </asp:DropDownList>

Text

Page 133: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 133

Nạp dữ liệu DropDownList (ListBox)

• <Tên DropDownList>.DataSource = list hoặc DataTable;• <Tên DropDownList>.DataValueField = “Tên trường";• <Tên DropDownList>.DataTextField = “Tên trường";• <Tên DropDownList> .DataBind();

CauHinh ch=new CauHinh(Server.MapPath(“ds.txt")); LopHoc lh= new LopHoc();DropDownList1.DataSource = lh.DtSinhVien;DropDownList1.DataValueField = "masv";DropDownList1.DataTextField = "hoten";DropDownList1.DataBind();

Page 134: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 134

PROPERTIES

ID

ImageUrl

Image

<asp:Image ID="Image1" runat="server" ImageUrl="~/image_sach/b1.jpg" />

Page 135: Nội dung học

Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 135

PROPERTIES

Methoad

ID SaveAs

FileUpload

<asp:FileUpload ID="FileUpload1" runat="server" />

Page 136: Nội dung học

GridView

<tên GridView>.DataSource =List, DataTable <tên GridView>.DataBind()

CauHinh ch = new CauHinh(Server.MapPath(“ds.txt"));LopHoc lh = new LopHoc();GridView1.DataSource = lh.DtSinhVien;GridView1.DataBind();

Page 137: Nội dung học

DataList

Page 138: Nội dung học
Page 139: Nội dung học

<Tên DataList>.DataSource =list, DataTable;<Tên DataList>.DataBind();

CauHinh ch = new CauHinh(Server.MapPath(“ds.txt"));

LopHoc lh = new LopHoc();DataList1.DataSource = lh.DtSinhVien;DataList1.DataBind();

Page 140: Nội dung học

Ví dụ

Tạo trang HtSinhVien.aspx với giao diện:

Từ ToolBox:

-Tạo 2 Label

-1 DropDownList: với tên DropDownList1, thuộc tính AutoPostBack=true

-1 GridView với tên GridView 1

Page 141: Nội dung học

Lập trình trên sự kiện Page_Load của trang để nạp các tên lớp vào DropDownList

protected void Page_Load(object sender, EventArgs e)

{ if (!IsPostBack)

{ CauHinh ch = new CauHinh(Server.MapPath(“ds.txt"));

LopHoc lh = new LopHoc();

List<SinhVien> lssv = lh.LstSinhvien;

List<SinhVien> tam = new List<SinhVien>();

for (int i = 0; i < lssv.Count; i++)

{ string tenlop = lssv[i].Tenlop;

int j;

for (j = 0; j < i; j++)

if (tenlop.Equals(lssv[j].Tenlop )) break;

if (j == i) tam.Add(lssv[i]);

}

DropDownList1.DataSource = tam;

DropDownList1.DataTextField = "tenlop";

DropDownList1.DataBind();

}

}

Page 142: Nội dung học

Lập trình trên sự kiện SelectedIndexChanged của DropDownList

để tìm sinh viên theo tên lớp protected void DropDownList1_SelectedIndexChanged(object sender,

EventArgs e) { CauHinh ch = new CauHinh(Server.MapPath("ttt.txt")); LopHoc lh = new LopHoc(); List<SinhVien> lssv = lh.LstSinhvien; List<SinhVien> tam = new List<SinhVien>(); string tenlop = DropDownList1.Text ; for (int i = 0; i < lssv.Count; i++) { if (tenlop.Equals(lssv[i].Tenlop)) tam.Add(lssv[i]); } GridView1.DataSource = tam; GridView1.DataBind(); } }

Page 143: Nội dung học

Tạo trang thongke.aspx

Từ ToolBox tạo 1 ListBox để hiển thị tất cả các tên lớp

- Khi chọn 1 tên lớp trên ListBox sẽ hiển thị các sinh viên của lớp này ra Gridview

- Khi chọn nút Danh sách lên lớp sẽ hiển thị danh sách các sinh viên lên lớp (đtb>=5) của lớp chọn ở ListBoxx ra GridView và hiển thị số sinh viên lên lớp

- Tương tự cho nút Danh sách sinhviên ở lại

Page 144: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• CSS thực chất là một tập các qui tắc để format/ định kiểu (style) cho các phần tử được hiển thị và định vị trên trang web. Nhờ vào CSS mà việc định dạng (kiểu) cho các phần tử trở nên dễ dàng và linh hoạt hơn rất nhiều.

Page 145: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• Các định nghĩa về CSS có thể được đặt ngay trong tệp nguồn nhưng cũng có thể được đặt riêng ra một tệp khác. Tệp này thường có đuôi mở rộng là css.

Page 146: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• Tạo 1 file CSS

• Web site -> Add New Item -> STYLESHEET -> Gõ tên file

•Nội dung của tệp chỉ chứa các định nghĩa CSS (Gồm định nghĩa bộ chọn thẻ, chọn ID, và lớp).

Page 147: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• Kích chuột phải trang -> Add Style Rule• Element: định dạng lại các thẻ đã có ( Ví dụ a: hover)• Class name: Tạo 1 lớp mới (ví dụ: .Mau)• Element Id: Tạo 1 ID để các phần tử có cùng ID sẽ định

dạng giống nhau( ví dụ: #TieuDe)

Page 148: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• Kích chuột phải lên vị trí cần định dạng -> Add Style -> Chọn mục cần định dạng như hình trên

Page 149: Nội dung học

LÀM VIỆC VỚI STYLESHEET

• Nạp file Css vào trang: Mở trang ở chế độ Source và dùng thẻ:

<link rel ="stylesheet" type ="text/css" href =“Tên file Css.css" /> ở thẻ <head>

Page 150: Nội dung học

SỬ DỤNG WEB USER CONTROL

• UserControl là thành phần có sẵn của ASP.NET, cho phép ta thiết kế điều khiển dựa trên các kỹ thuật mà ta đã lập trình trên trang ASP.NET.

• Khi sử dụng UserControl, ta phải nhúng chúng vào trang ASP.NET thay vì thực thi một mình giống như trang ASP.NET, phần mở rộng của UserControl là ASCX.

• Sau khi thiết kế xong UserControl ta chọn chúng từ cửa sổ Solution Explored và kéo thả vào trang ASP.NET

• Để để quản lý ta tạo một thư mục để lưu các WebUserControl:

• Web Site | New Folder| gõ tên thư mục là UC

Page 151: Nội dung học

SỬ DỤNG WEB USER CONTROL

+ Tạo ra 1 WebUserControl: Kích chuột phải lên tên thư mục UC | Add New Item | Web User Control | gõ tên WebUserControl | Add:

Page 152: Nội dung học

CÁC ĐỐI TƯỢNG ASP.NET

Page 153: Nội dung học

GIỚI THIỆU

• Active Server Pages (ASP): là kịch bản chạy ở phía Server, cung cấp 1 WebServer có thể xử lý các ứng dụng logic và trả về HTML cho browser.

• Web Forms: Cung cấp các công cụ để thiết kế và soạn thảo Form

• Design: hiển thị bố cục của trang• Source: Hiển thị mã tự động phát sinh khi tạo trang

Web. • Web.config: là file XML chứa cấu hình trong

project .• Global.asax là file tự chọn được sử dụng để thao

tác trên các sự kiện ở mức ứng dụng.• *.aspx, *.aspx.cs: Desgn, Codebehind

Page 154: Nội dung học

Thư mục ảo

Page 155: Nội dung học

Request and Response• Resquest:

– Nhận yêu cầu từ Client gởi đến Server khi nút Submit được nhấn.– Khi nhấn nút Submit thì dữ liệu của các điều khiển bên trong

Form sẽ được gởi đến Server (Post).– Để nhận được dữ liệu gởi từ Form (client):

• Request.Form[“tên điều khiển”];• Để nhận được tham số gởi bằng Get (Dùng thể <A>)• Request.QueryString[“tên tham số]);

• Response:– Gởi dữ liệu từ Client đến Server– Phương thức:

• Write(dữ liệu);• Redirect(“URL”);

Page 156: Nội dung học

Request and Response

Page 157: Nội dung học

Nhap.htm<body>

<form method="POST" action="NHAPHTML.ASPX">

<p>Mã Loại:<input type="text" name="txtma" size="20"></p>

<p>Tên Loại<input type="text" name="txtten" size="20"></p>

<p> <input type="submit" value="Nhap" name="Nhap"> </p>

</form>

</body>

Page 158: Nội dung học

NhapHtml.aspx protected void Page_Load(object sender, EventArgs e)

{

string ma = Request.Form["txtma"];

string ten = Request.Form["txtten"];

Response.Write("Mã Loai:" + ma);

Response.Write("<br>Tên Loại" + ten);

}

Page 159: Nội dung học

Đối tượng Server

HTMLEncode

MapPath MachineName

Server.property | method Cú phápCú pháp

MethodsMethods

cn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("qlthuvien.mdb"));

Response.Write(“<b>alo</b>”);

Response.Write(Server.HtmlEncode(“<b>alo</b>”));

Page 160: Nội dung học

Đối tượng Session

• Lưu trữ các thông tin của người dùng trong 1 phiên làm việc.

• Biến lưu trữ trong Session không bị xoá đi khi người dùng chuyển từ trang này sang trang khác.

• WebServer sẽ tự động tạo ra khi người dùng yêu cầu 1 trang web, bị giải phóng khi kết thúc phiên làm việc

• Session[“tên biến” ]= object

Page 161: Nội dung học

Tạo lớp Global để khởi tạo các Session

Project -> Add New Item -> Global Application Class

Page 162: Nội dung học

Khởi tạo các Session

Page 163: Nội dung học

Ví dụ 1

• Tạo một Website để sinh viên mượn sách trong thư viện bao gồm các WebPage:– Qlthuvien.aspx: Chứa giao diện chính– Dangky.Aspx: Đăng nhập.– Hienthi. Aspx: Hiển thị tất cả các sách– Mượn. Asp: mượn sách.

• Yêu cầu: người sử dụng phải đăng nhập mới được xem hoặc mượn sách.

• Ta phải tạo ra 1 phiên làm việc (Session) để kiểm tra xem người dùng đã đăng nhập chưa?

Page 164: Nội dung học

Qlthuvien.aspx

protected void LinkButton3Dn_Click(object sender, EventArgs e)

{

Response.Redirect("Dangky.aspx");

}

protected void LinkButton1HT_Click(object sender, EventArgs e)

{

Response.Redirect("Hienthi.aspx");

}

…..

Page 165: Nội dung học

DangKy.aspx

protected void ButDangNhap_Click(object sender, EventArgs e) { Session["ID"] = TextID.Text; .... }

Page 166: Nội dung học

HienThi.aspx

protected void Page_Load(object sender, EventArgs e) { if (Session["Id"] == null || Session["Id"] == "") Response.Redirect("~/Dangky.aspx"); // }

Page 167: Nội dung học

Bài thực hành (Session)Tạo ra trang Web đơn giản để mua hàng trên mạng:

GridView1GridView1

Page 168: Nội dung học

Tạo lớp GioHang.cs để nhập thêm 1 hàng vào giỏ

public class Giohang{ public DataTable dt = new DataTable("Hang");

public Giohang(){ dt.Columns.Add("TenHang");

dt.Columns.Add("Soluong"); }

public void ThemGiohang(string th,string sl) { DataRow dr = dt.NewRow(); dr[0] = th; dr[1] = sl; dt.Rows.Add(dr); dt.AcceptChanges(); }}

Page 169: Nội dung học

Lập trình trên nút mua và giỏ hàngprotected void butMua_Click(object sender, EventArgs e) { if (Session["gh"] == null) gh = new Giohang(); else gh = (Giohang) Session["gh"]; gh.ThemGiohang(DropDownList1.Text, textSoluong.Text); Session["gh"] = gh; } protected void ButGioHang_Click(object sender, EventArgs e) { Giohang gh = (Giohang)Session["gh"]; if (gh != null) { GridView1.DataSource = gh.dt; GridView1.DataBind(); } }

Page 170: Nội dung học

Yêu cầu bổ sung

• Tạo CSDL qlhang.mdb bao gồm bảng hang(mahang,tenhang,gia),

khachhang(hoten,diachi,tenhang,soluong,thanhtien).

• DropDownList1 Hiển thị tất cả các tên hàng của bảng hàng

• Trong giỏ hàng thêm trường ThanhTien=Sốlượng * giá.

• Kiểm trả xem trong giỏ hàng nếu đã có tên hàng thì tăng số

lượng, tính lại thành tiền.

• Tạo thêm nút Thanh Toán: người dùng nhập họ tên và địa

chỉ và chuyển tất cả hàng trong giỏ hàng vào bảng

Khachhang

Page 171: Nội dung học

Biến Application

• Dùng để quản lý các biến có phạm vi toàn ứng dụng. Có tác dụng đến mọi người dùng.

• Biến toàn ứng dụng là biến có tác dụng đối với mọi người dùng truy cập vào website. Mọi trang aspx đều có thể truy cập đến biến này và dù ở bất kỳ thời điểm nào.

• Application[“tên biến"] = <giá trị>

• Khởi tạo giá trị biến trong Application_Start của lớp Global

Page 172: Nội dung học
Page 173: Nội dung học

Giới thiệu

LINQ (Language Integrated Query) là sự mở rộng của .Net Frame Work. Nó bao gồm ngôn ngữ tích hợp truy vấn, là sự mở rộng C# và Visual Basic với cú pháp ngôn ngữ riêng cho các truy vấn và cung cấp các thư viện để truy xuất dữ liệu.

Page 174: Nội dung học

Ví sao phải dùng LINQ?

Data IS EverywhereBut

Data != Objects

Page 175: Nội dung học

Objects Data

!=

Ví sao phải dùng LINQ ?

Page 176: Nội dung học

Kiến trúc của LINQ

Page 177: Nội dung học

• LINQ to Objects: Cung cấp các khả năng để truy vấn IEnumerable <T>, dựa trên mảng, collections và list

• LINQ to XML: giúp cho người lập trình thao tác trên các truy vấn XPath / XQuery một cách nhanh chóng và hiệu quả.

• LINQ to SQL: Được sử dụng để truy cập các đối tượng cơ sở dữ liệu quan hệ như các đối tượng .NET. LINQ to SQL tích hợp SQL dựa trên các định nghĩa của lược đồ. Cung cấp cách đánh mạnh mẽ, kiểm tra cú pháp, IntelliSense trên các đối tượng SQL.

• LINQ to DataSet: Cung cấp các khả năng để truy vấn ADO.NET Dataset.

• Linq to Entities: cung cấp khả năng truy vấn trên các thực thể ADO.NET.

Page 178: Nội dung học
Page 179: Nội dung học

Giới thiệu

• LINQ to SQL là một phiên bản hiện thực hóa của ORM (object relational mapping) có bên trong .NET Framework 3.5, cho phép 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

Page 180: Nội dung học

Tạo CSDL trong SQL SERVER 2005

CSDL này được sử dụng trong toàn bộ chương trình

Page 181: Nội dung học

Kết nối đến CSDL- View -> Server Explorer- Kích phải chuột lên DataConnection -> Add Connection

Page 182: Nội dung học

Hiệu chỉnh đường kết nối trong file Web.config

Page 183: Nội dung học

Tạo ra mô hình dữ liệu LINQ TO SQL

• Tạo ra lớp DataContext – Project -> Add New Item -> LINQ To SQL

Classes -> tại Name gõ tên: QlNvDb.dbml– Mở cửa số Server Explorer -> chọn Table ->

Giữ phím Ctrl đồng thời chọn tất cả các bảng -> kéo các bảng này vào cửa sổ của file QlNvDb.dbml

Page 184: Nội dung học

Tạo ra mô hình dữ liệu LINQ TO SQL

Page 185: Nội dung học

Các thành phần của lớp DataContext

Page 186: Nội dung học

Các thành phần của lớp DataContext

Page 187: Nội dung học

Các thành phần của lớp DataContext

Page 188: Nội dung học

Các thành phần của lớp DataContext

Page 189: Nội dung học

Các truy vấn

Biểu thức truy vấn

Biến địa phương kiểu tham chiếu

Biểu thức Lambda

Các phương thức mở rộng Kiểu nặc danh Khởi tạo các đối

tượng

Page 190: Nội dung học

Các toán tử trong LINQ TO SQL

Page 191: Nội dung học

Select

Select manv, hoten from nhanvien

Page 192: Nội dung học

Take, Skip

select top 2 manv, hoten from nhanvien

db.NhanViens.Skip(4).Take(2);

•Lấy về giá trị của dòng 5 và 6

Page 193: Nội dung học

Order by

select manv, hoten, hesoluong from nhanvien order by hesoluong desc

Page 194: Nội dung học

Distinct

select distinct madonvi from nhanvien

var q = (from p in db.NhanViens select new { madv=p.MaDonVi }).Distinct() ;

Page 195: Nội dung học

Where

select manv, hoten, hesoluong from nhanvien

where madonvi='dv1'

Page 196: Nội dung học

Where

select manv, hoten, hesoluong from nhanvien

where hoten like N‘%Nguyễn%'

Page 197: Nội dung học

Joinselect manv, hoten, tendonvi from donvi

inner join nhanvien on donvi.madonvi=nhanvien.madonvi

Page 198: Nội dung học

Group

select TenDonVi,sum(hesoluong*830000) from donvi inner join nhanvien on donvi.madonvi=nhanvien.madonvi

group by TenDonVi

var q = from dv in db.DonVis join nv in db.NhanViens on dv.MaDonVi equals nv.MaDonVi group nv by dv.TenDonVi into kqselect new{Madv=kq.Key , Tongluong=kq.Sum(t=>t.HeSoLuong*830000)};

Page 199: Nội dung học

Các hàm tập hợp

select sum(hesoluong*830000) from nhanvien

Select avg(hesoluong) from nhanvien

Select count(*) from nhanvien

Select Max(hesoluong) from nhanvien

Select Min(hesoluong) from nhanvien

var l = db.NhanViens.Sum(nv => nv.HeSoLuong * 830000); var tb = db.NhanViens.Average(nv => nv.HeSoLuong ); var snv = db.NhanViens.Count(); var max = db.NhanViens.Max(nv => nv.HeSoLuong); var min = db.NhanViens.Min(nv => nv.HeSoLuong);

Page 200: Nội dung học

Thêm

Insert into nhanvien values('nv123',N'Nguyễn Hoàng Hà','11/22/1976',1,3,'dv1')

Page 201: Nội dung học

Xóa

Delete from nhanvien where manv=‘nv1’

//Nếu xóa nhiều nhân viên dbDataContext db = new dbDataContext(); foreach(loai l in db.Nhanviens.Where(p=>p.Manv==“nv1")) db. Nhanviens..DeleteOnSubmit(l); db.SubmitChanges();

Page 202: Nội dung học

Sửa

update nhanvien set hesoluong=hesoluong+1 where madonvi='dv1'

Page 203: Nội dung học

Sử dụng thủ tục và View

TimNv “lý”

Page 204: Nội dung học

LinqDatasource

Từ Data trên ToolBox chọn 1 LinqDataSource

Page 205: Nội dung học
Page 206: Nội dung học
Page 207: Nội dung học

Buộc dữ liệu vài GridView