在ASP.NET 2.0中操作数据之六十四:GridView批量添加(4)

  从工具箱里拖一个Label Web控件到页面顶部,设其ID为StatusLabel,清除其Text属性,设其Visible属性和EnableViewState属性为false. 我们在以前的教程里探讨过,将EnableViewState属性设为false的话,我们可以通过编程的方式改变Label控件的属性值,而当发生页面回传时其又回到默认状态.当发生某些用户行为(user action)时,会显示状态信息,而当页面回传时,状态信息又消失了.最后设置StatusLabel的CssClass属性为“Warning”,这是我们在Styles.css文件里定义的CSS class名称.

下图显示的是添加并设置Label控件后的样子

/uploads/allimg/200612/1H32X917_0.png


图11:在Panel控件上面放置id为StatusLabel的Label控件

第三步:在展示界面和添加界面之间切换

到此,我们已经完成了展示和添加界面,不过我们仍然有2个任务要做:

1.在展示界面和添加界面之间切换
2.将产品添加到数据库

当前,展示界面是可见的而添加界面是隐藏的.这是因为DisplayInterface Panel控件的Visible属性为true(默认值), 而InsertingInterface Panel控件的Visible属性为false.

当点击“Process Product Shipment”按钮时,我们向从展示界面切换到添加界面。为此,创建该按钮的Click事件处理器,包含以下代码:

protected void ProcessShipment_Click(object sender, EventArgs e) { DisplayInterface.Visible = false; InsertingInterface.Visible = true; }

该代码仅仅隐藏DisplayInterface Panel而显示InsertingInterface Panel.

  接下来,我们为添加界面里的“Add Products from Shipment”和“Cancel” 按钮创建事件处理器.当任何一个按钮点击时,我们需要切换到展示界面.创建这2个按钮的Click事件处理器以调用ReturnToDisplayInterface方法——我们马上就要创建该方法.

  该方法除了隐藏InsertingInterface Panel并显示DisplayInterface Panel外,还需要将Web控件返回到其预编辑状态(pre-editing state).即把DropDownList控件的属性SelectedIndex设置为0,清除TextBox控件的Text属性.

  注意:仔细思考一下,如果在返回展示界面以前,我们没有将这些控件返回到预编辑状态的话将会发生什么事情呢?比如用户点击“Process Products from Shipment”按钮,然后输入产品信息,再点“Add Products from Shipment”按钮,这样将添加产品并返回展示页面。如果用户又想添加另一批产品,一旦点击“Process Product Shipment”按钮时将切换到添加界面,但是DropDownList控件的值和TextBox控件的值依然是以前的值.

protected void AddProducts_Click(object sender, EventArgs e) { // TODO: Save the products // Revert to the display interface ReturnToDisplayInterface(); } protected void CancelButton_Click(object sender, EventArgs e) { // Revert to the display interface ReturnToDisplayInterface(); } const int firstControlID = 1; const int lastControlID = 5; private void ReturnToDisplayInterface() { // Reset the control values in the inserting interface Suppliers.SelectedIndex = 0; Categories.SelectedIndex = 0; for (int i = firstControlID; i <= lastControlID; i++) { ((TextBox)InsertingInterface.FindControl("ProductName" + i.ToString())).Text = string.Empty; ((TextBox)InsertingInterface.FindControl("UnitPrice" + i.ToString())).Text = string.Empty; } DisplayInterface.Visible = true; InsertingInterface.Visible = false; }

  上述2个Click事件处理器都仅仅简单的调用ReturnToDisplayInterface方法,不过我们将在第四步完善“Add Products from Shipment”的Click事件,添加代码以保存产品.

  ReturnToDisplayInterface方法一开始就把Suppliers和Categories的DropDownList控件返回其第一项;常量firstControlID和lastControlID分别用来设置添加界面里的标明产品名称和单价的TextBoxe控件的开始和结束索引值. 在一个for循环里设置这些控件的Text属性为空字符串.最后重新设置Panels控件的Visible属性,以显示展示界面而隐藏添加界面.

  花点时间在浏览器里测试该页面,当首次登录时你将看到如图5所示的画面,点“Process Product Shipment”按钮,页面将回传并切换到如图12所示的添加界面,不管点“Add Products from Shipment”还是“Cancel”按钮都将返回展示界面.

  注意:当浏览添加界面时,测试一下与unit price TextBox对应的验证控件。如果你输入的不是货币值或价格比0小,当点击“Add Products from Shipment”按钮时,就会弹出一个客户端的警告消息.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjyppj.html