Nội dung học

Post on 14-Jan-2016

56 views 0 download

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

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

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

CHƯƠNG I

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.

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

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

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.

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.

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

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

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.

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.

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

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

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

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

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

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

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

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

Chia sẻ IDE [3]

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ế

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 )

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

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)

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

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.

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

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.

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

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.

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

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.

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

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

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

}

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

...

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

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

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

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

}

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

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

• }

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ử

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

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

}

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

...

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

}

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

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

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

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

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

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

• …

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

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

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

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

}

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

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

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)

}

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

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

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ố

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

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

}

}

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

}

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

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;

}

}}

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

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

}}

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

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;

}}

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)

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;

}}

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

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;

}}

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

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.

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}

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

}

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

}

}

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){…}

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

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

}

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

}

}

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.

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

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.

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

Ví dụ [1]

using System;

interface Music

{

void PlayMusic(string filename);

void EndPlay();

}

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() { … } }

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

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

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

}}

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

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.

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

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.

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

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.

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}

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

}

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

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.

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

}}

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

}}

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

}}

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

}

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

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

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

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

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

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

}

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

• 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

Chương 4

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

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

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.

Web động

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)

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

ASP.NET - Kiến trúc

ASPX

.ASPX.ASPX

ASP.NET - Kiến trúc

Client (Browser)

ASP.DLLASP.DLL

IISIISVBScriptVBScript

JavaScriptJavaScript

ActiveX Data Objects(ADO)

ActiveX Data Objects(ADO)

DatabaseDatabase ASP file

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

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

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>

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)

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.

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>

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>

Ví dụ: Các thẻ HTML

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>

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>

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

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

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

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

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

PROPERTIES

ID

ImageUrl

Image

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

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

PROPERTIES

Methoad

ID SaveAs

FileUpload

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

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

DataList

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

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

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

}

}

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

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

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.

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.

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

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)

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

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>

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

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:

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

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

Thư mục ảo

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

Request and Response

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>

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

}

Đố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>”));

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

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

Project -> Add New Item -> Global Application Class

Khởi tạo các Session

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?

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

}

…..

DangKy.aspx

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

HienThi.aspx

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

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

GridView1GridView1

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

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

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

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

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.

Ví sao phải dùng LINQ?

Data IS EverywhereBut

Data != Objects

Objects Data

!=

Ví sao phải dùng LINQ ?

Kiến trúc của LINQ

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

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

Tạo CSDL trong SQL SERVER 2005

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

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

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

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

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

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

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

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

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

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

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

Select

Select manv, hoten from nhanvien

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

Order by

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

Distinct

select distinct madonvi from nhanvien

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

Where

select manv, hoten, hesoluong from nhanvien

where madonvi='dv1'

Where

select manv, hoten, hesoluong from nhanvien

where hoten like N‘%Nguyễn%'

Joinselect manv, hoten, tendonvi from donvi

inner join nhanvien on donvi.madonvi=nhanvien.madonvi

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

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

Thêm

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

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

Sửa

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

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

TimNv “lý”

LinqDatasource

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

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