在ASP.NET 2.0中操作数据之六十九:处理Computed Co(5)

https://img.jbzj.com/file_images/article/201605/2016051910262555.png


图12:每行展示一个Supplier

  点击某行的Edit按钮将导致页面回传,且该行显示为一个编辑界面(如图13),头3行呈现为默认的编辑界面——一个TextBox控件,且其Text属性为该数据域(data field)的值.不过FullContactName列仍然呈现为一个文本框.在Data Source设置向导完成并向GridView控件添加完相应的BoundFields时,FullContactName BoundField的ReadOnly属性为true。我们在第四步注意到,FullContactName列的ReadOnly属性为true,因为TableAdapter意识到该列为一个computed column列.

/uploads/allimg/200612/1HFAV2_0.png


图13:FullContactName列为只读

  我们改动这3个列中至少一个列的值,点Update按钮.我们发现FullContactName列的值跟着发生改变.

  注意:由于GridView当前用的是BoundFields,导致编辑时用的是默认的界面.又由于CompanyName列是必需的,我们应将其转化成一个TemplateField以包含一个RequiredFieldValidator控件.我将此作为一个练习留给读者,你可以参考第19章《给编辑和新增界面增加验证控件》,看如何一步步的将BoundField转换成 TemplateField,再添加一个确认控件.

结语:

  当创建一个表时,Microsoft SQL Server允许我们创建一个computed columns列.这些computed columns列引用该条记录的其它列,再通过一个表达式对其赋值.由于其值来源于一个表达式,因此这种列是只读的,且不能通过INSERT 或 UPDATE statement对其赋值.正是如此,当在一个TableAdapter的主查询里引用computed column的话,要想自动的生成对应的INSERT, UPDATE,和DELETE statements有点麻烦.

  在本文,我们探讨了使用computed columns列面临的挑战.具体来说,由于使用ad-hoc SQL statements的TableAdapters自身固有的不稳定性,我们探讨了使用存储过程的情况.当使用TableAdapter向导创建一个新的存储过程的时候,很重要的一点是,最开始不要在主查询里引用任何的computed columns,不然就不能自动的生成对应的存储过程.完成向导后,我们要手动修改SelectCommand属性以引用computed columns列.

  祝编程快乐!

作者简介

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

您可能感兴趣的文章:

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

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