第19章购货车与订单



《第19章购货车与订单》由会员分享,可在线阅读,更多相关《第19章购货车与订单(53页珍藏版)》请在文档大全上搜索。
1、 网上商店模拟购物过程,先让客户从不同的网页中选取商品,并将这些商品集中到“购货车”中一道算帐,最后生成完整的订单。 “虚拟购货车”和“订单”是商品采购中的核心部分,将要使用的技术包括:利用用户控件和主控页进行界面设计;数据表多表之间的同步;数据表的显示、修改和统计。动态生成内存中的数据表以及使用Session对象保存数据并在网页之间进行传递等。 19.1.1 Northwind样板库简介 SQL Server提供的Northwind样板库是一个虚拟的国外食品公司的数据库,我们将利用这个数据库(加以简化)来创建自己的购货车与订单。 Northwind样板库的数据表包括以下4大部分: 订单部分:
2、包含订单表(Orders)、订单细目(Order Details)、订单发货(Shippers); 产品部分:包括类型表(Categories)、产品表(Products)、产品提供者(Suppliers); 雇员信息部分:包括有关雇员(Employees)的4张表; 顾客信息:包括顾客表(Customers)等; 还需要在数据库中自己建立一个简化的订单表。本例为一个网上食品商店的小型网站,主要功能包括: 主页面设计; 食品的分类显示; 选购和调整购货车; 集中结算; 存储订单; 查看订单; 网站涉及到5种网页,各网页的功能如图 : 主控页 主页 选择商品(两表同步) 购货车 结帐 订单(1)
3、产品类别表(2)产品显示表(3)订单表为什么要使用用户控件和主控页? 使得系统具有很好的可重用性; 使得系统具有很好的可维护性; 各个网页的显示风格一致。 1、创建用户控件商店的商标,网页之间链接的图标以及查询部分是大多数网页都需要显示的部分,可以先将其建成用户控件。2、创建主控页先创建主控页,然后再创建模板中的网页。主控页及用户控件如图 :1、使用主控页生成主网页,其简要情况如图:2、使用主控页再生成其他网页:例如“商品.aspx”、“购货车.aspx”、“结帐.aspx”、“订单.aspx”等。这些网页的内容可以以后在补充上去。 在用户控件中将链接指针分别与各张网页链接。 为了使得“产品类
4、型表”与“产品表”之间取得同步(不同页面之间的父子表同步),在显示类型的GridView的Column属性中增添一“超级链接列”,并且为此列设置同步所需的“URL”、“URL字段”、“URL格式字符串”等。使得点击该超级链接按钮时向子表传送出同步字段“CategoryID”。具体设置情况如图所示: 在“产品表”的网页中利用QueryString设置查询语句,以便根据属性表传来的参数进行查询,以达到两表同步的目的。在产品表中设置查询语句时的设置如图所示: 两表同步的结果如图: 为了选择商品,在产品表中的栏目(Column)中增加一按钮(Button),并将它的CommdName属性赋值为“sel
5、ect” ,当点击该按钮时,将该产品的副本取出来动态生成数据表,利用这个动态数据表来生成“购货车”。需要解决以下三个问题: 按动按钮时将触发什么事件(GridView1的RowCommand); 如何提取GridView控件中的数据; 如何创建动态数据表并将取出的数据放入其中。 GridView 控件中的RowCommand事件,是GridView控件内任一按钮都将触发的事件。因此在使用这个事件时,先要判断当前按动的是哪个按钮。判断的方法是根据按钮的命令名,语句如下:If (e.CommandName=按钮命令名) 根据鼠标点击的“行”以及在GridView中的“列”,可以取出相应的数据: 确
6、定点击行的语句:int index = Convert.ToInt32(e.CommandArgument);GridViewRow row = GridView1.Rowsindex; 取出某列的语句: string bhText = row.Cells1.Text; string mcText = row.Cells2.Text; 先根据类库中的类生成数据表对象,然后定义数据表的结构,定义数据表各列的数据类型及标题。/ 定义数据表对象 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); 创建内存数据表的完整代码如下: void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) System.Data.DataTable Cart = new System.Data.DataTable(); / 生成内存数据表对象 i
8、f (e.CommandName = select) if (SessionShoppingCart = null) / 定义数据表结构 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; / 取出列中的数据 string mcText = row.Cells2.Text; string dyText = row.Cells4.Text; string djText = row.Cells5.Text; int bh = int.Parse(bhText); / 数据的类型转换 double dj = double.Parse(
10、djText); System.Data.DataRow rr = Cart.NewRow(); rr商品编号=bh; / 将取出的数据放入数据表中 rr商品名称 = mcText; rr单元含量 = dyText; rr单价 = dj; Cart.Rows.Add(rr); / 将新行加入数据表中 SessionShoppingCart = Cart; / 将数据表放入Session中 在购货车的显示页面中,将SessionShoppingCart作为数据源显示在GridView中,语句如下:private void Page_Load(object sender, System.Event
11、Args e)GridView1.DataSource= SessionShoppingCart;DataBind(); 购货车在这里是放在Session对象中的数据表,用Session对象保存购货车很合适:1、每个客户都有属于自己的Session对象,即使多个客户同时进行网上购买时,他们的数据也不会混杂。2、Session对象是一种临时性的容器,适合购货车的特点。 为了完善购货车中的数据以便转入结帐界面,在购货车的窗体中还需要执行以下5方面的工作:1、在窗体页中用一“TextBox”输入用户标志;2、在GridView控件中增加一个按钮(Button),将其CommandName属性设成“s