You are on page 1of 93

I HC CNG NGHIP THC PHM TP.

HCM Khoa Cng Ngh Thng Tin

CNG NGH WEB NNG CAO


XY DNG WEB SITES VI ASP.NET 2.0

H Ch Minh, 7/2011

Page |2

MC LC
Chng 1. 1.1. 1.2. 1.2.1. 1.2.2. 1.2.3. 1.2.4. 1.2.5. 1.2.6. 1.2.7. 1.2.8. 1.2.9. 1.3. 1.3.1. 1.3.2. 1.3.3. 1.3.4. 1.4. Chng 2. 2.1. 2.1.1. 2.1.2. 2.1.3. 2.1.4. 2.1.5. 2.1.6. 2.1.7. 2.2. 2.2.1. 2.2.2. 2.2.3. 2.2.4. PHN TCH THIT K DATABASE ........................................................... 6 YU CU H THNG .............................................................................................. 6 THIT K DATABASE ............................................................................................. 6 Diagram ................................................................................................................... 6 Bng ch : tbChuDe ............................................................................................. 6 Bng nh xut bn: tbNhaXuatBan ......................................................................... 6 Bng sch: tbSach .................................................................................................... 7 Bng tc gi: tbTacGia ............................................................................................ 7 Bng khch hng: tbKhachHang ............................................................................. 7 Bng n t hng: tbDonHang .............................................................................. 7 Bng chi tit t hng: tbCTDonHang .................................................................... 8 Bng chi tit t hng: tbNhanVien ........................................................................ 8 STORE PROCEDURE ............................................................................................... 8 Xy dng Store Procedure Insert ............................................................................. 8 Xy dng Store Procedure Update .......................................................................... 9 Xy dng Store Procedure Delete ......................................................................... 10 Xy dng Store Procedure GET ............................................................................ 11 MT S N ...................................................................................................... 13 XY DNG M HNH 3 LAYER............................................................... 14

TO M HNH PROJECT ...................................................................................... 14 To Solution .......................................................................................................... 14 To Project Data Object Transfer .......................................................................... 15 To Project Data Access Layer ............................................................................. 16 To Project Busineess ............................................................................................ 17 To Website ........................................................................................................... 17 To File Web.Config cho Web Site....................................................................... 18 To Reference ........................................................................................................ 19 XY DNG I TNG DATA TRANSFER..................................................... 22 Xy dng class Entities ......................................................................................... 22 Tip: Cch xy dng nhanh i tng Data Access Transfer ................................ 25 Xy dng enum Columns ...................................................................................... 27 Xy dng lp Collection ....................................................................................... 28

Page |3 2.3. 2.3.1. 2.3.2. 2.3.3. 2.3.4. 2.3.5. 2.3.6. 2.4. 2.4.1. 2.4.2. 2.4.3. 2.4.4. 2.4.5. 2.4.6. Chng 3. 3.1. 3.1.1. 3.1.2. 3.1.3. 3.2. 3.2.1. 3.2.2. 3.3. 3.3.1. 3.3.2. 3.3.3. 3.3.4. 3.3.5. 3.3.6. 3.4. 3.4.1. 3.4.2. 3.4.3. XY DNG LP DATA ACCESS ......................................................................... 28 Thuc Tnh SqlConnection .................................................................................... 28 Phng thc khi to............................................................................................. 28 Phng thc Insert................................................................................................. 29 Phng thc Update .............................................................................................. 30 Phng thc Delete ............................................................................................... 30 Phng thc Get .................................................................................................... 31 XY DNG LP BUSINESS ................................................................................. 33 Phng thc Insert................................................................................................. 33 Phng thc Update .............................................................................................. 33 Phng thc Delete ............................................................................................... 34 Phng thc Get .................................................................................................... 34 Phng thc GetAll ............................................................................................... 34 Phng thc GetByID ........................................................................................... 35 XY DNG PHN H QUN L ............................................................. 36

TO TRANG MASTER PAGE ............................................................................... 36 To trang Master Page ........................................................................................... 36 Thit k giao din cho trang Master Page ............................................................. 37 Kim tra ng nhp................................................................................................ 37 XY DNG CHC NNG NG NHP ............................................................ 38 Thit k giao din cho trang ng nhp ................................................................. 38 X l ng nhp .................................................................................................... 39 XY DNG CHC NNG XEM DANH SCH SN PHM ............................. 40 To trang danh sch sn phm ............................................................................... 40 Thit k giao din .................................................................................................. 41 X l Page Load .................................................................................................... 44 X l chc nng phn trang................................................................................... 47 Chc nng xa ....................................................................................................... 48 Chc nng tm kim .............................................................................................. 48 XY DNG CHC NNG THM SN PHM ................................................... 48 Thit k giao din cho trang thm sn phm ......................................................... 48 X l ti d liu ..................................................................................................... 50 X l thm sn phm ............................................................................................. 51

Page |4 3.5. 3.5.1. 3.5.2. 3.5.3. 3.6. 3.6.1. 3.6.2. 3.6.3. 3.7. 3.7.1. 3.7.2. 3.7.3. XY DNG CHC NNG CHNH SA SN PHM ........................................ 52 Thit k giao din cho trang chnh sa sn phm .................................................. 52 X l Page Load .................................................................................................... 55 X l chnh sa sn phm ..................................................................................... 56 XY DNG CHC NNG XEM DANH SCH N HNG ............................ 57 Thit k giao din .................................................................................................. 57 X l ti d liu ..................................................................................................... 59 X l phn trang .................................................................................................... 61 XY DNG CHC NNG XEM CHI TIT N HNG ................................... 61 Thit k giao din .................................................................................................. 61 X l ti d liu ..................................................................................................... 65 X l phn trang .................................................................................................... 67 XY DNG PHN H NGI DNG...................................................... 68

Chng 4. 4.1.1. 4.1.2. 4.1.3. 4.1.4. 4.2. 4.2.1. 4.2.2. 4.3. 4.3.1. 4.3.2. 4.3.3. 4.4. 4.4.1. 4.4.2. 4.4.3. 4.5. 4.5.1. 4.5.2. 4.6. 4.6.1.

TO TRANG MASTER PAGE............................................................................ 68 Thit k giao din .................................................................................................. 68 X l ti d liu ..................................................................................................... 72 X l thot khi h thng ...................................................................................... 73 XY DNG TRANG CH ..................................................................................... 73 Thit k giao din .................................................................................................. 73 X l ti d liu ..................................................................................................... 74 XY DNG TRANG DANH SCH SN PHM THEO CH ..................... 75 Thit k giao din .................................................................................................. 75 X l ti d liu ..................................................................................................... 76 Phn trang .............................................................................................................. 77 XY DNG TRANG CHI TIT SN PHM........................................................ 78 Thit k giao din .................................................................................................. 78 X l ti d liu ..................................................................................................... 81 X l thm vo gi hng ....................................................................................... 82 XY DNG CHC NNG NG K ................................................................. 82 Thit k giao din .................................................................................................. 82 X l ng k ........................................................................................................ 84 XY DNG CHC NNG NG NHP ............................................................ 85 Thit k giao din .................................................................................................. 85

Page |5 4.6.2. 4.7. 4.7.1. 4.7.2. 4.7.3. 4.8. 4.8.1. 4.8.2. X l ng nhp .................................................................................................... 86 XY DNG CHC NNG GI HNG ................................................................ 86 Xy dng gi hng ................................................................................................ 86 Thit k giao din .................................................................................................. 88 X l ti d liu ..................................................................................................... 90 XY DNG CHC NNG T HNG ............................................................... 91 Thit k giao din .................................................................................................. 91 X l chc nng t hng ...................................................................................... 92

Page |6

Chng 1.
1.1. 1.2.
1.2.1.

PHN TCH THIT K DATABASE

YU CU H THNG THIT K DATABASE


Diagram

1.2.2.

Bng ch : tbChuDe
Data Type Int (Autonumber) nVarchar(255) Not Null Constraint

Field Name MaCD TenChuDe

1.2.3.

Bng nh xut bn: tbNhaXuatBan


Data Type Int (Autonumber) nVarchar(255) nVarchar(255) nVarchar(15) Not Null Constraint

Field Name MaNXB TenNXB DiaChi DienThoai

Page |7

1.2.4.

Bng sch: tbSach


Data Type Int (Autonumber) nVarchar(255) Int Int Int nVarchar(255) Int nText DateTime Int Int Not Null Constraint

Field Name MaSach TenSach MaCD MaTG MaNXB HinhMinhHoa DonGia MoTa NgayCapNhat SoLuongBan SoLanXem

1.2.5.

Bng tc gi: tbTacGia


Data Type Int (Autonumber) nVarchar(255) nVarchar(255) nVarchar(255) Not Null Constraint

Field Name MaTG Ten DiaChi DienThoai

1.2.6.

Bng khch hng: tbKhachHang


Data Type Int (Autonumber) nVarchar(255) nVarchar(255) nVarchar(255) nVarchar(255) nVarchar(255) Not Null Constraint

Field Name MaKH HoTen Email MatKhau DiaChi DienThoai

1.2.7.

Bng n t hng: tbDonHang


Data Type Int (Autonumber) Constraint

Field Name MaDH

Page |8

MaKH NgayDatHang TriGia DaGiao NgayGiaoHang DiaChiNhanHang

Int DateTime Int Bit DateTime Nvarchar(255)

1.2.8.

Bng chi tit t hng: tbCTDonHang


Data Type Int (Autonumber) Int Int Int Int Constraint

Field Name MaCTDonHang MaDH MaSach SoLuong DonGia

1.2.9.

Bng chi tit t hng: tbNhanVien


Data Type Int (Autonumber) Int nVarchar(255) nVarchar(255) nVarchar(255) nVarchar(255) nVarchar(255) Constraint

Field Name MaCTDonHang Ma TaiKhoan MatKhau TenNV DiaChi DienThoai

1.3.
1.3.1.

STORE PROCEDURE
Xy dng Store Procedure Insert
thm d liu vo bng tbSach chng ta cn khai bo cc tham s @TenSach, @MoTa, @HinhMinhHoa, @MaCD, cho @MaNXB, Store @NgayCapNhat, mang tn

@DonGia,

@SoLuongBan,

@SoLanXem,

@MaTG

Procedure

sp_tbSach_Insert. Chng ta khng cn nhn vo ni dung ca trng MaSach v thit lp thuc tnh t tng cho trng MaSach.

Page |9 Sau khi nhn c cc tham s, Store Procedure tin hnh cu lnh INSERT cc d liu nhn c vo c s d liu. Sau y l ni dung ca Store Procedure Insert ca table tbSach.
ALTER PROCEDURE dbo.sp_tbSach_Insert @TenSach NVARCHAR(255), @DonGia INT, @MoTa NTEXT, @HinhMinhHoa NVARCHAR(255), @MaCD INT, @MaNXB INT, @NgayCapNhat DATETIME, @SoLuongBan INT, @SoLanXem INT, @MaTG INT AS INSERT INTO tbSach VALUES( @TenSach, @MaCD, @MaTG, @MaNXB, @HinhMinhHoa, @DonGia, @MoTa, @NgayCapNhat, @SoLuongBan, @SoLanXem )

1.3.2.

Xy dng Store Procedure Update


Ngoi nhng tham s nhn vo gi tr ca trng cn thay i @TenSach, @MoTa, @HinhMinhHoa, @MaCD, @MaNXB, @NgayCapNhat,

@DonGia,

@SoLuongBan, @SoLanXem, @MaTG, chng ta cn phi truyn vo @MaSach xc nh thay i sn phm no trong c s d liu. Store Procedure Update tin hnh cp nht cc thay i bng cu lnh UPDATE. Sau y l ni dung ca Store Procedure Update.

