📄 c4.html
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>c4</title>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
overflow-x:hidden;
SCROLLBAR-FACE-COLOR: #0F67AE;;
SCROLLBAR-HIGHLIGHT-COLOR: #2490fc;
SCROLLBAR-SHADOW-COLOR: #48d8fc;
SCROLLBAR-3DLIGHT-COLOR: #0090fc;
SCROLLBAR-ARROW-COLOR: #ffffff;
SCROLLBAR-TRACK-COLOR: #0F67AE;
SCROLLBAR-DARKSHADOW-COLOR: #006cfc;
SCROLLBAR-BASE-COLOR: #fcfcfc;
}
-->
</style>
<link href="../sft.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="730" border="0" cellpadding="0" cellspacing="0" bgcolor="#0F67AE">
<!--DWLayoutTable-->
<tr>
<td width="716" height="397" valign="top" class="cpadding" bgcolor="#0F67AE"><p>一、设计用户控件及主控页</p>
<p>为了使得系统具有很好的可重用性和可维护性,应该尽可能使用用户控件(User Control)和主控页(Master Page)以便发挥代码重用的优势以减少重复劳动,并且使得各个网页的显示风格一致。</p>
<p>二、设计主页</p>
<p>主页是客户访问的第一个页面,可以给客户提供第一印象。它的主要任务是吸引客户并引导客户进入选购界面。</p>
<p>三、产品类型与产品目录之间同步 </p>
<p>为了使得“产品类型表”与“产品表”之间取得同步,在显示类型的GridView的Column属性中增添一“超链接列”,并且为此列设置同步所需的“URL”、“URL字段”、“URL格式字符串”等,使得单击该超链接时向“显示产品”页面传送出同步字段“CategoryID”。</p>
<p>并且在“显示产品”页面中利用QueryString设置查询语句,以便根据属性表传来的参数进行查询,以达到两表同步的目的。</p>
<p>四、选择产品</p>
<p>为了选择商品,在产品表中的栏目(Column)中增加一按钮(Button),并且在它的CommdName属性中取名为“select”(也可以取其他名字)。当单击该按钮时,将该产品的副本取出来动态生成数据表,利用这个动态数据表来生成“购物车”。 </p>
<p>为了生成这个数据表,需要解决以下三个问题: </p>
<p>1)单击按钮时将触发什么事件; </p>
<p>2)如何提取GridView控件中的数据; </p>
<p>3)如何创建动态数据表并将取出的数据放入其中。</p>
<p>1.选择按钮触发的事件 </p>
<p>GridView 控件中的RowCommand事件,是GridView控件内任一按钮都将触发的事件。因此在使用这个事件时,先要判断当前点击的是哪个按钮。判断的方法是根据按钮的命令名,语句如下: </p>
<p>If (e.CommandName=="Select") </p>
<p>{…} </p>
<p>2.如何取出数据 </p>
<p>根据鼠标点击的“行”以及在GridView中的“列”,可以取出相应的数据。确定点击行的语句是: </p>
<p>int index = Convert.ToInt32(e.CommandArgument);</p>
<p> GridViewRow row = GridView1.Rows[index]; </p>
<p>取出某列的语句是: </p>
<p>string bhText = row.Cells[1].Text; </p>
<p>string mcText = row.Cells[2].Text; </p>
<p>上述语句提取出鼠标点击的行中第2列和第3列中的数据(列的序号从0开始)。 </p>
<p>3.如何创建数据表 </p>
<p>先根据类库中的类生成数据表对象,然后定义数据表的结构,定义数据表各列的数据类型及标题。语句如下:</p>
<p> System.Data.DataTable Cart = new System.Data.DataTable();// 定义数据表对象 </p>
<p>if (e.CommandName == "select")</p>
<p> { if (Session["ShoppingCart"] == null) { </p>
<p>Cart.Columns.Add("商品编号", typeof(int)); // 确定各列的标题及类型 </p>
<p>Cart.Columns.Add("商品名称", typeof(string));</p>
<p> Cart.Columns.Add("单元含量", typeof(string));</p>
<p> Cart.Columns.Add("单价", typeof(double));</p>
<p> Session["ShoppingCart"] = Cart; } // 再取出各列的数据,同时进行类型转换 </p>
<p>Cart = (System.Data.DataTable)Session["ShoppingCart"];</p>
<p> int index = Convert.ToInt32(e.CommandArgument);</p>
<p> GridViewRow row = GridView1.Rows[index]; </p>
<p>string bhText = row.Cells[1].Text; </p>
<p>string mcText = row.Cells[2].Text; </p>
<p>string dyText = row.Cells[4].Text; </p>
<p>string djText = row.Cells[5].Text; </p>
<p>int bh = int.Parse(bhText); </p>
<p>double dj = double.Parse(djText); // 然后增加数据行,并将数据填入该行的各列之中。 </p>
<p>System.Data.DataRow rr = Cart.NewRow(); </p>
<p>rr["商品编号"]=bh; </p>
<p>rr["商品名称"] = mcText; </p>
<p>rr["单元含量"] = dyText; </p>
<p>rr["单价"] = dj; Cart.Rows.Add(rr); // 将新行加入数据表中 </p>
<p>Session["ShoppingCart"] = Cart; </p>
<p> } </p>
<p>由于默认情况下,网页之间不保持状态,当你选择多行时,购货车中只会保留最后一项选择。为了能够在购货车中保留多项选择,需要利用Session 对象来保持状态。下列语句的作用就是通过Session来保持状态。 </p>
<p>if(Session["ShoppingCart"]==null) </p>
<p>{ </p>
<p>Cart = new DataTable(); </p>
<p>… </p>
<p>Session["ShoppingCart"]=Cart; </p>
<p>}</p>
<p> Cart = (System.Data.DataTable)Session["ShoppingCart"];</p>
<p> 综合以上所述,创建内存数据表的完整代码如下: </p>
<p> void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) </p>
<p>{ </p>
<p>System.Data.DataTable Cart = new System.Data.DataTable(); // 生成内存数据表对象 </p>
<p>if (e.CommandName == "select") </p>
<p>{ </p>
<p>if (Session["ShoppingCart"] == null) // 定义数据表结构 </p>
<p>{ </p>
<p>Cart.Columns.Add("商品编号", typeof(int)); </p>
<p>Cart.Columns.Add("商品名称", typeof(string));</p>
<p> Cart.Columns.Add("单元含量", typeof(string));</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -