




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 網上商店模擬購物過程,先讓客戶從不同的網頁中選取商品,并將這些商品集中到“購貨車”中一道算帳,最后生成完整的訂單。 “虛擬購貨車”和“訂單”是商品采購中的核心部分,將要使用的技術包括:利用用戶控件和主控頁進行界面設計;數(shù)據(jù)表多表之間的同步;數(shù)據(jù)表的顯示、修改和統(tǒng)計。動態(tài)生成內存中的數(shù)據(jù)表以及使用Session對象保存數(shù)據(jù)并在網頁之間進行傳遞等。 19.1.1 Northwind樣板庫簡介 SQL Server提供的Northwind樣板庫是一個虛擬的國外食品公司的數(shù)據(jù)庫,我們將利用這個數(shù)據(jù)庫(加以簡化)來創(chuàng)建自己的購貨車與訂單。 Northwind樣板庫的數(shù)據(jù)表包括以下4大部分: 訂單部分:
2、包含訂單表(Orders)、訂單細目(Order Details)、訂單發(fā)貨(Shippers); 產品部分:包括類型表(Categories)、產品表(Products)、產品提供者(Suppliers); 雇員信息部分:包括有關雇員(Employees)的4張表; 顧客信息:包括顧客表(Customers)等; 還需要在數(shù)據(jù)庫中自己建立一個簡化的訂單表。本例為一個網上食品商店的小型網站,主要功能包括: 主頁面設計; 食品的分類顯示; 選購和調整購貨車; 集中結算; 存儲訂單; 查看訂單; 網站涉及到5種網頁,各網頁的功能如圖 : 主控頁 主頁 選擇商品(兩表同步) 購貨車 結帳 訂單(1)
3、產品類別表(2)產品顯示表(3)訂單表為什么要使用用戶控件和主控頁? 使得系統(tǒng)具有很好的可重用性; 使得系統(tǒng)具有很好的可維護性; 各個網頁的顯示風格一致。 1、創(chuàng)建用戶控件商店的商標,網頁之間鏈接的圖標以及查詢部分是大多數(shù)網頁都需要顯示的部分,可以先將其建成用戶控件。2、創(chuàng)建主控頁先創(chuàng)建主控頁,然后再創(chuàng)建模板中的網頁。主控頁及用戶控件如圖 :1、使用主控頁生成主網頁,其簡要情況如圖:2、使用主控頁再生成其他網頁:例如“商品.aspx”、“購貨車.aspx”、“結帳.aspx”、“訂單.aspx”等。這些網頁的內容可以以后在補充上去。 在用戶控件中將鏈接指針分別與各張網頁鏈接。 為了使得“產品類
4、型表”與“產品表”之間取得同步(不同頁面之間的父子表同步),在顯示類型的GridView的Column屬性中增添一“超級鏈接列”,并且為此列設置同步所需的“URL”、“URL字段”、“URL格式字符串”等。使得點擊該超級鏈接按鈕時向子表傳送出同步字段“CategoryID”。具體設置情況如圖所示: 在“產品表”的網頁中利用QueryString設置查詢語句,以便根據(jù)屬性表傳來的參數(shù)進行查詢,以達到兩表同步的目的。在產品表中設置查詢語句時的設置如圖所示: 兩表同步的結果如圖: 為了選擇商品,在產品表中的欄目(Column)中增加一按鈕(Button),并將它的CommdName屬性賦值為“sel
5、ect” ,當點擊該按鈕時,將該產品的副本取出來動態(tài)生成數(shù)據(jù)表,利用這個動態(tài)數(shù)據(jù)表來生成“購貨車”。需要解決以下三個問題: 按動按鈕時將觸發(fā)什么事件(GridView1的RowCommand); 如何提取GridView控件中的數(shù)據(jù); 如何創(chuàng)建動態(tài)數(shù)據(jù)表并將取出的數(shù)據(jù)放入其中。 GridView 控件中的RowCommand事件,是GridView控件內任一按鈕都將觸發(fā)的事件。因此在使用這個事件時,先要判斷當前按動的是哪個按鈕。判斷的方法是根據(jù)按鈕的命令名,語句如下:If (e.CommandName=按鈕命令名) 根據(jù)鼠標點擊的“行”以及在GridView中的“列”,可以取出相應的數(shù)據(jù): 確
6、定點擊行的語句:int index = Convert.ToInt32(e.CommandArgument);GridViewRow row = GridView1.Rowsindex; 取出某列的語句: string bhText = row.Cells1.Text; string mcText = row.Cells2.Text; 先根據(jù)類庫中的類生成數(shù)據(jù)表對象,然后定義數(shù)據(jù)表的結構,定義數(shù)據(jù)表各列的數(shù)據(jù)類型及標題。/ 定義數(shù)據(jù)表對象 System.Data.DataTable Cart = new System.Data.DataTable(); / 確定各列的標題及類型 Cart.Co
7、lumns.Add(商品編號, typeof(int); Cart.Columns.Add(商品名稱, typeof(string); Cart.Columns.Add(單元含量, typeof(string); Cart.Columns.Add(單價, typeof(double); 創(chuàng)建內存數(shù)據(jù)表的完整代碼如下: void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) System.Data.DataTable Cart = new System.Data.DataTable(); / 生成內存數(shù)據(jù)表對象 i
8、f (e.CommandName = select) if (SessionShoppingCart = null) / 定義數(shù)據(jù)表結構 Cart.Columns.Add(商品編號, typeof(int); Cart.Columns.Add(商品名稱, typeof(string); Cart.Columns.Add(單元含量, typeof(string); Cart.Columns.Add(單價, typeof(double); SessionShoppingCart = Cart; Cart = (System.Data.DataTable)SessionShoppingCart; i
9、nt index = Convert.ToInt32(e.CommandArgument); / 確定點擊的行 GridViewRow row = GridView1.Rowsindex; string bhText = row.Cells1.Text; / 取出列中的數(shù)據(jù) string mcText = row.Cells2.Text; string dyText = row.Cells4.Text; string djText = row.Cells5.Text; int bh = int.Parse(bhText); / 數(shù)據(jù)的類型轉換 double dj = double.Parse(
10、djText); System.Data.DataRow rr = Cart.NewRow(); rr商品編號=bh; / 將取出的數(shù)據(jù)放入數(shù)據(jù)表中 rr商品名稱 = mcText; rr單元含量 = dyText; rr單價 = dj; Cart.Rows.Add(rr); / 將新行加入數(shù)據(jù)表中 SessionShoppingCart = Cart; / 將數(shù)據(jù)表放入Session中 在購貨車的顯示頁面中,將SessionShoppingCart作為數(shù)據(jù)源顯示在GridView中,語句如下:private void Page_Load(object sender, System.Event
11、Args e)GridView1.DataSource= SessionShoppingCart;DataBind(); 購貨車在這里是放在Session對象中的數(shù)據(jù)表,用Session對象保存購貨車很合適:1、每個客戶都有屬于自己的Session對象,即使多個客戶同時進行網上購買時,他們的數(shù)據(jù)也不會混雜。2、Session對象是一種臨時性的容器,適合購貨車的特點。 為了完善購貨車中的數(shù)據(jù)以便轉入結帳界面,在購貨車的窗體中還需要執(zhí)行以下5方面的工作:1、在窗體頁中用一“TextBox”輸入用戶標志;2、在GridView控件中增加一個按鈕(Button),將其CommandName屬性設成“s
12、elect”;3、在GridView控件中增加一模板列,放入TextBox控件,以便輸入購買數(shù)量;4、在窗體頁的Page_Load事件中加上:if(!IsPostBack) /判斷是否第一次打開網頁5、在GridView的RowCommand事件中編寫代碼。 增加輸入用戶標志的TextBox控件,以及相應的“RequiredFieldValidator”校驗控件,以防止輸入中的遺漏。 通過GridView的Columns屬性中增加一按鈕,并它的CommandName屬性命名(例如命名為“buy”),以便確認選擇項。 在GridView控件中增加一個摸板列,將TextBox1控件放入ItemTe
13、mplate摸板中,以便輸入購買數(shù)量。先將其缺省值設為1。 private void Page_Load(object sender, System.EventArgs e) if(!IsPostBack)GridView1.DataSource= SessionShoppingCart;DataBind(); 只有網頁第一次打開時才執(zhí)行大括號中的語句。 事件處理代碼void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) System.Data.DataTable Cart = new System.Data.D
14、ataTable();/生成數(shù)據(jù)表生成數(shù)據(jù)表 if (e.CommandName = buy) if (SessionShoppingCart2 = null) Cart.Columns.Add(商品編號商品編號, typeof(int); /建立數(shù)據(jù)表結構建立數(shù)據(jù)表結構 Cart.Columns.Add(商品名稱商品名稱, typeof(string); Cart.Columns.Add(單元含量單元含量, typeof(string); Cart.Columns.Add(單價單價, typeof(double); Cart.Columns.Add(訂購數(shù)量訂購數(shù)量, typeof(int)
15、; Cart.Columns.Add(折扣折扣, typeof(double); Cart.Columns.Add(合計合計, typeof(double); SessionShoppingCart2 = Cart; Cart = (System.Data.DataTable)SessionShoppingCart2; if (TextBox2.Text = ) / 輸入客戶標記輸入客戶標記 Validate(); / 調用校驗控件進行校驗調用校驗控件進行校驗 else Session“khbj” = TextBox2.Text; int index = Convert.ToInt32(e.C
16、ommandArgument); GridViewRow row = GridView1.Rowsindex; TextBox tt = (System.Web.UI.WebControls.TextBox)row.Cells1.FindControl(TextBox1); string dgl = tt.Text; int dg = int.Parse(dgl); if (dg = 1) dg = 1; / 若購貨量小于若購貨量小于1時,定為時,定為1 string bhText = row.Cells2.Text; string mcText = row.Cells3.Text; stri
17、ng dyText = row.Cells4.Text; string djText = row.Cells5.Text; int bh = int.Parse(bhText); double dj = double.Parse(djText);System.Data.DataRow rr = Cart.NewRow(); rr商品編號=bh; rr商品名稱 = mcText; rr單元含量 = dyText; rr單價 = dj; rr訂購數(shù)量 = dg; int zk = 1; rr折扣 = zk; double hj = dj * dg * zk; / 合計使用三者的乘積 rr合計 =
18、hj; Cart.Rows.Add(rr); SessionShoppingCart2 = Cart; 19.7.1 結帳網頁的數(shù)據(jù)顯示 在結帳網頁中的GridView控件應該以Session“ShoppingCart2”作為數(shù)據(jù)源顯示數(shù)據(jù):private void Page_Load(object sender, System.EventArgs e)GridView1.DataSource= SessionShoppingCart2;DataBind(); 為了允許客戶在結帳時有機會對自己的選擇作進一步調整,可以在結帳界面的每條記錄前面增加一“復選框”。 在GridView中通過Colum
19、n屬性增添一“模板”字段,并且在模板中增添復選框控件。 為了進行匯總計算,需設置循環(huán)語句,逐條檢查復選框的選擇狀態(tài),只有當該復選框被選中時,才將該記錄的數(shù)據(jù)計入匯總中。 用到一個相關的類和一個相關的方法:1、GridView1.Rowsii用來表示 GridView 控件中的某一行。2、FindControl(控件的id)方法:用來在當前的命名容器中搜索帶指定 id 參數(shù)的服務器控件。 void Button2_Click(object sender, EventArgs e) double sum=0.0; for(int ii=0; ii GridView1.Rows.Count;ii+)
20、 CheckBox cc = (CheckBox)GridView1.Rowsii.Cells0.FindControl(CheckBox1); if(cc.Checked) / 若復選框被選中 sum = sum + (double.Parse(GridView1.Rowsii.Cells7.Text); TextBox2.Text=sum.ToString(); / 顯示匯總結果 為實現(xiàn)復選框的功能,在Page_Load事件中需要作一些改變。代碼如下:void Page_Load(object sender, EventArgs e) if (!IsPostBack) TextBox1.T
21、ext = Sessionkhbz.ToString(); GridView1.DataSource = SessionShoppingCart2; GridView1.DataBind(); 如果客戶對結果感到滿意時,可按動“存入數(shù)據(jù)庫”按鈕,將定單存入數(shù)據(jù)庫的“定單表” 中。 存入時使用存儲過程,為此需要先建立訂單表,并創(chuàng)建一個用于增加新記錄的存儲過程。 拖入一SqlDataSource控件并與存儲過程連接。連接過程中最大的不同點是待定參數(shù)的值不是從固定的控件中讀取,而是通過循環(huán)語句從GridView控件的字段中獲得。 待定參數(shù)的賦值過程是:開始對GridView控件進行逐條記錄進行循環(huán);
22、在循環(huán)語句中首先取出復選框的狀態(tài),判斷復選框是否被選中;如果被選中,先清除原有參數(shù),然后給各參數(shù)賦值;最后調用存儲過程以存入訂單。 “存入訂單”按鈕的代碼如下:void Button1_Click(object sender, EventArgs e) for (int ii=0; iiGridView1.Rows.Count; ii+) / 循環(huán)語句 / 先判斷復選框是否被選擇CheckBox cc=(CheckBox)GridView1.Rowsii.Cells0.FindControl(CheckBox1); if (cc.Checked) / 如果被選中則取出數(shù)據(jù)存入數(shù)據(jù)表中SqlDataSource1.InsertParameters.Clear();SqlDataSource1.InsertParameters.Add(客戶ID,SessionKhbj.ToString();SqlDataSource1.InsertParameters.Add(產品ID,GridView1.Rowsii.Cells1.Text);SqlDataSource1.InsertParameters.Add(產品名稱, GridView1.Rowsii.Cells2.T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《藥品市場營銷學》課程標準
- 農莊轉讓帳篷合同范本
- 化肥區(qū)域授權合同范本
- 上海電子營銷咨詢合同范例
- 余姚市房地產經紀合同范本
- 接觸網中級工題庫與參考答案
- 化工總控工高級測試題及參考答案
- 道路交通安全模擬試題含參考答案
- 個人安全與社會責任心得體會
- 公司收購資產合同范本
- 噴涂設備點檢表
- GB/T 2831-2009光學零件的面形偏差
- 廣東省佛山市《綜合基礎知識》事業(yè)單位國考真題
- 02 第2章 城市與城市化-城市管理學
- 六年級上冊英語教案-Culture 2 Going Green 第二課時 廣東開心英語
- 警察叔叔是怎樣破案的演示文稿課件
- 2019石景山初三一模語文試題及答案
- 尿液有形成分形態(tài)學檢查與臨床意義課件
- 09式 新擒敵拳 教學教案 教學法 圖解
- CAD術語對照表
- 學術論文的寫作與規(guī)范課件
評論
0/150
提交評論