P a g e | 10
CREATE PROCEDURE dbo.sp_tbSach_Update @MaSach INT, @TenSach NVARCHAR(255), @DonGia INT, @MoTa NTEXT, @HinhMinhHoa NVARCHAR(255), @MaCD INT, @MaNXB INT, @NgayCapNhat DATETIME, @SoLuongBan INT, @SoLanXem INT, @MaTG INT AS UPDATE tbSach SET TenSach = @TenSach, DonGia = @DonGia, MoTa = @MoTa, HinhMinhHoa = @HinhMinhHoa, MaCD = @MaCD, MaNXB = @MaNXB, NgayCapNhat = @NgayCapNhat, SoLuongBan = @SoLuongBan, SoLanXem = @SoLanXem, MaTG = @MaTG WHERE @MaSach = @MaSach

1.3.3.

Xy dng Store Procedure Delete


xa mt sn phm t bng tbSach, Store Procedure Delete cn khai bo tham

s @MaSach truyn vo kha chnh ca sn phm cn xa. Sau khi nhn c kha chnh ca sn phm cn xa th Store Procedure Delete tin hnh kim tra i tng sch cn xa c s dng cc bng c kha ngoi n tbSach. Nu cha c s dng th Store Procedure s tin hnh xa i tng cn xa. Ngc li Store Procedure s khng xa i tng . Sau y l ni dung ca Store Procedure Delete.
ALTER PROCEDURE dbo.sp_tbSach_Delete

P a g e | 11
@MaSach INT AS DECLARE @TOTAL INT SELECT @TOTAL = COUNT(*) FROM tbCTDonHang WHERE MaSach = @MaSach IF @TOTAL = 0 BEGIN DELETE FROM tbSach where MaSach = @MaSach END

1.3.4.
1.3.4.1.

Xy dng Store Procedure GET


MicroSoft SQL Server 2000 c th dng mt Store Proceduce GET cho mi trng hp th chng ta cn phi

thnh lp cu lnh WHERE t code v truyn vo Store Procedure GET. V vy chng ta cn khai bo tham s @Where. Hai tham s @PageIndex (trang hin ti) v @PageSize (s dng /trang) dng phn trang cho Store Procedure GET. ly d liu c sp xp, chng ta cn khai bo 2 tham s l @OrderBy v @OrderDirection ln lt quy nh sp sp theo ct no v sp xp theo th t tng hay gim dn. Tham s @TotalRecords khng phi l tham s INPUT m l tham s OUTPUT. Tham s ny s truyn li cho chng trnh bit l c bao nhiu sn phm tha iu kin @Where truyn vo. Sau khi nhn c y cc tham s k trn, Store Procedure tin hnh to bng tm mang tn #Temp(IDTemp, MaSach). Trng IDTemp c kiu d liu l INT t tng khi INSERT, v l kha chnh ca bng #Temp. Trng IDTemp cn c to ra phc v mc ch phn trang, v cc gi tr ca chng l lin tip nhau. Trng MaSach ca bng #Temp dng lu MaSach ca tt c cc sn phm tha iu kin @Where. Chng trnh thnh lp cu lnh @sql tm kim tt cc sn phm tha iu kin @Where, sp sp theo ct @OrderBy v theo th t @OrderDirection. Ly trng MaSach

P a g e | 12 ca tt c cc sn phm tha iu kin , insert vo bng #Temp. Lc ny trong bng #Temp chng ta c c MaSach ca tt c cc sn phm tha iu kin v c sp sp theo cc tham s truyn vo, ng thi cng c c ct IDTemp cha cc gi tr lin tip nhau. V bng #Temp cha tt c MaSach ca cc sn phm tha iu kin @Where nn mun c c tham s @TotalRecord chng ta ch cn m s dng ca bng #Temp. Chng trnh s ly nhng thng tin cn thit t bng #Temp JOIN vi bng tbSach vi iu kin JOIN l #Temp.MaSach = tbProduct.Masach. Nu @PageIndex truyn vo l 0 th chng trnh s ly tt c sn phm c trong bng #Temp. Ngc li, nu @PageIndex khc 0 th chng trnh s tin hnh phn trang. Cui cng chng ta xa bng #Temp. Sau y l ni dung ca Store Procedure GET.
CREATE PROCEDURE dbo.sp_tbSach_GET_2000 @Where NVARCHAR(255), @PageIndex INT, @PageSize INT, @OrderBy NVARCHAR(25), @OrderDirection NVARCHAR(4), @TotalRecords INT OUTPUT AS SET TRANSACTION ISOLATION LEVEL READ COMMITTED CREATE TABLE #Temp ( IDTemp INT IDENTITY(1,1), MaSach INT ) DECLARE @sql NVARCHAR(1000) SET @sql = 'INSERT INTO #temp ([MaSach]) SELECT [MaSach] FROM tbSach ' + @Where + ' ORDER BY ' + @OrderBy + ' ' + @OrderDirection EXEC (@sql) SELECT @TotalRecords = COUNT(*) FROM #Temp SELECT S.MaSach, S.TenSach, S.DonGia, S.MoTa,

P a g e | 13
S.HinhMinhHoa, S.MaCD, S.MaNXB, S.NgayCapNhat, S.SoLuongBan, S.SoLanXem, S.MaTG FROM #Temp AS T JOIN tbSach AS S ON T.MaSach = S.MaSach WHERE (@PageIndex = 0) OR (T.IDTemp > (@PageIndex - 1) * @PageSize AND T.IDTemp <= @PageIndex * @PageSize) DROP TABLE #temp

1.4.

MT S N

P a g e | 14

Chng 2.
2.1.
2.1.1.

XY DNG M HNH 3 LAYER

TO M HNH PROJECT
To Solution
Khi ng chng trnh Visual Studio 2005

New Project Other Project Type Visual Studio Solutions Blank Solution. Nhp tn v chn ng dn cho solution, sau nhn vo nt OK

P a g e | 15

2.1.2.

To Project Data Object Transfer


T ca s Solution Explorer, nhp chut phi vo Solution Add New Project.

Trong khung Add New Project, chn loi project l Class Library, t tn cho project l Entities, chn ng dn v nhn vo nt OK

P a g e | 16

2.1.3.

To Project Data Access Layer


Lp li cc bc nh to project Entities. t tn cho project ny l DAL.

P a g e | 17

2.1.4.

To Project Busineess
Lp li cc bc nh to project Entities. t tn cho project ny l BUS.

2.1.5.
Site.

To Website
T ca s Solution Explorer, nhp chut phi vo solution Add New Web

P a g e | 18 Trong khung Add New Web Site, chn loi Web Site l ASP.NET Web Site, th mc cha Web Site v ngn ng l Visual C#. Sau nhn nt OK.

2.1.6.
Item

To File Web.Config cho Web Site


T ca s Solution Explorer, chn chut phi vo Project Web Site Add New

Trong khung Add New Item, chn loi file l Web Configuration File v nhn vo nt Add.

P a g e | 19

Chng ta thm chui kt ni c s d liu vo file Web.config va to ra.


<connectionStrings> <add name="strConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;I ntegrated Security=True;User Instance=True"/> </connectionStrings>

2.1.7.
2.1.7.1.

To Reference
Reference ca DAL Lp Data Access Layer bt buc phi thm reference ti i tng Data Objects

Transfer. T ca s Solution Explorer, nhp chut phi vo th mc Reference ca project DAL Add Reference.

P a g e | 20

Trong khung Add Reference, chn tab Project, chn Project Data Object Transfer, sau nhn vo nt OK.

2.1.7.2.

Reference ca BUS Lp Business bt buc phi thm reference ti i tng Data Objects Transfer v

Data Access Layer. T ca s Solution Explorer, nhp chut phi vo th mc Reference ca project BUS Add Reference.

P a g e | 21

Trong khung Add Reference, chn tab Project, chn Project Data Object Transfer v project Data Access Layer sau nhn vo nt OK.

2.1.7.3.

Reference ca Web Site Lp Presentation (Web Site) bt buc phi thm reference ti i tng Business

Layer, Data Objects Transfer v Data Access Layer. T ca s Solution Explorer, nhp chut phi vo Web Site Add Reference.

P a g e | 22

Trong khung Add Reference, chn tab Project, chn project Business Layer, project Data Object Transfer v project Data Access Layer sau nhn vo nt OK.

2.2.
2.2.1.
sau:

XY DNG I TNG DATA TRANSFER


Xy dng class Entities
ng gi cc thuc tnh ca tbProduct, chng ta khai bo class tbProduct nh

P a g e | 23
public class tbSach { }

Sau , chng ta khai bo cc thuc tnh ca Product v to cc phng thc get v set cho thuc tnh .
public class tbSach { private int maSach; public int MaSach { get { return maSach; } set { maSach = value; } } private string tenSach; public string TenSach { get { return tenSach; } set { tenSach = value; } } private int donGia; public int DonGia { get { return donGia; } set { donGia = value; } } private string moTa; public string MoTa { get { return moTa; } set { moTa = value; } } private string hinhMinhHoa; public string HinhMinhHoa { get { return hinhMinhHoa; } set { hinhMinhHoa = value; }

P a g e | 24
} private int maCD; public int MaCD { get { return maCD; } set { maCD = value; } } private int maNXB; public int MaNXB { get { return maNXB; } set { maNXB = value; } } private DateTime ngayCapNhat; public DateTime NgayCapNhat { get { return ngayCapNhat; } set { ngayCapNhat = value; } } private int soLuongBan; public int SoLuongBan { get { return soLuongBan; } set { soLuongBan = value; } } private int soLanXem; public int SoLanXem { get { return soLanXem; } set { soLanXem = value; } } private int maTG; public int MaTG { get { return maTG; } set { maTG = value; } }

P a g e | 25
}

2.2.2.
2.2.2.1. thng.

Tip: Cch xy dng nhanh i tng Data Access Transfer


Cch 1 Khai bo thuc tnh vi loi l Private. Khuyn co nn t k t u tin l ch

private int maSach;

Bi en t maSach, nhn chut phi Refactor Encapsulate Field. Trong khung Encapsulate Field, la chn cc thng s mc nh. Sau nhn chn vo nt OK.

Trong khung Review Reference Changes - Encapsulate Field, nhn chn vo nt Apply.

P a g e | 26

Kt qu thu c:
private int maSach; public int MaSach { get { return maSach; } set { maSach = value; } }

P a g e | 27 2.2.2.2. Cch 2 Nhp "prop"

Nhn phm TAB 2 ln.

Sau chnh sa cc kiu d liu v tn ca thuc tnh. Dng phm TAB di chuyn qua mc tip theo, Shift + TAB quay tr li mc va chnh sa, Enter kt thc.

2.2.3.

Xy dng enum Columns


ghi nh cc ct ca bng tbSach, chng ta khai bo enum tbSachColumns.

Trong enum ny c tn chnh xc ca cc ct trong bng tbSach.


public enum tbSachColumns

P a g e | 28
{ MaSach, TenSach, DonGia, MoTa, HinhMinhHoa, MaCD, MaNXB, NgayCapNhat, SoLuongBan, SoLanXem, MaTG }

Sau khi khai bo class tbSachColumns, chng ta khng cn phi vo c s d liu xem tn cc ct trong bng tbSach na, m ch cn s dng enum tbSachColumns.

2.2.4.

Xy dng lp Collection
biu din cho mt danh sch tbSach chng ta khai bo class tbSachCollection k

tha ca List<tbSach> nh sau:


public class tbSachCollection : List<tbSach>{}

Khi cn biu din mt danh sch, chng ta s dng class tbSachCollection m khng cn phi dng thng qua List hoc ArrayList na.

2.3.
2.3.1.

XY DNG LP DATA ACCESS


Thuc Tnh SqlConnection
thao tc vi C S D Liu chng ta cn phi khai bo i tng

SqlConnection.
private SqlConnection cn = null;

2.3.2.

Phng thc khi to


Sau khi khai bo i tng SqlConnection, chng ta cn khi to i tng ny v

s dng phng thc open() bt kt ni vi CSDL.

P a g e | 29
public tbSachDAL() { cn = new SqlConnection(ConfigurationManager .ConnectionStrings["strConnection"] .ConnectionString); cn.Open(); }

2.3.3.

Phng thc Insert


Phng thc Insert dng thm i tng tbSach vo C S D Liu. Phng

thc ny nhn vo i tng Entities l tbSach. Chng ta khai bo i tng SqlCommand v khi to i tng vi hai tham s l: tn ca Store Proceduce: sp_tbSach_Insert v i tng SqlConnection m chng ta khi to hm khi to i tng Data Access Layer. Sau khi khi to i tng SqlCommand, chng ta cn truyn cc tham s vo cho Store Proceduce v gi phng thc ExecuteNonQuery() thc thi Store Procedure:
sp_tbSach_Insert. public void Insert(tbSach sach) { SqlCommand cm = new SqlCommand("sp_tbSach_Insert", cn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@TenSach", sach.TenSach); cm.Parameters.AddWithValue("@DonGia", sach.DonGia); cm.Parameters.AddWithValue("@MoTa", sach.MoTa); cm.Parameters.AddWithValue("@HinhMinhHoa", sach.HinhMinhHoa); cm.Parameters.AddWithValue("@MaCD", sach.MaCD); cm.Parameters.AddWithValue("@MaNXB", sach.MaNXB); cm.Parameters.AddWithValue("@NgayCapNhat", sach.NgayCapNhat); cm.Parameters.AddWithValue("@SoLuongBan", sach.SoLuongBan); cm.Parameters.AddWithValue("@SoLanXem", sach.SoLanXem); cm.Parameters.AddWithValue("@MaTG", sach.MaTG); cm.ExecuteNonQuery();

P a g e | 30
}

2.3.4.

Phng thc Update


Phng thc Update dng chnh sa i tng tbSach trong C S D Liu.

Phng thc ny nhn vo i tng Entities l tbSach. Chng ta khai bo i tng SqlCommand v khi to i tng vi hai tham s l: tn ca Store Proceduce: sp_tbSach_Update v i tng SqlConnection m chng ta khi to hm khi to i tng Data Access Layer. Sau khi khi to i tng SqlCommand, chng ta cn truyn cc tham s vo cho Store Proceduce v gi phng thc ExecuteNonQuery() thc thi Store Procedure:
sp_tbSach_Update. public void Update(tbSach sach) { SqlCommand cm = new SqlCommand("sp_tbSach_Update", cn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@MaSach", sach.MaSach); cm.Parameters.AddWithValue("@TenSach", sach.TenSach); cm.Parameters.AddWithValue("@DonGia", sach.DonGia); cm.Parameters.AddWithValue("@MoTa", sach.MoTa); cm.Parameters.AddWithValue("@HinhMinhHoa", sach.HinhMinhHoa); cm.Parameters.AddWithValue("@MaCD", sach.MaCD); cm.Parameters.AddWithValue("@MaNXB", sach.MaNXB); cm.Parameters.AddWithValue("@NgayCapNhat", sach.NgayCapNhat); cm.Parameters.AddWithValue("@SoLuongBan", sach.SoLuongBan); cm.Parameters.AddWithValue("@SoLanXem", sach.SoLanXem); cm.Parameters.AddWithValue("@MaTG", sach.MaTG); cm.ExecuteNonQuery(); }

2.3.5.

Phng thc Delete


Phng thc Delete dng xa i tng tbSach trong C S D Liu. Phng

thc ny nhn vo ID ca Sach cn xa.

P a g e | 31 Chng ta khai bo i tng SqlCommand v khi to i tng vi hai tham s l: tn ca Store Proceduce: sp_tbSach_Delete v i tng SqlConnection m chng ta khi to hm khi to i tng Data Access Layer. Sau khi khi to i tng SqlCommand, chng ta cn truyn ID cn xa vo cho Store Proceduce v gi phng thc ExecuteNonQuery() thc thi Store Procedure:
sp_tbSach_Delete. public void Delete(int iD) { SqlCommand cm = new SqlCommand("sp_tbSach_Delete", cn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@MaSach", iD); cm.ExecuteNonQuery(); }

2.3.6.

Phng thc Get


Phng thc Get dng ly nhng i tng tbSach t C S D Liu tha mn

cc iu kin truyn vo. Phng thc ny nhn vo: Where, PageIndex, PageSize,
OrderBy, OrderDirection, tr v danh sch cc tbSach v TotalRecords.

Chng ta khai bo i tng SqlCommand v khi to i tng vi hai tham s l: tn ca Store Proceduce: sp_tbSach_GET v i tng SqlConnection m chng ta khi to hm khi to i tng Data Access Layer. Sau khi khi to i tng SqlCommand, chng ta cn truyn cc tham s vo cho Store Proceduce. Chng ta khai bo v khi to i tng SqlDataReader t i tng SqlCommand. c tng dng d liu, chuyn i thnh i tng tbSach v thm i tng ny vo danh sch sn phm c khai bo thng qua i tng tbProductCollection. Chng ta nhn gi tr TotalRecords bng cch parse gi tr ca tham s
TotalRecords v gi tr int public tbSachCollection Get(string where, int pageIndex, int pageSize,string orderBy, string orderDirection, out int totalRecords)

P a g e | 32
{ SqlCommand cm = new SqlCommand("sp_tbSach_GET", cn); cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@Where", where); cm.Parameters.AddWithValue("@PageIndex", pageIndex); cm.Parameters.AddWithValue("@PageSize", pageSize); cm.Parameters.AddWithValue("@OrderBy", orderBy); cm.Parameters.AddWithValue("@OrderDirection", orderDirection); cm.Parameters.Add(new SqlParameter("@TotalRecords", DbType.Int32)).Direction = ParameterDirection.Output; SqlDataReader dr = cm.ExecuteReader(); tbSachCollection sachCollection = new tbSachCollection(); while (dr.Read()) { tbSach sach = new tbSach(); sach.MaTG = int.Parse(dr.GetValue(0).ToString()); sach.TenSach = dr.GetValue(1).ToString(); sach.DonGia = int.Parse( dr.GetValue(2).ToString()); sach.MoTa = dr.GetValue(3).ToString(); sach.HinhMinhHoa = dr.GetValue(4).ToString(); sach.MaCD = int.Parse( dr.GetValue(5).ToString()); sach.MaNXB = int.Parse( dr.GetValue(6).ToString()); sach.NgayCapNhat = DateTime.Parse( dr.GetValue(7).ToString()); sach.SoLuongBan = int.Parse( dr.GetValue(8).ToString()); sach.SoLanXem = int.Parse( dr.GetValue(9).ToString()); sach.MaTG = int.Parse(dr.GetValue(10).ToString()); sachCollection.Add(sach); } dr.Close(); totalRecords = int.Parse(

P a g e | 33
cm.Parameters["@TotalRecords"].Value.ToString()); return sachCollection; }

2.4.
2.4.1.

XY DNG LP BUSINESS
Phng thc Insert
Phng thc Insert c khai bo l phng thc static. Do chng ta khng

cn phi khi to i tng Bussiness gi phng thc Insert. Nu c cc quy nh nghip v, chng ta cn kim tra d liu trc khi Insert vo c s d liu. Trong v d ny chng ta khng c cc quy nh nghip v nn khng cn kim tra. Khai bo v khi to i tng tbSachDAL, sau gi phng thc Insert thm i tng tbSach vo c s d liu.
public static void Insert(tbSach sach) { tbSachDAL sachDAL = new tbSachDAL(); sachDAL.Insert(sach); }

2.4.2.

Phng thc Update


Phng thc Update c khai bo l phng thc static. Do chng ta khng

cn phi khi to i tng Bussiness gi phng thc Update. Nu c cc quy nh nghip v, chng ta cn kim tra d liu trc khi Update i tng tbProduct trong c s d liu. Trong v d ny chng ta khng c cc quy nh nghip v nn khng cn kim tra. Khai bo v khi to i tng tbSachDAL, sau gi phng thc Update sa i tng tbSach trong c s d liu.
public static void Update(tbSach sach) { tbSachDAL sachDAL = new tbSachDAL(); sachDAL.Update(sach); }

P a g e | 34

2.4.3.

Phng thc Delete


Phng thc Delete c khai bo l phng thc static. Do chng ta khng

cn phi khi to i tng Bussiness gi phng thc Delete. Nu c cc quy nh nghip v, chng ta cn kim tra d liu trc khi Delete i tng tbSach trong c s d liu. Trong v d ny chng ta khng c cc quy nh nghip v nn khng cn kim tra. Khai bo v khi to i tng tbSachDAL, sau gi phng thc Delete xa i tng tbSach trong c s d liu.
public static void Delete(int iD) { tbSachDAL sachDAL = new tbSachDAL(); sachDAL.Delete(iD); }

2.4.4.

Phng thc Get


Phng thc GET c khai bo l phng thc static. Do chng ta khng

cn phi khi to i tng Bussiness gi phng thc GET. Khai bo v khi to i tng tbSachDAL, sau gi phng thc GET v truyn vo cc tham s cn thit ly nhng tbSach trong c s d liu thch hp.
public static tbSachCollection Get(string where, int pageindex, int pagesize, string orderby, string orderdirection, out int total) { tbSachDAL sachDAL = new tbSachDAL(); return sachDAL.Get(where, pageindex, pagesize, orderby, orderdirection, out total); }

2.4.5.

Phng thc GetAll


Trong nhiu trng hp, chng ta c nhu cu ly ht tt c d liu c trong bng

tbSach x l, khi chng ta nh ngha thm mt phng thc GetAll.

P a g e | 35
public static tbSachCollection GetAll() { int total = 0; tbSachDAL sachDAL = new tbSachDAL(); return sachDAL.Get("where 1=1", 0, 0, tbSachColumns.MaSach.ToString(), "ASC", out total); }

2.4.6.

Phng thc GetByID


Phng thc GetByID dng ly i tng c ID trng vi ID truyn vo.

Phng thc ny ch tr v i tng tbSach nu tm thy. Nu khng phng thc ny s tr v null.


public static tbSach GetByID(int iD) { int total = 0; tbSachDAL sachDAL = new tbSachDAL(); tbSachCollection sachCollection = sachDAL.Get("where " + tbSachColumns.MaSach.ToString() + "=" + iD.ToString(), 0, 0, tbSachColumns.MaSach.ToString(), "ASC", out total); if (sachCollection.Count > 0) return sachCollection[0]; return null; }

P a g e | 36

Chng 3.
3.1.
3.1.1.

XY DNG PHN H QUN L

TO TRANG MASTER PAGE


To trang Master Page
Nhp chut phi vo th mc cn to trang Master Page chn mc Add New

Item nh hnh.

Chn loi file cn to l Master Page, t li tn nu cn thit, chn ngn ng l C# v nhp chut vo nt Add to trang Master Page.

P a g e | 37

3.1.2.

Thit k giao din cho trang Master Page


Thit k trang Master Page nh hnh. Giao din gm 3 phn chnh: Menu chc

nng, ContentPlaceHolder dng cho Sub Menu, ContentPlaceHolder hin th ni dung chnh.

3.1.3.
nhp.

Kim tra ng nhp


Nu Session UserName cha c to ra th chng trnh s tr v trang ng

protected void Page_Load(object sender, EventArgs e) {

P a g e | 38 if (Request.Url.ToString().Contains("Default.aspx") == false && Session["UserName"] == null) Response.Redirect("~/Admin/Default.aspx"); }

3.2.
3.2.1.

XY DNG CHC NNG NG NHP


Thit k giao din cho trang ng nhp

<div style="padding:12px 12px 12px 12px;"> <div> <div class="title"> ng nhp </div> <div> <table width="100%" cellspacing="1" cellpadding="3" border="0" bgcolor="#cccccc"> <tr> <td style="width:30%">Ti khon</td> <td style="width:70%"> <asp:TextBox ID="txt_TaiKhoan" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%">Mt khu</td> <td style="width:70%"> <asp:TextBox ID="txt_MatKhau" TextMode="Password" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%"></td> <td style="width:70%"> <asp:Button ID="btn_DangNhap" runat="server" Text="ng nhp" OnClick="btn_DangNhap_Click" /> </td> </tr> <tr> <td style="width:30%"></td>

P a g e | 39 <td style="width:70%"> <asp:Label ID="lb_Error" runat="server" ForeColor="red"></asp:Label> </td> </tr> </table> </div> </div> </div>

3.2.2.

X l ng nhp
Ly danh sch nhn vin c ti khon m ngi dng nhp, nu danh sch tn ti th

chng ta tin hnh xt mt khu ca ngi dng nhp c trng vi mt khu trong c s d liu khng? protected void btn_DangNhap_Click(object sender, EventArgs e) { Criteria cri = new Criteria(); cri.add(Condition.AND, tbNhanVienColumns.TaiKhoan.ToString(), Condition.EQUAL, txt_TaiKhoan.Text); int total = 0; tbNhanVienCollection nhanVienCollection = tbNhanVienBUS.Get( cri.Criter, 0, 0, tbNhanVienColumns.Ma.ToString(), OrderDirection.ASC.ToString(), out total); if (nhanVienCollection.Count > 0) { if (nhanVienCollection[0].MatKhau == txt_MatKhau.Text) { Session["UserName"] = txt_TaiKhoan.Text; Response.Redirect("~/Admin/SachList.aspx"); } else { lb_Error.Text = "Mat khau sai. Vui long dang nhap lai"; } } else { lb_Error.Text = "Tai khoan khong ton tai. Vui long dang nhap lai"; } }

P a g e | 40

3.3.
3.3.1.

XY DNG CHC NNG XEM DANH SCH SN PHM


To trang danh sch sn phm
Chn loi file l Web Form v check vo checkbox Select master page, sau

nhp chut vo nt Add.

Trong hp thoi Select a Master Page, ta chn ng dn n trang Master Page ca trang Web, sau nhp chut vo nt OK.

P a g e | 41

3.3.2.

Thit k giao din

Sub Menu cha lin kt n vi cc trang lin quan khc trong mc Sn phm: Ch , tc gi, nh xut bn, sch.
<asp:Content ID="Content1" ContentPlaceHolderID="menuPlaceHolder" Runat="Server"> <h5>Menu</h5> <ul class="Actions"> <li><a href="ChuDeList.aspx">Danh sch ch </a></li> <li><a href="ChuDeAdd.aspx">Thm mi ch </a></li> </ul> <ul class="Actions">

P a g e | 42
<li> <a href="TacGiaList.aspx">Danh sch tc gi</a> </li> <li><a href="TacGiaAdd.aspx">Thm mi tc gi</a></li> </ul> <ul class="Actions"> <li><a href="NhaXuatBanList.aspx"> Danh sch nh xut bn</a> </li> <li><a href="NhaXuatBanAdd.aspx"> Thm mi nh xut bn</a> </li> </ul> <ul class="Actions"> <li class="Selected"><a href="SachList.aspx"> Danh sch Sch</a> </li> <li><a href="SachAdd.aspx">Thm mi Sch</a></li> </ul> </asp:Content>

Chc nng search sch theo tn sch, ch , nh xut bn, tc gi. Trong tn sch l TextBox, cn li l DropDownList.
<div style="display:table-cell; width:70%;float:left;"> Tn sch: <asp:TextBox ID="txt_TenSach" runat="server"></asp:TextBox> Ch : <asp:DropDownList ID="ddl_ChuDe" CssClass="DropDownList" runat="server"></asp:DropDownList> NXB: <asp:DropDownList ID="ddl_NXB" CssClass="DropDownList" CssClass="DropDownList" Text="Tm kim" /> </div> runat="server"></asp:DropDownList> runat="server"></asp:DropDownList> Tc gi: <asp:DropDownList ID="ddl_TacGia" <asp:Button ID="btn_Search" runat="server"

P a g e | 43 Danh sch Sch s c biu din bng mt Repeater gm c cc ct: M, tn sch, ch , hnh nh, n gi, nh xut bn, tc gi, sa v xa. Trong , ct sa l lin kt n trang chnh sa Sch, ct xa l cc CheckBox ngi dng chn xa.
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <HeaderTemplate> <table cellspacing="1" cellpadding="3" width="100%" bgcolor="#cccccc" border="0"> <thead> <tr class="listtableheader"> <th>M</th> <th>Tn Sch</th> <th>Ch </th> <th>Hnh nh</th> <th>n gi</th> <th>Nh xut bn</th> <th>Tc gi</th> <th>Sa</th> <th><input id="cb_All" type="checkbox" onclick="CheckAll(1);" /> <a href="javascript:CheckAll(2)"> Chn ht</a> </th> </tr> </thead> <tbody> </HeaderTemplate> <ItemTemplate> <tr> <td><asp:Literal ID="lit_Ma" runat="server" /></td> <td><asp:HyperLink ID="hyp_TenSach" runat="server"></asp:HyperLink></td> <td><asp:Literal ID="lit_MaCD" runat="server" /></td> <td> <asp:Image ID="img_HinhAnh" runat="server" /> </td>

P a g e | 44
<td><%#Eval("DonGia") %></td> <td><asp:Literal ID="lit_MaNXB" runat="server" /></td> <td><asp:Literal ID="lit_MaTG" runat="server" /></td> <td><asp:HyperLink ID="hpl_Edit" Text="Edit" runat="server" /></td> <td> <asp:CheckBox ID="cb_Xoa" runat="server" /> <asp:HiddenField ID="hf_id" runat="server" /> </td> </tr> </ItemTemplate> <FooterTemplate> </tbody> </table> </FooterTemplate> </asp:Repeater>

S dng control ASPNetPager phn trang cho danh sch sn phm.


<pagerv2:pagerv2_8 ID="hyperlinkPager" runat="server" ] GenerateFirstLastSection="true" OnCommand="pager_Command" GeneratePagerInfoSection="false" GenerateSmartShortCuts="false" GenerateHiddenHyperlinks="false" NormalModePageCount="5" />

3.3.3.

X l Page Load
Hm Page_Load dng ti cc d liu ban u ln cho trang Web. u tin ta ti

d liu cho tt c cc DropDownList, v sau ti d liu cho repeater


protected void Page_Load(object sender, EventArgs e) { if (!IsPostback) { LoadDropDownList(); LoadData(); } } private void LoadDropDownList() {

P a g e | 45
ddl_ChuDe.DataSource = tbChuDeBUS.GetAll(); ddl_ChuDe.DataTextField = tbChuDeColumns.TenChuDe.ToString(); ddl_ChuDe.DataValueField = tbChuDeColumns.MaCD.ToString(); ddl_ChuDe.DataBind(); ddl_ChuDe.Items.Insert(0,new ListItem("All","0")); ddl_NXB.DataSource = tbNhaXuatBanBUS.GetAll(); ddl_NXB.DataTextField = tbNhaXuatBanColumns.TenNXB.ToString(); ddl_NXB.DataValueField = tbNhaXuatBanColumns.MaNXB.ToString(); ddl_NXB.DataBind(); ddl_NXB.Items.Insert(0,new ListItem("All", "0")); ddl_TacGia.DataSource = tbTacGiaBUS.GetAll(); ddl_TacGia.DataTextField = tbTacGiaColumns.Ten.ToString(); ddl_TacGia.DataValueField = tbTacGiaColumns.MaTG.ToString(); ddl_TacGia.DataBind(); ddl_TacGia.Items.Insert(0, new ListItem("All", "0")); } private void LoadData() { Criteria cri = new Criteria(); int total = 0; if (txt_TenSach.Text != "") cri.add(Condition.AND, tbSachColumns.TenSach.ToString(), Condition.LIKE, txt_TenSach.Text); if(ddl_ChuDe.SelectedValue != "0") cri.add(Condition.AND, tbSachColumns.MaCD.ToString(), Condition.EQUAL, int.Parse(ddl_ChuDe.SelectedValue)); if (ddl_NXB.SelectedValue != "0") cri.add(Condition.AND, tbSachColumns.MaNXB.ToString(), Condition.EQUAL, int.Parse(ddl_NXB.SelectedValue)); if (ddl_TacGia.SelectedValue != "0") cri.add(Condition.AND, tbSachColumns.MaTG.ToString(), Condition.EQUAL, int.Parse(ddl_TacGia.SelectedValue));

P a g e | 46
hyperlinkPager.PageSize = int.Parse(ConfigurationManager.AppSettings["pagesize"].ToString()); tbSachCollection sachCollection = tbSachBUS.Get(cri.Criter, hyperlinkPager.CurrentIndex, hyperlinkPager.PageSize, tbSachColumns.MaSach.ToString(), OrderDirection.ASC.ToString(), out total); Repeater1.DataSource = sachCollection; Repeater1.DataBind(); hyperlinkPager.ItemCount = total; if (total <= hyperlinkPager.PageSize) hyperlinkPager.Visible = false; } protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HyperLink hyp_TenSach = (HyperLink)e.Item.FindControl("hyp_TenSach"); HyperLink hpl_Edit = (HyperLink)e.Item.FindControl("hpl_Edit"); Literal lit_Ma = (Literal)e.Item.FindControl("lit_Ma"); HiddenField hf_id = (HiddenField)e.Item.FindControl("hf_id"); Literal lit_MaCD = (Literal)e.Item.FindControl("lit_MaCD"); Literal lit_MaNXB = (Literal)e.Item.FindControl("lit_MaNXB"); Literal lit_MaTG = (Literal)e.Item.FindControl("lit_MaTG"); Image img_HinhAnh = (Image)e.Item.FindControl("img_HinhAnh"); tbSach sach = (tbSach)e.Item.DataItem; tbChuDe chuDe = tbChuDeBUS.GetByID(sach.MaCD);

P a g e | 47
if(chuDe != null) lit_MaCD.Text = chuDe.TenChuDe; tbNhaXuatBan nhaXuatBan = tbNhaXuatBanBUS.GetByID(sach.MaNXB); if (nhaXuatBan != null) lit_MaNXB.Text = nhaXuatBan.TenNXB; tbTacGia tacGia = tbTacGiaBUS.GetByID(sach.MaTG); if (tacGia != null) lit_MaTG.Text = tacGia.Ten; img_HinhAnh.ImageUrl = "~/Photos/Thumb/" + sach.HinhMinhHoa; lit_Ma.Text = sach.MaSach.ToString(); hyp_TenSach.NavigateUrl = "SachDetail.aspx?id=" + sach.MaSach.ToString(); hpl_Edit.NavigateUrl = "SachEdit.aspx?id=" + sach.MaSach.ToString(); hf_id.Value = sach.MaSach.ToString(); hyp_TenSach.Text = sach.TenSach.ToString(); } }

3.3.4.

X l chc nng phn trang


phn trang ta s dng control AspNetPager min ph. Sau khi thit k giao din

phn trc ta nh ngha thm hm Command nh sau:


protected void pager_Command(object sender, CommandEventArgs e) { hyperlinkPager.CurrentIndex = Convert.ToInt32(e.CommandArgument); LoadData(); }

P a g e | 48

3.3.5.

Chc nng xa
xa Sch, ta duyt qua tt c cc row trong repeater. Nu dng no c check

th ta tin hnh xa dng ra khi c s d liu


protected void lbt_Delete_Click(object sender, EventArgs e) { foreach (RepeaterItem item in this.Repeater1.Items) { CheckBox chk = (CheckBox)item.FindControl("cb_Xoa"); if (chk.Checked == true) { HiddenField hf_id = (HiddenField)item.FindControl("hf_id"); tbSachBUS.Delete(int.Parse(hf_id.Value)); } } LoadData(); }

3.3.6.

Chc nng tm kim


Chng ta thit k hm ti d liu thch hp cho vic tm kim, v th khi ngi

dng nhp chut vo nt tm kim chng ta ch vic gi li lm ti d liu.


protected void btn_Search_Click(object sender, EventArgs e) { LoadData(); }

3.4.
3.4.1.

XY DNG CHC NNG THM SN PHM


Thit k giao din cho trang thm sn phm
Ta to cc control tng ng cho tng trng d liu trong c s d liu.

P a g e | 49

<div> <div class="title"> Thm mi sch </div> <div> <table width="100%" cellspacing="1" cellpadding="3" border="0" bgcolor="#cccccc"> <tr> <td style="width:30%">Tn Sch</td> <td style="width:70%"><asp:TextBox ID="txt_TenSach" runat="server"></asp:TextBox></td> </tr> <tr> <td style="width:30%">Ch </td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_ChuDe" runat="server"> </asp:DropDownList></td> </tr> <tr> <td style="width:30%">Tc gi</td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_TacGia" runat="server"> </asp:DropDownList> </td> </tr> <tr> <td style="width:30%">Nh xut bn</td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_NhaXuatBan" runat="server"> </asp:DropDownList> </td> </tr> <tr> <td style="width:30%">Hnh minh ha</td> <td style="width:70%">

P a g e | 50
<asp:FileUpload ID="fu_HinhMinhHoa" runat="server" /> </td> </tr> <tr> <td style="width:30%">n gi</td> <td style="width:70%"> <asp:TextBox ID="txt_DonGia" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%">M t</td> <td style="width:70%"> <asp:TextBox ID="txt_MoTa" CssClass="TextBoxSearch" TextMode="MultiLine" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%"></td> <td style="width:70%"><asp:Button ID="btn_Add" runat="server" Text="Thm mi sch" OnClick="btn_Add_Click" /></td> </tr> </table> </div> </div>

3.4.2.

X l ti d liu
Ti d liu t c s d liu vo cc DropDownList.

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) LoadData(); } private void LoadData() { ddl_ChuDe.DataSource = tbChuDeBUS.GetAll(); ddl_ChuDe.DataTextField = tbChuDeColumns.TenChuDe.ToString(); ddl_ChuDe.DataValueField = tbChuDeColumns.MaCD.ToString(); ddl_ChuDe.DataBind(); ddl_TacGia.DataSource = tbTacGiaBUS.GetAll(); ddl_TacGia.DataTextField = tbTacGiaColumns.Ten.ToString(); ddl_TacGia.DataValueField = tbTacGiaColumns.MaTG.ToString();

P a g e | 51
ddl_TacGia.DataBind(); ddl_NhaXuatBan.DataSource = tbNhaXuatBanBUS.GetAll(); ddl_NhaXuatBan.DataTextField = tbNhaXuatBanColumns.TenNXB.ToString(); ddl_NhaXuatBan.DataValueField = tbNhaXuatBanColumns.MaNXB.ToString(); ddl_NhaXuatBan.DataBind(); }

3.4.3.

X l thm sn phm
Khi ngi dng hon tt vic nhp d liu vo cc TextBox v nhn vo nt thm,

chng trnh s tin hnh cc bc thm sn phm ny vo c s d liu.


protected void btn_Add_Click(object sender, EventArgs e) { tbSach sach = new tbSach(); sach.TenSach = txt_TenSach.Text; sach.MaCD = int.Parse(ddl_ChuDe.SelectedValue); sach.MaTG = int.Parse(ddl_TacGia.SelectedValue); sach.MaNXB = int.Parse(ddl_NhaXuatBan.SelectedValue); sach.DonGia = int.Parse(txt_DonGia.Text); sach.MoTa = txt_MoTa.Text; if (fu_HinhMinhHoa.HasFile) { string filename = DateTime.Now.Ticks.ToString() + "_" + fu_HinhMinhHoa.PostedFile.FileName; fu_HinhMinhHoa.PostedFile.SaveAs(Server.MapPath("~/Photos/") + filename); System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("~/Photos/") + filename); ImageUtility.MakeThumbnailPhoto(img, 100, 100, Server.MapPath("~/Photos/Thumb/"), filename);

P a g e | 52
sach.HinhMinhHoa = filename; } else { sach.HinhMinhHoa = ConfigurationManager.AppSettings["NoImage"]; } tbSachBUS.Insert(sach); Response.Redirect("~/Admin/SachList.aspx"); }

