📄 c4.html
字号:
<p> Cart.Columns.Add("单价", typeof(double)); </p>
<p>Session["ShoppingCart"] = Cart; </p>
<p>} </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; </p>
<p>Cart.Rows.Add(rr); // 将新行加入数据表中</p>
<p> Session["ShoppingCart"] = Cart; // 将数据表放入Session中</p>
<p> } } </p>
<p class="STYLE3">五、显示购物车</p>
<p>在购货车的显示页面中,将Session["ShoppingCart"]作为数据源显示在GridView中,语句如下: </p>
<p>private void Page_Load(object sender, System.EventArgs e) { </p>
<p>GridView1.DataSource= Session["ShoppingCart"];</p>
<p> GridView1.DataBind(); </p>
<p>} </p>
<p>购货车在这里就是放在Session对象中的数据表。用Session对象保存购货车是最恰当的方式。因为每个客户都有属于自己的Session对象,即使多个客户同时进行网上购买时,他们的数据也不会混杂。另外Session对象是一种临时性的容器,非常符合购货车的特点。 </p>
<p>首先在数据库中创建“订单表”。结账窗体界面中的表的结构最好与数据库中的“订单表”一致。和购货车相比,数据表中增加了几个字段(如订购数量、合计等),因此应该重新组织数据表,并使用另一个Session对象(这里使用ShoppingCart2)。 </p>
<p>为了完善购货车中的数据以便转入结账界面,在购货车的窗体中还需要执行以下5方面的工作。 </p>
<p>(1) 在窗体页中用一TextBox控件以输入用户标志。 </p>
<p>(2) 在GridView控件中增加一个按钮(Button),将其CommandName属性设成“select”。 </p>
<p>(3) 在GridView控件中增加一模板列,放入TextBox控件,以便输入购买数量。 </p>
<p>(4) 在窗体页的Page_Load事件中加上条件:</p>
<p>if(!IsPostBack) { … }。 </p>
<p>(5) 在GridView的RowCommand事件中编写代码。</p>
<p>1.输入客户标志</p>
<p>客户标志必须具有惟一性和可靠性,根据该标志能够与客户联系,确定发货的方法和地址,为此须增加输入客户标志的TextBox控件,以及相应的RequiredFieldValidator校验控件,以防止输入中的遗漏。</p>
<p>2.在GridView中增加按钮 </p>
<p>通过GridView的Columns属性中增加一按钮,并为它的CommandName属性命名(例如命名为“buy”),以便确认选择项。</p>
<p>3.增加模板列 </p>
<p>在GridView控件中增加一个模板列,将TextBox1控件放入ItemTemplate模板中,以便输入购买数量。先将其默认值设为1。</p>
<p>4.在窗体页的Page_Load事件中增加条件 </p>
<p>为了进行结账的计算,须在Page_Load事件中增加以下条件:</p>
<p> private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { </p>
<p>GridView1.DataSource= Session["ShoppingCart"]; </p>
<p>GridView1.DataBind(); </p>
<p>} } </p>
<p>IsPostBack属性是为了区分网页是第一次被打开,还是后续打开(事件处理后的返回)。当网页为后续打开时,该属性为true,否则为false。 </p>
<p>if(!IsPostBack) { // 执行语句 } 以上代码表明只有网页第一次(不是后续)打开时才执行大括号中的语句。</p>
<p>5.在GridView的RowCommand事件中编写代码 </p>
<p>将购物车的信息显示出来。</p>
<p class="STYLE3">六、结 账 </p>
<p>1.结账网页的数据显示 </p>
<p>在结账网页中的GridView控件应该以Session["ShoppingCart2"]作为数据源显示数据,其语句如下:</p>
<p> private void Page_Load(object sender, System.EventArgs e) { </p>
<p>GridView1.DataSource= Session["ShoppingCart2"]; </p>
<p>GridView1.DataBind();</p>
<p> }</p>
<p>2.在GridView控件中增加复选框</p>
<p>为了允许客户在结账时有机会对自己的选择做进一步调整,可以在结账界面的每条记录前面增加一复选框。默认情况下这些复选框都被选中,如果想撤销该项选择时,只须取消该复选框的选择即可,订单表中将不会存入被取消的选项。 为了增加复选框,需要在GridView中通过Column属性增添一“模板”字段,并且在模板中增添复选框控件。</p>
<p>在这个界面中,客户标志和表格中的数据均从上一个网页传来。在结账界面主要完成汇总计算以及将订单表存入数据库的操作。</p>
<p>3.汇总的计算 </p>
<p>当单击【汇总】按钮时,显示框中将显示总和。如果改变了复选框的选择,汇总的结果也应该跟随着改变。为了进行汇总计算,需设置循环语句,逐条检查复选框的选择状态,只有该复选框被选中时,才将该记录的数据计入汇总中。此处需要用到的类和方法 如下:</p>
<p> (1)GridView1.Rows[ii]用来表示 GridView 控件中的某一行。</p>
<p> (2)FindControl("控件的id")方法:用来在当前的命名容器中搜索带指定 id 参数的服务器控件。 </p>
<p>汇总按钮的代码如下: </p>
<p>void Button2_Click(object sender, EventArgs e) { </p>
<p>double sum=0.0; </p>
<p>for(int ii=0; ii < GridView1.Rows.Count;ii++) </p>
<p>{ </p>
<p>CheckBox cc = (CheckBox)GridView1.Rows[ii].Cells[0].FindControl("CheckBox1"); </p>
<p>if(cc.Checked) // 若复选框被选中 </p>
<p>{ </p>
<p>sum = sum + (double.Parse(GridView1.Rows[ii].Cells[7].Text));</p>
<p> } } </p>
<p>TextBox2.Text=sum.ToString(); // 显示汇总结果 </p>
<p>} </p>
<p>为实现复选框的功能,在Page_Load事件中需要做一些改变。代码如下: </p>
<p>void Page_Load(object sender, EventArgs e) </p>
<p>{ if (!IsPostBack) </p>
<p>{ TextBox1.Text = Session["khbz"].ToString();</p>
<p> GridView1.DataSource = Session["ShoppingCart2"]; </p>
<p>GridView1.DataBind(); </p>
<p>} } </p>
<p>七、保存订单</p>
<p>如果客户对结果感到满意时,可单击【存入数据库】按钮,将订单存入数据库的“订单表” 中。存入时使用存储过程,为此需要先建立订单表,表的结构如前面所示。</p>
<p>从【工具箱】中拖入一SqlDataSource控件并与存储过程连接。连接过程中最大的不同点是对待定参数赋值的方式。这些待定参数的值不是从固定的控件中读取,而是通过循环语句从GridView控件(代表内存中的订单)的字段中获得。 待定参数的赋值过程是:</p>
<p>开始对GridView控件逐条记录进行循环;在循环语句中首先取出复选框的状态,判断复选框是否被选中;如果被选中,先清除原有参数,然后给各参数赋值;最后执行Insert语句以存入订单。</p>
<p>八、查看订单</p>
<p>为了保证客户只能查看自己的订单,订单的显示应该以客户标志(Session[“Khbj”])以及当天的日期(Session[“ccsj”])作为查询条件。为此在“查看订单.aspx”网页中设置GridView控件,并通过数据源控件利用Session设置查询条件(“客户ID”与“订购时间”)。</p>
<p>利用上述语句可以查看客户当天的订单。除此而外,为了给客户最后的修改机会,还可以在显示订单表中增加删除按钮,允许客户删除自己当天的订单。</p>
<p> </p></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -