Professional Documents
Culture Documents
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.
1.2.2.
Bng ch : tbChuDe
Data Type Int (Autonumber) nVarchar(255) Not Null Constraint
1.2.3.
Page |7
1.2.4.
Field Name MaSach TenSach MaCD MaTG MaNXB HinhMinhHoa DonGia MoTa NgayCapNhat SoLuongBan SoLanXem
1.2.5.
1.2.6.
1.2.7.
Page |8
1.2.8.
1.2.9.
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.
@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.
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.
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.
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.
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.
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
Trong khung Add New Item, chn loi file l Web Configuration File v nhn vo nt Add.
P a g e | 19
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:
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.
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; } }
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.
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
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.
SqlConnection.
private SqlConnection cn = null;
2.3.2.
P a g e | 29
public tbSachDAL() { cn = new SqlConnection(ConfigurationManager .ConnectionStrings["strConnection"] .ConnectionString); cn.Open(); }
2.3.3.
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 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.
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.
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.
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.
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.
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.
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.
P a g e | 36
Chng 3.
3.1.
3.1.1.
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.
nng, ContentPlaceHolder dng cho Sub Menu, ContentPlaceHolder hin th ni dung chnh.
3.1.3.
nhp.
3.2.
3.2.1.
<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.
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.
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>
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
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.
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
3.3.6.
3.4.
3.4.1.
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,
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.
<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.
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
3.7.
3.7.1.
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,
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
P a g e | 68
Chng 4.
4.1.1. 4.1.2.
4.1.2.1.
<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.
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
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.
<div class="crumb_nav"> <a href="Default.aspx">Trang ch</a> >> <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)
4.4.
4.4.1.
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> >> <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.
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.
<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.
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.
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">< Tip tc</a> <a href="Order.aspx" runat="server" id="a_Order" class="checkout">t hng ></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.
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.
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"); } }