3.5.
3.5.1.

XY DNG CHC NNG CHNH SA SN PHM


Thit k giao din cho trang chnh sa sn phm
To giao din tng ng cho tng trng d liu ca sn phm. c bit i vi M

sch chng trnh ch hin th m khng cho php sa i.

<div> <div class="title"> Update sch </div> <div> <table width="100%" cellspacing="1" cellpadding="3" border="0" bgcolor="#cccccc"> <tr>

P a g e | 53
<td style="width:30%">M Sch</td> <td style="width:70%"><asp:TextBox Enabled="false" ID="txt_MaSach" runat="server"></asp:TextBox></td> </tr> <tr> <td style="width:30%">Tn Sch</td> <td style="width:70%"><asp:TextBox ID="txt_TenSach" runat="server"></asp:TextBox></td> </tr> <tr> <td style="width:30%">Ch </td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_ChuDe" runat="server"> </asp:DropDownList></td> </tr> <tr> <td style="width:30%">Tc gi</td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_TacGia" runat="server"> </asp:DropDownList> </td> </tr> <tr> <td style="width:30%">Nh xut bn</td> <td style="width:70%"> <asp:DropDownList CssClass="DropDownList" ID="ddl_NhaXuatBan" runat="server"> </asp:DropDownList> </td> </tr> <tr> <td style="width:30%">Hnh minh ha</td> <td style="width:70%"> <asp:Image ID="img_HinhMinhHoa" runat="server" />

P a g e | 54
</td> </tr> <tr> <td style="width:30%"></td> <td style="width:70%"> <asp:FileUpload ID="fu_HinhMinhHoa" runat="server" /> </td> </tr> <tr> <td style="width:30%">n gi</td> <td style="width:70%"> <asp:TextBox ID="txt_DonGia" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%">M t</td> <td style="width:70%"> <asp:TextBox ID="txt_MoTa" CssClass="TextBoxSearch" TextMode="MultiLine" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="width:30%"></td> <td style="width:70%"><asp:Button ID="btn_Update" runat="server" Text="Update Sch" OnClick="btn_Update_Click" /></td> </tr> </table> </div> </div>

P a g e | 55

3.5.2.

X l Page Load
Ti d liu cho tt c cc DropDownList c trong trang chnh sa sn phm. Ly

m ca sn phm cn chnh sa thng tin thng qua i tng Request, sau chng trnh ly thng tin ca sn phm in vo cc control.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) LoadData(); } private void LoadData() { ddl_ChuDe.DataSource = tbChuDeBUS.GetAll(); ddl_ChuDe.DataTextField = tbChuDeColumns.TenChuDe.ToString(); ddl_ChuDe.DataValueField = tbChuDeColumns.MaCD.ToString(); ddl_ChuDe.DataBind(); ddl_TacGia.DataSource = tbTacGiaBUS.GetAll(); ddl_TacGia.DataTextField = tbTacGiaColumns.Ten.ToString(); ddl_TacGia.DataValueField = tbTacGiaColumns.MaTG.ToString(); ddl_TacGia.DataBind(); ddl_NhaXuatBan.DataSource = tbNhaXuatBanBUS.GetAll(); ddl_NhaXuatBan.DataTextField = tbNhaXuatBanColumns.TenNXB.ToString(); ddl_NhaXuatBan.DataValueField = tbNhaXuatBanColumns.MaNXB.ToString(); ddl_NhaXuatBan.DataBind(); try { int id = int.Parse(Request.QueryString["id"].ToString()); tbSach sach = tbSachBUS.GetByID(id); if (sach != null) { txt_DonGia.Text = sach.DonGia.ToString(); txt_MaSach.Text = sach.MaSach.ToString();

P a g e | 56
txt_MoTa.Text = sach.MoTa; txt_TenSach.Text = sach.TenSach; ddl_ChuDe.SelectedValue = sach.MaCD.ToString(); ddl_NhaXuatBan.SelectedValue = sach.MaNXB.ToString(); ddl_TacGia.SelectedValue = sach.MaTG.ToString(); img_HinhMinhHoa.ImageUrl = "~/Photos/Thumb/" + sach.HinhMinhHoa; } } catch{ Response.Redirect("~/Admin/SachList.aspx"); } }

3.5.3.

X l chnh sa sn phm
Khi ngi dng hon tt vic chnh sa v nhp chut vo nt sa sn phm,

chng trnh s tin hnh lu cc thng tin ca ngi dng thay i vo c s d liu.
protected void btn_Update_Click(object sender, EventArgs e) { try { tbSach sach = new tbSach(); sach.MaSach = int.Parse(txt_MaSach.Text); sach.TenSach = txt_TenSach.Text; sach.DonGia = int.Parse(txt_DonGia.Text); sach.MoTa = txt_MoTa.Text; sach.MaCD = int.Parse(ddl_ChuDe.SelectedValue); sach.MaNXB = int.Parse(ddl_NhaXuatBan.SelectedValue); sach.MaTG = int.Parse(ddl_TacGia.SelectedValue); if (fu_HinhMinhHoa.HasFile) { File.Delete(Server.MapPath("~/Photos/") + sach.HinhMinhHoa); File.Delete(Server.MapPath("~/Photos/Thumb/") + sach.HinhMinhHoa);

P a g e | 57
string filename = DateTime.Now.Ticks.ToString() + "_" + fu_HinhMinhHoa.PostedFile.FileName; fu_HinhMinhHoa.PostedFile.SaveAs(Server.MapPath("~/Photos/") + filename); System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("~/Photos/") + filename); ImageUtility.MakeThumbnailPhoto(img, 100, 100, Server.MapPath("~/Photos/Thumb/"), filename); sach.HinhMinhHoa = filename; } else { sach.HinhMinhHoa = ConfigurationManager.AppSettings["NoImage"]; } tbSachBUS.Update(sach); } catch { Response.Redirect("~/Admin/SachList.aspx"); } }

3.6.
3.6.1.

XY DNG CHC NNG XEM DANH SCH N HNG


Thit k giao din
Danh sch ca n hng c hin th bng mt repeater vi cc ct l: M n

hng, Khch hng, ngy t hng, ngy giao hng, tr gi, giao. Trong m n hng l mt lin kt chuyn n trang chi tit n hng . S dng control ASPNetPager phn trang cho danh sch n hng.

P a g e | 58

<div> <div class="title"> Danh sch n hng </div> <div class="addnewrow"> </div> <div> <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <HeaderTemplate> <table cellspacing="1" cellpadding="3" width="100%" bgcolor="#cccccc" border="0"> <thead> <tr class="listtableheader"> <th>M n hng</th> <th>Khch hng</th> <th>Ngy t hng</th> <th>Ngy giao hng</th> <th>Tr gi</th> <th> giao</th> </tr> </thead> <tbody> </HeaderTemplate> <ItemTemplate> <tr> <td> <asp:HyperLink ID="hyp_DonHang" runat="server" /> </td>

P a g e | 59
<td> <asp:Literal ID="lit_KhachHang" runat="server"></asp:Literal> </td> <td><%#Eval("NgayDatHang") %></td> <td><%#Eval("NgayGiaoHang") %></td> <td><%#Eval("TriGia") %></td> <td><%#Eval("DaGiao") %></td> </tr> </ItemTemplate> <FooterTemplate> </tbody> </table> </FooterTemplate> </asp:Repeater> </div> <div style="width:100%;"> <div style="float:left;"> <pagerv2:pagerv2_8 ID="hyperlinkPager" runat="server" CompactModePageCount="5" GenerateFirstLastSection="true" GeneratePagerInfoSection="false" GenerateSmartShortCuts="false" GenerateHiddenHyperlinks="false" NormalModePageCount="5" OnCommand="hyperlinkPager_Command" </div> </div> </div> />

