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

  完成for循环后我们将检查是否已经添加了产品.毕竟,用户可能没有输入任何的信息就点击了“Add Products from Shipment”按钮.如果在ProductsDataTable里至少存在一个产品,将调用ProductsBLL class类的UpdateWithTransaction方法,接下来对名为ProductsGrid的GridView控件重新进行绑定,最新添加的产品就会出现在出现在展示界面里.StatusLabel将被更新以显示一个确认消息,然后调用ReturnToDisplayInterface,隐藏添加界面而显示展示界面.

  如果没有添加任何产品,添加界面照样会隐藏,不过会显示一个消息“No products were added. Please enter the product names and unit prices in the textboxes”.

图13显示的情况是用户输入了unit price值而没有输入相应的产品name;图14显示的是成功添加3个产品后的展示界面.图15显示的是其中2个产品的界面(还有1个在前面那一页)

/uploads/allimg/200612/1H32W217_0.png


图13:当输入Unit Price值,产品的Name也是必需的

/uploads/allimg/200612/1H32W543_0.png


图14:添加了3个由供应商Mayumi提供的Veggies类产品

/uploads/allimg/200612/1H329A92_0.png


图15:新添加的产品可以在GridView里的最后一页找到

  注意:本文使用的批添加逻辑将insert封装在一个事务里.要证实的话,我们可以有意的导入一个数据库级的错误(database-level error).比如:对ProductsRow instance实例的 CategoryID属性而言,我们不像上面那样用Categories DropDownList控件的selected值来赋值,而是用i * 5对其赋值.这里的i是指介于1到5之间的循环索引值(loop indexer).因此,当添加2个或更多的产品时,第一个产品的CategoryID值(5)是有效的,而后面的产品的CategoryID值就无效了,因为其值与表Categories里的CategoryID值不匹配(译注:因为第2个产品的CategoryID值为10;第3个的为15,依次类推).后果是第一个产品的INSERT操作成功,后面的操作失败,因为违反了外键约束.由于我们的该批添加是原子操作,第一个INSERT会回滚,数据库就会返回到开始批添加前的状态

结语:

  在本文及前2章,我们创建里对数据进行批更新、批删除、批添加的界面.这些界面都用到了事务。该事务,我们是在第61章《在事务里对数据库修改进行封装》里在数据访问层Data Access Layer里添加的.在某些情况下,这些批数据处理界面可以极大的提升最终用户的效率.

  对处理批数据的考察到此为止.接下来的系列文章里我们将考察Data Access Layer数据访问层里的多种更高级的情况。包括在TableAdapter的方法里使用存储过程、在DAL里进行连接和命令级(connection- and command-level)的设置、对连接字符串进行加密等.

  祝编程快乐!

作者简介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术。大家可以点击查看全部教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望对大家的学习ASP.NET有所帮助。

您可能感兴趣的文章:

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

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