Web程序设计实验指导书1116 下载本文

lblMsg.Text = \:\\:\:\

} } }

按钮btnInsert被单击时执行的事件代码如下: protected void btnInsert_Click(object sender, EventArgs e) {

Response.Redirect(\ }

(4)设计LinqXmlInsert.aspx

如图5-23所示,向LinqXmlInsert.aspx页面输入“分类Id:”、“分类名:”和“描述:”,添加3个TextBox控件、2个Button控件。适当调整各控件的大小和位置。分别设置各控件的属性ID值为:txtCategoryId、txtName、txtDescn、btnInsert和btnReturn,其它属性参考图5-23界面进行设置。

图5-23 设计界面(7)

(5)编写LinqXmlInsert.aspx事件代码 按钮btnInsert被单击时执行的事件代码如下:

protected void btnInsert_Click(object sender, EventArgs e) {

string xmlFilePath = Server.MapPath(\ XElement els = XElement.Load(xmlFilePath); //新建Category元素 XElement el = new XElement (\

new XElement(\ new XElement(\ new XElement(\ );

//添加Category元素到文件并保存 els.Add(el);

els.Save(xmlFilePath); }

按钮btnReturn被单击时执行的事件代码如下: protected void btnReturn_Click(object sender, EventArgs e) {

Response.Redirect(\ }

(6)从浏览LinqXml.aspx开始对数据管理网站进行测试。

实验六 数据绑定

一.实验目的

(1) 掌握ListControl类控件与数据源的绑定方法。 (2) 熟练掌握GridView控件的应用。 (3) 掌握Details控件的应用。

二.实验内容及要求

1.设计并实现一个购物网站MyPetShop 要求如下:

(1) 商品查看页浏览效果如图6-1所示,当选择不同的分类名时,显示该分类中包含的商品信息;当分类中包含多个商品时,能分页显示商品信息;当单击“购买”按钮时重定向到购物车页,并将所在行的商品添加到购物车。

图6-1 “商品查看”页浏览效果

(2) 购物车页浏览效果如图6-2所示,当选择购物车中商品后,单击“删除商品”按钮时将删除购物车中选中的商品;当单击“清空购物车”按钮时将清空购物车中所有商品;当输入“购买数量”,单击“重新计算”按钮时将重新计算购物车中商品的总价;当单击“结算”按钮时将重定向到结算页;当单击“继续购物”按钮时将重定向到商品查看页;若继续购物选购的是购物车中已有的商品,则在购物车页将增加该商品的购买数量;另外,要求将购物车中数据保存到Profile。

图6-2 “购物车”页浏览效果

(3) 结算页浏览效果如图6-3和图6-4所示,当输入“送货地址”、“邮编”和“联系电话”等信息后,单击“提交”按钮将在Order表和OrderItem表中添加记录,再清除Profile中存储的购物车商品数据,最后显示“已成功结算,谢谢光临!”的信息。

图6-3 “结算”页浏览效果(1) 图6-4 “结算”页浏览效果(2)

2.利用DetailsView控件实现数据插入、编辑、删除等操作 要求如下:

(1) 数据使用Product表。 (2) 浏览效果如图6-5所示。

(3) 如图6-6和图6-7所示,在插入和编辑数据时涉及的外键数据以下拉列表框形式进行选择输入。

图6-5 数据浏览效果 图6-6 数据“插入”效果 图6-7 数据“编辑”效果

三.实验步骤

1. 设计并实现一个购物网站MyPetShop (1)新建网站

新建一个网站,添加Web窗体ProductShow.aspx、Web窗体ShopCart.aspx、Web窗体SubmitCart.aspx。其中ProductShow.aspx 作为商品查看页;ShopCart.aspx作为购物车页;SubmitCart.aspx作为结算页。

(2)设计ProductShow.aspx

如图6-8所示,向ProductShow.aspx页面输入“分类名:”,添加1个DropDownList

控件、1个GridView控件。适当调整各控件的大小和位置。

图6-8 设计界面(1)

ProductShow.aspx中各控件的属性设置如表6-1所示。

表6-1 各控件的属性设置表

控件 DropDownList 属性名 ID AutoPostBack GridView ID AllowPaging AutoGenerateColumns PageSize 个HyperLinkField字段。

图6-9 属性Columns设置

TemplateField字段的编辑界面如图6-10所示,向ItemTemplate添加1个用于布局的4行3列表格,合并相应的单元格;向表格中输入“产品名称:”、“产品价格:”、“产品描述:”和“库存:”等信息,添加1个Image控件和4个Label控件;分别设置各控件的属性ID值为:imgImage、lblName、lblListPrice、lblDescn和lblQty;如图6-11所示,绑定控件imgImage属性ImageUrl的代码表达式为Bind(”Image”),其中Image即为Product表中的字段名Image;如图6-12所示,绑定控件lblName属性Text的代码表达式为Bind(”Name”),其它的Label进行类似的设置。

图6-10 设计界面(2) 图6-11 属性ImageUrl设置 图6-12 属性Text设置

在图6-9中,HyperLinkField字段各属性设置如表6-2所示。

表6-2 HyperLinkField字段各属性设置表

属性名 DataNavigateUrlFields DataNavigateUrlFormatString HeaderText Text 属性值 ProductId ~/ShopCart.aspx?ProductId={0} 放入购物车 购买 表头的列名称 链接按钮上显示的文本 说明 数据列ProductId将作为超链接的URL地址 设置URL的格式 1 每页显示一行 控件gvProduct的属性Columns值设置如图6-9所示,添加1个TemplateField字段和1

属性值 ddlCategory True GvProduct True False 说明 “分类名”下拉列表框的编程名称 当下拉列表框中的值改变时,引发页面往返 GridView 控件的编程名称 允许分页 不自动生成列 (3)编写ProductShow.aspx事件代码

在所有事件、方法外声明MyPetShopDataContext对象db,使得该对象可在多个事件代码或方法中使用,代码如下:

MyPetShopDataContext db = new MyPetShopDataContext();

页面首次载入时,将Category表中的CategoryId和Name字段值填充到下拉列表框ddlCategory,事件代码如下:

protected void Page_Load(object sender, EventArgs e) {

//页面第1次载入时填充ddlCategory下拉列表

if (!IsPostBack) {

var categories = from c in db.Category select new {

c.CategoryId, c.Name };

foreach (var category in categories) { new ListItem } }

}

当ddlCategory中改变分类名时,需要重新在gvProduct中显示包含的商品,因此,编写SelectedIndexChanged的事件代码如下:

protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e) {

Bind(); //调用自定义方法Bind()

}

自定义方法Bind()的代码如下: private void Bind() {

//获取选择的分类Id

int categoryId = int.Parse(ddlCategory.SelectedValue); //在Product中查找满足条件的商品 var products = from p in db.Product

where p.CategoryId == categoryId select p; //将查找到的商品绑定到gvProduct gvProduct.DataSource = products; gvProduct.DataBind(); }

当改变gvProduct的当前页时,需要设置新的页面索引值,并重新显示包含的商品,因此,编写PageIndexChanging事件代码如下:

protected void gvProduct_PageIndexChanging(object sender, GridViewPageEventArgs e) {

//设置当前页索引值为新的页面索引值 gvProduct.PageIndex = e.NewPageIndex; Bind(); //调用自定义方法Bind()

} (4)设计Profile

由于购物车中需要存储商品编号、商品号、商品价格、购买数量和总价等信息,所以定