3.6.2.

X l ti d liu
Chng trnh ti d liu bng cch gn danh sch n hng cho thuc tnh

DataSource ca Repeater.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)

P a g e | 60
{ LoadData(); } } private void LoadData() { int total = 0; Criteria cri = new Criteria(); hyperlinkPager.PageSize = int.Parse(ConfigurationManager.AppSettings["pagesize"]); Repeater1.DataSource = tbDonHangBUS.Get(cri.Criter,hyperlinkPager.CurrentIndex, hyperlinkPager.PageSize, tbDonHangColumns.MaDH.ToString(), OrderDirection.ASC.ToString(), out total); Repeater1.DataBind(); hyperlinkPager.ItemCount = total; if(hyperlinkPager.ItemCount <= hyperlinkPager.PageSize) hyperlinkPager.Visible = false; else hyperlinkPager.Visible = true; } protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { tbDonHang donHang = (tbDonHang)e.Item.DataItem; tbKhachHang khachHang = tbKhachHangBUS.GetByID(donHang.MaKH); if (khachHang != null) { Literal lit_KhachHang = (Literal)e.Item.FindControl("lit_KhachHang"); lit_KhachHang.Text = khachHang.HoTen; }

P a g e | 61
HyperLink hyp_DonHang = (HyperLink)e.Item.FindControl("hyp_DonHang"); hyp_DonHang.Text = donHang.MaDH.ToString(); hyp_DonHang.NavigateUrl = "~/Admin/CTDonHang.aspx?id=" + donHang.MaDH.ToString(); } }

3.6.3.

X l phn trang
Khi ngi dng chuyn trang ta ch cn cp nht li thuc tnh CurrentIndex ca

control Pager v tin hnh ti li d liu cho trang web.


protected void hyperlinkPager_Command(object sender, CommandEventArgs e) { hyperlinkPager.CurrentIndex = int.Parse(e.CommandArgument.ToString()); LoadData(); }

3.7.
3.7.1.

XY DNG CHC NNG XEM CHI TIT N HNG


Thit k giao din
Giao din ca trang chi tit n hng l cc chi tit ca n hng v mt danh

sch cc hng ha ca n hng . Danh sch hng ha c biu din bng mt repeater cha cc ct: tn sch, s lng, n gi, thnh tin.

P a g e | 62

<div> <div class="title"> Chi tit n hng </div> <div> <table width="100%" cellspacing="1" cellpadding="3" border="0" bgcolor="#cccccc"> <tr> <td style="width:30%">M n hng</td> <td style="width:70%"> <asp:Literal ID="lit_MaDonHang" runat="server"></asp:Literal> </td> </tr> <tr> <td style="width:30%">Khch hng</td> <td style="width:70%"> <asp:Literal ID="lit_KhachHang" runat="server"></asp:Literal> </td> </tr> <tr> <td style="width:30%">Ngy t hng</td> <td style="width:70%">

P a g e | 63
<asp:Literal ID="lit_NgayDatHang" runat="server"></asp:Literal> </td> </tr> <tr> <td style="width:30%">Ngy giao hng</td> <td style="width:70%"> <asp:Literal ID="lit_NgayGiaoHang" runat="server"></asp:Literal> </td> </tr> <tr> <td style="width:30%">Tr gi</td> <td style="width:70%"> <asp:Literal ID="lit_TriGia" runat="server"></asp:Literal> </td> </tr> <tr> <td style="width:30%"> giao hng</td> <td style="width:70%"> <asp:Literal ID="lit_DaGiaoHang" runat="server"></asp:Literal> </td> </tr> </table> </div>

<div style="padding-top:10px;"> <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <HeaderTemplate> <table cellspacing="1" cellpadding="3" width="100%" bgcolor="#cccccc" border="0"> <thead> <tr class="listtableheader">

P a g e | 64
<th>Sch</th> <th>S lng</th> <th>n gi</th> <th>Thnh tin</th> </tr> </thead> <tbody> </HeaderTemplate> <ItemTemplate> <tr> <td> <asp:Literal ID="lit_TenSach" runat="server"></asp:Literal></td> <td><%#Eval("SoLuong") %></td> <td><%#Eval("DonGia") %></td> <td> <asp:Literal ID="lit_ThanhTien" runat="server"></asp:Literal></td> </tr> </ItemTemplate> <FooterTemplate> </tbody> </table> </FooterTemplate> </asp:Repeater> </div> <div style="width:100%;"> <div style="float:left;"> <pagerv2:pagerv2_8 ID="hyperlinkPager" runat="server" CompactModePageCount="5" GenerateFirstLastSection="true" GeneratePagerInfoSection="false" GenerateSmartShortCuts="false" GenerateHiddenHyperlinks="false" NormalModePageCount="5" OnCommand="hyperlinkPager_Command" </div> </div> />

P a g e | 65
</div>

3.7.2.

X l ti d liu
Chng trnh ly m ca n hng cn xem chi tit thng qua i tng Request,

sau chng trnh tin hnh ly cc thng tin ca n hng in vo cc controls.


protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadData(); } } private void LoadData() { try { int id = int.Parse(Request.QueryString["id"].ToString()); tbDonHang donHang = tbDonHangBUS.GetByID(id); lit_MaDonHang.Text = donHang.MaDH.ToString(); tbKhachHang khachHang = tbKhachHangBUS.GetByID(donHang.MaKH); lit_KhachHang.Text = khachHang.HoTen; lit_NgayDatHang.Text = donHang.NgayDatHang.ToString(); lit_NgayGiaoHang.Text = donHang.NgayGiaoHang.ToString(); lit_TriGia.Text = donHang.TriGia.ToString(); lit_DaGiaoHang.Text = donHang.DaGiao.ToString(); int total = 0; Criteria cri = new Criteria(); cri.add(Condition.AND, tbCTDonHangColumns.MaDH, Condition.EQUAL, donHang.MaDH); hyperlinkPager.PageSize = int.Parse(ConfigurationManager.AppSettings["pagesize"]); tbCTDonHangCollection cTDonHangCollection =

P a g e | 66
tbCTDonHangBUS.Get(cri.Criter, hyperlinkPager.CurrentIndex, hyperlinkPager.PageSize, tbCTDonHangColumns.MaCTDonHang.ToString(), OrderDirection.ASC.ToString(), out total); Repeater1.DataSource = cTDonHangCollection; Repeater1.DataBind(); hyperlinkPager.ItemCount = total; if (hyperlinkPager.ItemCount <= hyperlinkPager.PageSize) hyperlinkPager.Visible = false; else hyperlinkPager.Visible = true; } catch { Response.Redirect("~/Admin/DonHangList.aspx"); } } protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { tbCTDonHang cTDonHang = (tbCTDonHang)e.Item.DataItem; tbSach sach = tbSachBUS.GetByID(cTDonHang.MaSach); if (sach != null) { Literal lit_TenSach = (Literal)e.Item.FindControl("lit_TenSach"); lit_TenSach.Text = sach.TenSach; } Literal lit_ThanhTien = (Literal)e.Item.FindControl("lit_ThanhTien"); int tongTien = cTDonHang.SoLuong * cTDonHang.DonGia; lit_ThanhTien.Text = tongTien.ToString(); }

P a g e | 67
}

3.7.3.

X l phn trang
Khi ngi dng cn chuyn trang, chng trnh ch cn cp nht li thuc tnh

CurrentIndex ca control pager, sau gi phng thc LoadData.


protected void hyperlinkPager_Command(object sender, CommandEventArgs e) { hyperlinkPager.CurrentIndex = int.Parse(e.CommandArgument.ToString()); LoadData(); }

P a g e | 68

Chng 4.
4.1.1. 4.1.2.
4.1.2.1.

XY DNG PHN H NGI DNG

TO TRANG MASTER PAGE Thit k giao din


Thit k phn u trang Web Phn u trang web bao gm logo v menu. Khi ngi dng di chuyn vo trang

web no th menu ca trang y chuyn sang mu sc khc.

<div class="header"> <div class="logo"><a href="Default.aspx"><img src="images/logo.gif" alt="" title="" border="0" /></a></div> <div id="menu"> <ul> <% if ((MainMenu)Session["Page"] == MainMenu.Default) {%> <li class="selected"><a href="Default.aspx">Trang ch</a></li> <% } else { %> <li><a href="Default.aspx">Trang ch</a></li> <% } %> <% if ((MainMenu)Session["Page"] == MainMenu.About) {%> <li class="selected"><a href="About.aspx">Gii thiu</a></li> <%} else { %> <li><a href="About.aspx">Gii thiu</a></li> <%} %> <% if ((MainMenu)Session["Page"] == MainMenu.MyAccount && Session["KhachHang"] == null) {%> <li class="selected"><a href="Login.aspx">ng nhp</a></li> <% } else if (Session["KhachHang"] == null) { %> <li><a href="Login.aspx">ng nhp</a></li> <%} else {

P a g e | 69 %> <li><a href="Login.aspx">Ti khon</a></li> <%} %> <% if ((MainMenu)Session["Page"] == MainMenu.Register && Session["KhachHang"] == null) {%> <li class="selected"><a href="Register.aspx">ng k</a></li> <% } else if(Session["KhachHang"] == null) { %> <li><a href="Register.aspx">ng k</a></li> <%} %> <% if ((MainMenu)Session["Page"] == MainMenu.Contact) {%> <li class="selected"><a href="Contact.aspx">Lin h</a></li> <% } else { %> <li><a href="Contact.aspx">Lin h</a></li> <%} %> <%if(Session["KhachHang"] != null) { %> <li> <asp:LinkButton ID="lbt_Thoat" runat="server" OnClick="lbt_Thoat_Click">Thot</asp:LinkButton> </li> <%} %> </ul> </div> </div> 4.1.2.2. Thit k phn thng tin gi hng Phn thng tin gi hng bao gm: s lng sn phm, tng s tin v mt lin kt n trang chi tit gi hng.

<div class="cart"> <div class="title"><span class="title_icon"> <img src="images/cart.gif" alt="" title="" /></span>Gi hng</div> <div class="home_cart_content"> <asp:Literal ID="lit_Quantity" runat="server"></asp:Literal> x sp | <span class="red">TNG: <asp:Literal ID="lit_Total" runat="server"></asp:Literal> VN </span>

P a g e | 70 </div> <a href="Cart.aspx" class="view_cart">Xem</a> </div> 4.1.2.3. Thit k phn danh sch ch v sn phm c bit Phn danh sch ch bao gm cc lin kt n trang danh sch sn phm theo tng ch . Phn sn phm c bit gm hnh nh v tn ca cc sn phm c bit do nhn vin ca ca hng quy nh.

P a g e | 71 <div class="right_box"> <div class="title"><span class="title_icon"><img src="images/bullet5.gif" alt="" title="" /> </span>Ch </div> <asp:Repeater ID="rep_Category" runat="server"> <HeaderTemplate> <ul class="list"> </HeaderTemplate> <ItemTemplate> <li><a href="Category.aspx?id=<%#Eval("MaCD") %>"><%#Eval("TenChuDe") %></a></li> </ItemTemplate> <FooterTemplate> </ul> </FooterTemplate> </asp:Repeater> </div> <div class="right_box"> <div class="title"><span class="title_icon"> <img src="images/bullet4.gif" alt="" title="" /></span>t bit</div> <asp:Repeater ID="rep_Promotion" runat="server"> <ItemTemplate> <div class="new_prod_box"> <a href="Detail.aspx?id=<%#Eval("MaSach") %>"> <%#Eval("TenSach") %> </a> <div class="new_prod_bg"> <span class="new_icon"> <img src="images/special_icon.gif" alt="" title="" /> </span> <a href="Detail.aspx?id=<%#Eval("MaSach") %>"> <img src="Photos/Thumb/<%#Eval("HinhMinhHoa") %>" alt="" title="" class="thumb" border="0" /> </a> </div> </div> </ItemTemplate> </asp:Repeater> </div>

