
2.8 商品库存管理模块设计
2.8.1 商品库存管理模块概述
在电子商务系统中对商品信息的管理十分重要,一个好的电子商务系统必须要有一个强大的商品库存管理模块。电子商务网站系统的商品库存管理模块主要实现对商品信息的管理,包括对商城商品信息和商品类型信息的查询、添加、修改和删除功能。
当用户通过后台身份验证后,进入网站后台管理模块,单击展开菜单栏中的“库存管理”,然后点击管理按钮,将会在功能执行区中打开如图2.28所示的商品管理界面。在该界面的功能管理中,用户可以根据实际需要查询、浏览、修改和删除商品信息;而当单击“商品添加”按钮时用户可以根据实际需要添加商品信息。同样,对商品类别的管理与添加类似。

图2.28 对添加的商品进行管理
2.8.2 商品库存管理模块技术分析
商品管理界面中在显示商品“所属类别”和商品“热销价”时,主要应用了数据绑定表达式。
在ASP.NET中主要应用的是DataBinder.Eval方法,该方法是一个完全成熟的方法,可以在程序中的任何地方使用。
DataBinder.Eval方法的语法如下:
<%# DataBinder.Eval(Containter.DataItem, expression) %>
Containter.DataItem表达式引用对该表达式进行计算的对象。该表达式通常是一个字符串,表示数据项对象上要访问的字段的名称。它可以是一个包括索引和属性名的表达式。DataItem属性表示当前容器上下文中的对象。容器通常是即将生成的数据项对象的当前实例。
在ASP.NET中,只要是ASP.NET 1.x中接受DataBinder.Eval方法的地方,就可以使用如下表达式:
<%# Eval(expression) %>
可以看出,ASP.NET 4.5也是完全支持DataBinder对象的。ASP.NET 4.5中的Eval方法是建立在DataBinder.Eval方法之上的一个简单包装。该方法代表一种单向数据绑定,它实现了数据读取的自动化,但是没有实现数据写入自动化。如果要实现双向的数据绑定,可应用ASP.NET 4.5中另一个新的数据绑定方法,即Bind方法读写数据项属性。
2.8.3 商品库存管理模块实现过程
本模块使用的数据表:tb_BookInfo、tb_Detail
1. 设计步骤
(1)在应用程序中创建一个名为Manage的文件夹,在该文件夹下创建一个Web窗体,将其命名为Product.aspx。
(2)通过使用bootstrap+div为整个页面进行布局。从“工具箱”选项卡中拖放一个TextBox控件、一个Button控件和一个GridView控件。Product.aspx各个控件的属性设置如表2.6所示。
表2.6 Product.aspx页中各个控件的属性设置

2. 代码实现
在后台代码页(Product.aspx.cs)中编写代码前,首先需要定义CommonClass类对象、DBClass类对象和GoodsClass类对象,以便在编写代码时,调用该类中的方法。代码如下:
例程28 代码位置:资源包\TM\02\B2C\B2C\Manage\ProductAdd.aspx.cs
CommonClass ccObj = new CommonClass(); DBClass dbObj = new DBClass(); GoodsClass gcObj = new GoodsClass();
在Page_Load事件中,调用自定义方法gvBind,显示商品信息。代码如下:
例程29 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx.cs

自定义方法gvBind,首先从商品信息表(tb_BookInfo)中获取商品信息,然后将获取的商品信息绑定到GridView控件中。代码如下:
例程30 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx.cs

代码贴士
❶GetDataSetStr:调用公共类中的GetDataSetStr方法,执行SQL语句,返回一个数据源的数据表。
❷DefaultView:该对象为DataTable的一个默认视图,并将其值赋予GridView控件的数据源对象DataSource。
❸DataKeyNames:该属性为GridVeiw控件获取一个包含当前显示项的主键字段的名称数组。
当用户输入关键信息后,单击“搜索”按钮,将会触发该按钮的Click事件。在该事件下,调用自定义方法gvSearchBind绑定查询后的商品信息。代码如下:
例程31 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx.cs

自定义方法gvSearchBind,调用GoodsClass类的search方法,查询符合条件的商品信息,并将其绑定到GridView控件上。代码如下:
例程32 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx.cs在GridView控件的RowDeleting事件下,编写如下代码,实现当用户单击某个商品后的“删除”按钮时,将该商品从商品信息表中删除。

例程33 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx.cs

当用户单击GridView控件中的“详细信息”按钮时,将会跳转到详细信息页面。在该页面中,用户可以查看并修改商品信息。
说明
商品信息修改页的代码并不复杂,由于篇幅有限,请读者参见本书随带的资源包。
在GridView控件中,“所属类别”和“热销价”的绑定列数据应用了数据表达式DataBinder.Eval方法,其代码编写需将页面切换到HTML源代码中。代码如下:
例程34 代码位置:资源包\TM\02\B2C\B2C\Manage\Product.aspx

代码贴士
❶绑定商品类别号,并通过后台代码中的公共方法GetClassName获取类别名。
❷绑定商品最新价,并通过后台代码中的公共方法GetVarStr获取最新商品价格。
2.8.4 单元测试
在编写该模块时,当单击商品管理页面中的表格控件GridView中的商品“详细信息”列时,如图2.29所示,链接到修改该商品信息的EditProduct.aspx页。如图2.30所示,输入相关的修改数据后,单击“修改”按钮时,将会弹出“修改成功!”对话框,但在表格控件GridView中指定修改的商品信息并没有变,数据中存在的数据也没有跟着更改,通过检查相应的更新SQL语句没有任何错误。

图2.29 商品管理页

图2.30 商品信息修改页
应用程序中编写的代码如下。
在页面Page_Load事件中,绑定相应的数据库信息。代码如下:

在EditProduct.aspx页中双击“修改”按钮,触发其Click事件。代码如下:

通过查找错误出处和相关技术方面的分析,发现在页面Page_Load事件中,没有判断页面是不是第一次加载,没有应用IsPostBack属性,该属性主要用于判断页面是否首次加载,并当用户修改相应信息数据时刷新页面。正确编写代码如下:
