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

图7-10 属性Columns值设置 表10-1 HyperLinkField字段各属性设置表

属性名 DataNavigateUrlFields 属性值 CategoryId 说明 数据列CategoryId将作为超链接的URL地址 DataNavigateUrlFormatString DataTextField HeaderText 属性名 DataField DataFormatString HeaderText (3)编写Category.ascx事件代码

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

MyPetShopDataContext db = new MyPetShopDataContext();

页面载入时,将Category表中的CategoryId和Name字段以及各类商品的数量ProductCount绑定到gvProduct控件上,事件代码如下: protected void Page_Load(object sender, EventArgs e) {

var categories = from c in db.Category

join p in db.Product on c.CategoryId equals p.CategoryId into product select new {

c.CategoryId, c.Name,

ProductCount = product.Count() };

gvProduct.DataSource = categories; gvProduct.DataBind();

}

(4)添加测试页测试用户控件。

添加CategoryShow.aspx,将用户控件拖动到该页面上,则呈现如图7-11所示的设计页面。切换到“源”视图,可见在第二行添加了控件的注册代码如下:

<%@ Register src=\ tagname=\ tagprefix=\ %> 在

标签中添加了控件Category1,代码如下:

~/ProductShow.aspx?CategoryId={0} Name 分类名称 表10-2 BoundField字段各属性设置表

属性值 ProductCount {0} 商品数量 说明 将显示字段ProductCount的值 绑定字段的显示格式 表头的列名称 设置URL的格式 将显示字段Name的值 表头的列名称

图7-11设计界面(1)

(5)浏览CategoryShow.aspx进行测试。

2. 利用母版页重新设计MyPetShop各页面

(1)设计及母版页。

添加母版页MasterPage.master,如图7-2所示,添加一个用于布局的3行1列表格,将例子中的ProductShow.aspx页面的Div层Header复制到第1行中;将第2行的单元格拆分为两个单元格,在左边添加用户控件Category.ascx,在右边添加一个ContentPlaceHolder控件并将属性ID值设置为ContentPlaceHolderRight;在第3行输入版权声明,并设置单元格的属性Class值为Position。

(2)修改ProductShow.aspx页。

以MasterPage.master为母版新建ProductShow.aspx,将原ProductShow.aspx中的GridView控件gvProduct复制到控件ContentPlaceHolderRight中,设计完成后的界面如图7-12所示

图7-12 设计界面(2)

(3)编写ProductShow.aspx事件代码。

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

MyPetShopDataContext db = new MyPetShopDataContext();

页面载入时,如果Request数据集合中包含类别CategoryId的值则调用自定义方法Bind()查找该类别的商品并绑定到gvProduct,事件代码如下: protected void Page_Load(object sender, EventArgs e) { if {

Bind(); // 调用自定义方法Bind()绑定商品信息到gvProduct }

}

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

//获取选择的分类Id

if (Request.QueryString[\] != null) {

int categoryId = int.Parse(Request.QueryString[\]); //在Products表中查找满足条件的产品 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) {