P a g e | 72 4.1.2.4. Thit k phn cui trang Web Phn cui trang web gm cc lin kt n mt s trang web.

<div class="footer"> <div class="left_footer"><img src="images/footer_logo.gif" alt="" title="" /></div> <div class="right_footer"> <a href="Default.aspx">Trang ch</a> <a href="About.aspx">Gii thiu</a> <a href="Contact.aspx">Lin h</a> </div> </div>

4.1.3.

X l ti d liu
Ly thng tin gi hng thng qua bin Session, sau in cc thng tin: s lng

sn phm, tng s tin vo cc control thit k. Chng trnh tin hnh ti danh sch ch v danh sch sn phm c bit gn vo thuc tnh DataSource ca cc Repeater tng ng. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadData(); } } private void LoadData() { ShoppingCart c = (ShoppingCart)Session["Cart"]; lit_Quantity.Text = c.ItemCollection.Count.ToString(); lit_Total.Text = c.Total().ToString(); rep_Category.DataSource = tbChuDeBUS.GetAll(); rep_Category.DataBind(); rep_Promotion.DataSource = tbSachBUS.GetPromotion(3); rep_Promotion.DataBind(); }

P a g e | 73

4.1.4.

X l thot khi h thng


Khi ngi dng nhp chut vo link thot khi h thng, chng trnh tin hnh gn

cho bin session bng null. protected void lbt_Thoat_Click(object sender, EventArgs e) { Session["KhachHang"] = null; Response.Redirect(Request.RawUrl); }

4.2.
4.2.1.

XY DNG TRANG CH
Thit k giao din
Giao din trang ch gm mt s sn phm mi nht cng cc thng tin c bn ca

n: hnh nh, tn sn phm, m t ngn v lin kt n trang chi tit sn phm.

P a g e | 74 <div class="title"><span class="title_icon"> <img src="images/bullet2.gif" alt="" title="" /></span>Sch mi</div> <asp:Repeater ID="rep_BookList" runat="server" OnItemDataBound="rep_BookList_ItemDataBound"> <ItemTemplate> <div class="feat_prod_box"> <div class="prod_img"> <a href="Detail.aspx?id=<%#Eval("MaSach") %>"> <img src="Photos/Thumb/<%#Eval("HinhMinhHoa") %>" alt="" title="" border="0" /> </a> </div> <div class="prod_det_box"> <div class="box_top"></div> <div class="box_center"> <div class="prod_title"><%#Eval("TenSach") %></div> <p class="details"> <asp:Literal ID="lit_Description" runat="server"></asp:Literal> </p> <a href="Detail.aspx?id=<%#Eval("MaSach") %>" class="more">- xem chi tit -</a> <div class="clear"></div></div> <div class="box_bottom"></div> </div> <div class="clear"></div> </div> </ItemTemplate> </asp:Repeater>

4.2.2.

X l ti d liu
Chng trnh ti danh sch sn phm v gn vo thuc tnh DataSource ca

Repeater. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.Default; if (!IsPostBack) { LoadData(); } } private void LoadData()

P a g e | 75 { rep_BookList.DataSource = tbSachBUS.GetLimited(6); rep_BookList.DataBind(); } protected void rep_BookList_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { tbSach sach = (tbSach)e.Item.DataItem; Literal lit_Description = (Literal)e.Item.FindControl("lit_Description"); lit_Description.Text = sach.MoTa.Substring(0, 100) + "..."; } }

4.3.
4.3.1.

XY DNG TRANG DANH SCH SN PHM THEO CH


Thit k giao din
Danh sch sn phm gm: tn sn phm v hnh nh ca sn phm.

<div class="crumb_nav"> <a href="Default.aspx">Trang ch</a> &gt;&gt; <asp:Literal ID="lit_CategoryNameLink" runat="server"></asp:Literal> </div> <div class="title"><span class="title_icon"><img src="images/bullet1.gif" alt="" title="" /></span> <asp:Literal ID="lit_CategoryName" runat="server"></asp:Literal></div>

P a g e | 76

<asp:Repeater ID="rep_ChuDe" runat="server" OnItemDataBound="rep_ChuDe_ItemDataBound"> <HeaderTemplate> <div class="new_products"> </HeaderTemplate> <ItemTemplate> <div class="new_prod_box"> <a href="Detail.aspx"> <asp:Literal ID="lit_TenSach" runat="server"></asp:Literal> </a> <div class="new_prod_bg"> <a href="Detail.aspx?id=<%#Eval("MaSach") %>"> <img src="Photos/Thumb/<%#Eval("HinhMinhHoa") %>" alt="<%#Eval("TenSach") %>" title="" class="thumb" border="0" /> </a> </div> </div> </ItemTemplate> </asp:Repeater> <div class="pagination"> <PagerV2:PagerV2_8 ID="PagerV2_8_1" runat="server" GeneratePagerInfoSection="False" GenerateSmartShortCuts="True" OnCommand="PagerV2_8_1_Command" /> </div> </div> <div class="clear"></div>

4.3.2.

X l ti d liu
Ti danh sch sn phm v gn vo thuc tnh DataSource ca Repeater danh sch

sn phm. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.Category; if (!IsPostBack) { LoadData(); } } private void LoadData() { try {

P a g e | 77 tbChuDe chuDe = tbChuDeBUS.GetByID(int.Parse(Request.QueryString["id"])); lit_CategoryName.Text = chuDe.TenChuDe; lit_CategoryNameLink.Text = chuDe.TenChuDe; int total = 0; PagerV2_8_1.PageSize = 12; Criteria cri = new Criteria(); cri.add(Condition.AND, tbSachColumns.MaCD.ToString(), Condition.EQUAL, int.Parse(Request.QueryString["id"])); rep_ChuDe.DataSource = tbSachBUS.Get(cri.Criter, PagerV2_8_1.CurrentIndex, PagerV2_8_1.PageSize, tbSachColumns.MaSach.ToString(), OrderDirection.ASC.ToString(), out total); rep_ChuDe.DataBind(); PagerV2_8_1.ItemCount = total; if (total <= PagerV2_8_1.PageSize) PagerV2_8_1.Visible = false; else PagerV2_8_1.Visible = true; } catch { Response.Redirect("~/Default.aspx"); } } protected void rep_ChuDe_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { tbSach sach = (tbSach)e.Item.DataItem; Literal lit_TenSach = (Literal)e.Item.FindControl("lit_TenSach"); if(sach.TenSach.Length > 16) lit_TenSach.Text = sach.TenSach.Substring(0, 16) + "..."; else lit_TenSach.Text = sach.TenSach; } }

4.3.3.

Phn trang
Khi ngi dng mun chuyn trang, chng trnh tin hnh cp nht li thuc tnh

CurrentIndex ca control pager, sau gi li phng thc LoadData. protected void PagerV2_8_1_Command(object sender, CommandEventArgs e)

P a g e | 78 { PagerV2_8_1.CurrentIndex = int.Parse(e.CommandArgument.ToString()); LoadData(); }

4.4.
4.4.1.

XY DNG TRANG CHI TIT SN PHM


Thit k giao din
Giao din ca trang chi tit sn phm bao gm: hnh nh (c th phng ln nh bng

cch click chut vo nt zoom), tn sn phm, gi, m t ca sn phm, nt thm sn phm vo gi hng v mt danh sch cc sn phm lin quan.

P a g e | 79 <script src="js/prototype.js" type="text/javascript"></script> <script src="js/scriptaculous.js?load=effects" type="text/javascript"></script> <script src="js/lightbox.js" type="text/javascript"></script> <script type="text/javascript" src="js/java.js"></script> <div class="crumb_nav"> <a href="Default.aspx">Trang ch</a> &gt;&gt; <asp:Literal ID="lit_LinkSach" runat="server"></asp:Literal> </div> <div class="title"><span class="title_icon"> <img src="images/bullet1.gif" alt="" title="" /></span> <asp:Literal ID="lit_ProductName" runat="server"></asp:Literal> </div> <div class="feat_prod_box_details"> <div class="prod_img"> <img alt="" id="img_Image" runat="server" title="" border="0" /> <br /><br /> <a id="a_Image" runat="server" rel="lightbox"> <img src="images/zoom.gif" alt="" title="" border="0" /></a> </div> <div class="prod_det_box"> <div class="box_top"></div> <div class="box_center"> <div class="prod_title">Chi tit</div> <p class="details"> <asp:Literal ID="lit_MoTaNgan" runat="server"></asp:Literal></p> <div class="price"><strong>GI:</strong> <span class="red"> <asp:Literal ID="lit_Price" runat="server"></asp:Literal> VN</span></div> <asp:LinkButton ID="lbt_OrderNow" runat="server" CssClass="more" OnClick="lbt_OrderNow_Click"> <img src="images/order_now.gif" alt="" title="" border="0" /> </asp:LinkButton> <div class="clear"></div> </div> <div class="box_bottom"></div>

P a g e | 80 </div> <div class="clear"></div> </div> <div id="demo" class="demolayout"> <ul id="demo-nav" class="demolayout"> <li><a class="active" href="#tab1">Thng tin thm</a></li> <li><a class="" href="#tab2">Sch lin quan</a></li> </ul> <div class="tabs-container"> <div style="display: block;" class="tab" id="tab1"> <p class="more_details"> <asp:Literal ID="lit_MoTa" runat="server"></asp:Literal> </p> </div> <div style="display: none;" class="tab" id="tab2"> <asp:Repeater ID="rep_Related" runat="server" OnItemDataBound="rep_Related_ItemDataBound"> <ItemTemplate> <div class="new_prod_box"> <a href="Detail.aspx"> <asp:Literal ID="lit_TenSach" runat="server"></asp:Literal> </a> <div class="new_prod_bg"> <a href="Detail.aspx?id=<%#Eval("MaSach") %>"> <img src="Photos/Thumb/<%#Eval("HinhMinhHoa") %>" alt="" title="" class="thumb" border="0" /></a> </div> </div> </ItemTemplate> </asp:Repeater> <div class="clear"></div> </div> </div> </div> <div class="clear"></div> <script type="text/javascript"> var tabber1 = new Yetii({ id: 'demo' });

P a g e | 81 </script>

4.4.2.

X l ti d liu
Khi ngi dng vo trang chi tit sn phm, chng trnh ly ID ca sn phm

thng qua i tng Request, sau ly cc thng tin chi tit ca sn phm hin th cho khch hng. Sau chng trnh tin hnh ly danh sch cc sn phm cng ch vi sn phm m khch hng ang xem gn cho thuc tnh DataSource ca Repeater danh sch sn phm lin quan. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.Detail; if (!IsPostBack) { LoadData(); } } private void LoadData() { try { int iD = int.Parse(Request.QueryString["id"].ToString()); tbSach sach = tbSachBUS.GetByID(iD); lit_LinkSach.Text = sach.TenSach; lit_ProductName.Text = sach.TenSach; img_Image.Src = "Photos/Thumb/" + sach.HinhMinhHoa; a_Image.HRef = "Photos/" + sach.HinhMinhHoa; lit_MoTaNgan.Text = sach.MoTa.Substring(0, 250) + "..."; lit_MoTa.Text = sach.MoTa; lit_Price.Text = sach.DonGia.ToString(); lbt_OrderNow.CommandArgument = sach.MaSach.ToString(); int total = 0; Criteria cri = new Criteria(); cri.add(Condition.AND, tbSachColumns.MaCD.ToString(), Condition.EQUAL, sach.MaCD); rep_Related.DataSource = tbSachBUS.Get(cri.Criter, 1, 9, tbSachColumns.MaSach.ToString(), OrderDirection.DESC.ToString(), out total); rep_Related.DataBind();

P a g e | 82 } catch { Response.Redirect("~/Default.aspx"); } } protected void rep_Related_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { tbSach sach = (tbSach)e.Item.DataItem; Literal lit_TenSach = (Literal)e.Item.FindControl("lit_TenSach"); if (sach.TenSach.Length > 16) lit_TenSach.Text = sach.TenSach.Substring(0, 16) + "..."; else lit_TenSach.Text = sach.TenSach; } }

4.4.3.

X l thm vo gi hng
Khi ngi dng nhp chut vo nt thm vo gi hng, h thng tin hnh thm sn

phm vo gi hng thng qua lp gi hng. protected void lbt_OrderNow_Click(object sender, EventArgs e) { Item i = new Item(); tbSach sach = tbSachBUS.GetByID(int.Parse(lbt_OrderNow.CommandArgument)); i.IDProduct = sach.MaSach; i.Image = sach.HinhMinhHoa; i.Price = sach.DonGia; i.Quantity = 1; i.Name = sach.TenSach; ShoppingCart c = (ShoppingCart)Session["Cart"]; c.Add(i); Session["Cart"] = c; Response.Redirect(Request.RawUrl); }

4.5.
4.5.1.

XY DNG CHC NNG NG K


Thit k giao din
Trang ng k gm cc control cho php ngi dng nhp cc thng tin: Email, mt

khu, h tn, a ch, in thoi.

P a g e | 83

<div class="title"><span class="title_icon"> <img src="images/bullet1.gif" alt="" title="" /></span>ng k</div> <div class="feat_prod_box_details"> <div class="contact_form"> <div class="form_row"> <label class="contact"><strong>Email:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Email" runat="server"></asp:TextBox> </div> <div class="form_row"> <label class="contact"><strong>Mt khu:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Password" TextMode="Password" runat="server"></asp:TextBox> </div> <div class="form_row"> <label class="contact"><strong>H tn:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Fullname" runat="server"></asp:TextBox> </div> <div class="form_row">

P a g e | 84 <label class="contact"><strong>a ch:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Adresss" runat="server"></asp:TextBox> </div> <div class="form_row"> <label class="contact"><strong>in thoi:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Mobile" runat="server"></asp:TextBox> </div> <div class="form_row"> <asp:Button ID="btn_Register" CssClass="register" runat="server" Text="ng k" OnClick="btn_Register_Click" /> </div> </div> </div> <div class="clear"></div>

4.5.2.

X l ng k
Sau khi ngi dng nhp thng tin ca mnh v nhp vo nt ng k, chng trnh

s tin hnh chn thng tin ca khch hng ny vo c s d liu. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.Register; } protected void btn_Register_Click(object sender, EventArgs e) { tbKhachHang khachHang = tbKhachHangBUS.GetByEmail(txt_Email.Text); if (khachHang == null) { khachHang = new tbKhachHang(); khachHang.DiaChi = txt_Adresss.Text; khachHang.DienThoai = txt_Mobile.Text; khachHang.Email = txt_Email.Text; khachHang.HoTen = txt_Fullname.Text; khachHang.MatKhau = txt_Password.Text; tbKhachHangBUS.Insert(khachHang); Response.Redirect("~/Default.aspx"); } }

P a g e | 85

4.6.
4.6.1.

XY DNG CHC NNG NG NHP


Thit k giao din
Giao din ca trang ng nhp gm: Email, mt khu v mt nt ng nhp.

<div class="title"><span class="title_icon"> <img src="images/bullet1.gif" alt="" title="" /></span>ng nhp</div> <div class="feat_prod_box_details"> <div class="contact_form"> <div class="form_row"> <label class="contact"><strong>Email:</strong></label> <asp:TextBox ID="txt_Email" CssClass="contact_input" runat="server"></asp:TextBox> </div> <div class="form_row"> <label class="contact"><strong>Mt khu:</strong></label> <asp:TextBox ID="txt_MatKhau" TextMode="Password" CssClass="contact_input" runat="server"></asp:TextBox> </div> <div class="form_row"> <asp:Button ID="btn_DangNhap" CssClass="register" runat="server" Text="ng nhp" OnClick="btn_DangNhap_Click" /> </div> </div> </div> <div class="clear"></div>

P a g e | 86

4.6.2.

X l ng nhp
Khi ngi dng nhp email, mt khu v nhp chut vo nt ng nhp, chng

trnh tin hnh kim tra email v mt khu c ng khng. Nu nhp sai, chng trnh s thng bo cho ngi dng nhp li, nu ng chng trnh s tin hnh to i tng Session khch hng. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.MyAccount; } protected void btn_DangNhap_Click(object sender, EventArgs e) { tbKhachHang khachHang = tbKhachHangBUS.GetByEmail(txt_Email.Text); if (khachHang != null && khachHang.MatKhau == txt_MatKhau.Text) { Session["KhachHang"] = khachHang.MaKH; Response.Redirect("~/Default.aspx"); } }

4.7.
4.7.1.

XY DNG CHC NNG GI HNG


Xy dng gi hng
Xy dng lp hng ha Lp Item gm cc thuc tnh: M sn phm, s lng, gi, hnh nh v tn ca sn

4.7.1.1.

phm. Lp Item dng i din cho mt sn phm trong gi hng. public class Item { private int iDProduct; public int IDProduct { get { return iDProduct; } set { iDProduct = value; } } private int quantity; public int Quantity { get { return quantity; } set { quantity = value; } } private int price;

P a g e | 87

public int Price { get { return price; } set { price = value; } } private string image; public string Image { get { return image; } set { image = value; } } private string name; public string Name { get { return name; } set { name = value; } } } 4.7.1.2.

Xy dng lp gi hng Lp ShoppingCart c mt thuc tnh l danh sch cc Item. Danh sch ny th hin

cc sn phm hin c trong gi hng. Lp ShoppingCart c cc phng thc: Add (thm mt Item vo trong gi hng), Delete (xa mt Item ra khi gi hng), Update (chnh sa thng tin ca mt Item) v Total (tnh tng tin hin ti ca gi hng). public class ShoppingCart { public List<Item> ItemCollection = new List<Item>(); public void Add(Item item) { for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection[i].Quantity += item.Quantity; return; } } ItemCollection.Add(item); } public void Delete(Item item) {

P a g e | 88 for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection.RemoveAt(i); return; } } } public void Update(Item item) { for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection[i].Quantity = item.Quantity; return; } } } public int Total() { int total = 0; for (int i = 0; i < ItemCollection.Count; i++) { total += ItemCollection[i].Price; } return total; } }

4.7.2.

Thit k giao din


Trang thng tin gi hng gm 1 danh sch cc sn phm hin ang c trong gi

hng, hai nt tip tc mua hng v t hng.

P a g e | 89

<div class="title"><span class="title_icon"> <img src="images/bullet1.gif" alt="" title="" /></span>Gi hng</div> <div class="feat_prod_box_details"> <asp:Repeater ID="rep_Cart" runat="server" OnItemDataBound="rep_Cart_ItemDataBound"> <HeaderTemplate> <table class="cart_table"> <tr class="cart_title"> <td>Hnh nh</td> <td>Tn sch</td> <td>Gi</td> <td>S lng</td> <td>Tng tin</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td><a href="Detail.aspx?id=<%#Eval("IDProduct") %>"> <img src="Photos/Thumb/<%#Eval("Image") %>" alt="" title="" border="0" class="cart_thumb" /> </a></td> <td><%#Eval("Name") %></td> <td><%#Eval("Price") %> VN</td>

P a g e | 90 <td><%#Eval("Quantity") %></td> <td> <asp:Literal ID="lit_ThanhTien" runat="server"></asp:Literal> VN</td> </tr> </ItemTemplate> </asp:Repeater> <tr> <td colspan="4" class="cart_total"><span class="red">TOTAL:</span></td> <td> <asp:Literal ID="lit_TongTien" runat="server"></asp:Literal> VN</td> </tr> </table> <a href="Default.aspx" class="continue">&lt; Tip tc</a> <a href="Order.aspx" runat="server" id="a_Order" class="checkout">t hng &gt;</a> </div> <div class="clear"></div>

4.7.3.

X l ti d liu
Khi ngi dng i vo chc nng xem gi hng, chng trnh tin hnh ti danh

sch sn phm hin ang c trong gi hng. Nu khch hng cha ng nhp th s khng hin th nt t hng, ngc li nu khch hng ng nhp th chng trnh s cho php khch hng t hng. protected void Page_Load(object sender, EventArgs e) { Session["Page"] = MainMenu.Cart; if (!IsPostBack) { LoadData(); } } private void LoadData() { ShoppingCart c = (ShoppingCart)Session["Cart"]; rep_Cart.DataSource = c.ItemCollection; rep_Cart.DataBind(); lit_TongTien.Text = c.Total().ToString(); if (Session["KhachHang"] == null) { a_Order.Visible = false;

P a g e | 91 } } protected void rep_Cart_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { Item i = (Item)e.Item.DataItem; Literal lit_ThanhTien = (Literal)e.Item.FindControl("lit_ThanhTien"); int thanhtien = (i.Price * i.Quantity); lit_ThanhTien.Text = thanhtien.ToString(); } }

4.8.
4.8.1.

XY DNG CHC NNG T HNG


Thit k giao din
Chc nng t hng gm c cc thng tin: ngy giao hng v a ch nhn hng.

Trong ngy giao hng l mt DateTimePicker cho php khch hng chn ngy giao hng.

<script type="text/javascript" src="js/jquery1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui1.7.2.custom.min.js"></script> <script type="text/javascript" src="js/jquery-ui-timepickeraddon.js"></script> <div class="title"><span class="title_icon">

P a g e | 92 <img src="images/bullet1.gif" alt="" title="" /></span>t hng</div> <div class="feat_prod_box_details"> <div class="contact_form"> <div class="form_row"> <label class="contact"><strong>Ngy giao hng:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Date" runat="server"></asp:TextBox> </div> <div class="form_row"> <label class="contact"><strong>a ch nhn hng:</strong></label> <asp:TextBox CssClass="contact_input" ID="txt_Address" runat="server"></asp:TextBox> </div> <div class="form_row"> <asp:Button ID="btn_Order" CssClass="register" runat="server" Text="t hng" OnClick="btn_Order_Click"/> </div> <div class="form_row"> <asp:Label ID="lit_ThongBao" runat="server"></asp:Label> </div> </div> </div> <div class="clear"></div> <script type="text/javascript"> $(function() { $('#<%=txt_Date.ClientID %>').datepicker({ duration: '', constrainInput: false }); }); </script>

4.8.2.

X l chc nng t hng


Sau khi ngi dng nhp y thng tin v nhp chut vo nt t hng, chng

trnh tin hnh thm thng tin t hng ny vo c s d liu.

P a g e | 93 Chng trnh s ly tt c sn phm c trong gi hng v thm chi tit n hng ny vo c s d liu. protected void btn_Order_Click(object sender, EventArgs e) { try { ShoppingCart c = (ShoppingCart)Session["Cart"]; tbDonHang donHang = new tbDonHang(); donHang.DaGiao = false; donHang.DiaChiNhanHang = txt_Address.Text; donHang.NgayDatHang = DateTime.Now; donHang.NgayGiaoHang = DateTime.Parse(txt_Date.Text); donHang.TriGia = c.Total(); donHang.MaKH = int.Parse(Session["KhachHang"].ToString()); int id = tbDonHangBUS.Insert(donHang); for (int i = 0; i < c.ItemCollection.Count; i++) { tbCTDonHang cTDonHang = new tbCTDonHang(); cTDonHang.MaDH = id; cTDonHang.MaSach = c.ItemCollection[i].IDProduct; cTDonHang.SoLuong = c.ItemCollection[i].Quantity; cTDonHang.DonGia = c.ItemCollection[i].Price; tbCTDonHangBUS.Insert(cTDonHang); } Session["Cart"] = new ShoppingCart(); lit_ThongBao.Text = "Dat hang thanh cong."; } catch { Response.Redirect("~/Default.aspx"); } }

You might also like