﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-№.零零伍</title><link>http://www.cnblogs.com/eddie005/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 04:47:44 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 04:47:44 GMT</pubDate><ttl>60</ttl><item><title>http://www.heshunjc.cn/</title><link>http://www.cnblogs.com/eddie005/archive/2007/08/22/865231.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Wed, 22 Aug 2007 05:33:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2007/08/22/865231.html</guid><description><![CDATA[<p>阅读: 318 评论: 0 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2007-08-22 13:33 <a href="http://www.cnblogs.com/eddie005/archive/2007/08/22/865231.html" target="_blank">原文链接</a></p><p><font face="Times New Roman" color="#000000" size="3"><a title="东莞市和顺建材商行" href="http://www.heshunjc.cn/ "><font face="Times New Roman" color="#000000" size="3">http://www.heshunjc.cn/</font> </a></font></p>
<img src="http://www.cnblogs.com/eddie005/aggbug/865231.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/eddie005/archive/2007/08/22/865231.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/eddie005/archive/2007/08/22/865231.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Scott Mitchell 的ASP.NET 2.0数据教程之十六::概述插入、更新和删除数据</title><link>http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Mon, 28 Aug 2006 08:04:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html</guid><description><![CDATA[<p>阅读: 15562 评论: 36 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2006-08-28 16:04 <a href="http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html" target="_blank">原文链接</a></p><h1 style="margin: 9pt 0cm 3pt"><font size="5"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中操作数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">::</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">概述插入、更新和删除数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h1>
<p class="MsoNormal" style="margin: 3pt 0cm; text-indent: 36pt"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">导言</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">结束前面的几节，我们已经探讨过了如何使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件来显示数据。这些控件简单地操作提供给它的数据。一般地，这些控件通过使用一个数据源控件，例如</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">来存取数据。我们已经看过了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是如何在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面和潜在的数据之间扮演一个代理的角色。当一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">需要显示数据时，它调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，这个方法转而调用一个来自我们的业务逻辑层（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）的方法，继而调用一个适当的数据访问层（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）的表适配器（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）的方法，从而它发送一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SELECT</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Northwind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据库。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font size="2"><font face="Verdana"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></font></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">记得在我们的教程里当创建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的表适配器时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">自动地添加从潜在数据库插入、更新和删除数据的方法。此外，在</span><em style="mso-bidi-font-style: normal"><span lang="EN-US"><a href="http://reeezak.cnblogs.com/archive/2006/06/24/434439.html" target="_blank"><span lang="EN-US" style="color: #56662d; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><span lang="EN-US">创<span lang="EN-US">建一个业务逻辑层</span></span></span></a></span></em><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节我们已经设计了调用这些数据更改的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">除了它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">还有</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。跟</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法类似，这三个方法映射到一个隐含的对象。当配置插入、更新或删除数据时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件提供了一个修改潜在的数据的用户界面。这个用户界面调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">、</span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，它们继而调用隐含对象的关联方法（见图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig01css.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 1: ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法提供一个到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的代理</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">本节我们将看看如何映射</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的类，也看看如何配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件提供修改数据的功能。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第一步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">创建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Insert</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">教程页面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在我们开始探讨如何插入、修改和删除数据之前，让我们先花些时间在我们的站点项目里添加这些本节里和下一节里需要的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面。首先添加一个名为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditInsertDelete</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的新文件夹。然后，在这个文件夹里添加下面这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，并且确认每个页面都关联</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Site.master</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">母版页：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">Default.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">Basics.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">DataModificationEvents.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">ErrorHandling.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">UIValidation.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">CustomizedUI.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">OptimisticConcurrency.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">ConfirmationOnDelete.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l10 level1 lfo12"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New" size="2">UserLevelAccess.aspx</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig02cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 2: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加这些与数据更改关联的教程的页面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类似在其它文件夹里，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditInsertDelete</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹里的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Default.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将列出这些教程章节。记得用户控件提供这个功能。因此，从解决方案资源管理器中拖拽一个这个用户控件到页面的设计视图，从而添加它到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Default.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig03cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 3: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SectionLevelTutorialListing.ascx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">用户控件到</span><span lang="EN-US"><font face="Verdana">t</font></span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">Default.asp</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">x</span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面</span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">最后，添加这些页面地址项到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Web.sitemap</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件。明确地，在</span><span lang="EN-US"><font face="Verdana">Customized Formatting</font></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New"> &lt;siteMapNode&gt;</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">后添加如下标记：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;siteMapNode title="Editing, Inserting, and Deleting" url="~/EditInsertDelete/Default.aspx" description="Samples of Reports that Provide Editing, Inserting, and Deleting Capabilities"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/Basics.aspx" title="Basics" description="Examines the basics of data modification with the GridView, DetailsView, and FormView controls." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/DataModificationEvents.aspx" title="Data Modification Events" description="Explores the events raised by the ObjectDataSource pertinent to data modification." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/ErrorHandling.aspx" title="Error Handling" description="Learn how to gracefully handle exceptions raised during the data modification workflow." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/UIValidation.aspx" title="Adding Data Entry Validation" description="Help prevent data entry errors by providing validation." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/CustomizedUI.aspx" title="Customize the User Interface" description="Customize the editing and inserting user interfaces." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/OptimisticConcurrency.aspx" title="Optimistic Concurrency" description="Learn how to help prevent simultaneous users from overwritting one another&amp;apos;s changes." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/ConfirmationOnDelete.aspx" title="Confirm On Delete" description="Prompt a user for confirmation when deleting a record." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp; </span>&lt;siteMapNode url="~/EditInsertDelete/UserLevelAccess.aspx" title="Limit Capabilities Based on User" description="Learn how to limit the data modification functionality based on the user's role or permissions." /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/siteMapNode&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在更新了</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Web.sitemap</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">后，花些时间通过浏览器访问本教程站点。左边的菜单里现在包含对应编辑、插入和删除教程的项。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig04cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 4: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">站点地图现在包含了对应编辑、插入和删除教程的项</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第二步</span><span lang="EN-US"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加并配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件</span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件在数据修改功能和版面上都有所不同，就让我们逐个研究。不过，与其让这三个控件各自使用自己的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，还不如让我们仅创建一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">让这个三个控件的例子共用。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">打开</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Basics.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，从工具箱拖拽一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到设计器，从它的职能标记中点击配置数据源链接。因为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类是唯一一个提供修改、插入和删除方法的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类，配置该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用这个类。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig05cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 5: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类</span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在下一屏中，通过选择适当的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">tab</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页并从下拉列表中选择方法，我们可以指定</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类里的哪些方法被映射到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">6</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，至今我们应该很熟悉，映射</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">GetProducts()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法可以通过选择上方的适当的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">tab</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页进行配置。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig06cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 6: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">让这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">返回所有产品</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">7</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">8</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">9</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US"><font face="Verdana">INSERT,</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US"><font face="Verdana">DELETE</font></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">tab</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页。配置它们从而</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法分别调用</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">AddProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig07cs.png" border="0" /><br />
图</span><font face="Verdana"> <span lang="EN-US" style="mso-fareast-language: ZH-CN">7</span></font><span lang="EN-US"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">映射</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductBLL</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">类</span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig08cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana">8: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">映射</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductBLL</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">类</span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US"><font face="Verdana">Add</font></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Product</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法</span></font></h6>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig09cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana">9: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">映射</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductBLL</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">类</span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法</span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">你也许已经注意到在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">INSERT</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">tab</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页里的下拉列表中已经选择了各自的方法。这是由于我们使用了</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">DataObjectMethodAttribute</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它修饰了</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProducstBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类。例如，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法是如下这样子声明的：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">public bool DeleteProduct(int productID)<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">{<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font face="Courier New"><font size="2">}<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataObjectMethodAttribute</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">指示每一个方法的目的</span><span lang="EN-US"><font face="Verdana">&#8211;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是否为了查询、插入、更新或删除</span><font face="Verdana"><span lang="EN-US">&#8211;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是否它的默认值。如果你在创建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的时候省略了这些属性，现在你将需要手工从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">INSERT</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">tab</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页里手工选择方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当确认已经适当的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法映射到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法后，点击完成结束此向导。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">检查</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的标记</span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在通过数据源配置向导完成了对</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的配置之后，到源视图去检查一下生成的声明标记。</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">&lt;asp:ObjectDataSource&gt;</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">标签列明了隐含的对象和需要调用的方法。另外，还有</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertParameters</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它们映射</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">AddProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的输入参数：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="DeleteProduct"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>InsertMethod="AddProduct" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>TypeName="ProductsBLL" UpdateMethod="UpdateProduct"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DeleteParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/DeleteParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;UpdateParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productName" Type="String" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="supplierID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="categoryID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="quantityPerUnit" Type="String" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitPrice" Type="Decimal" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsInStock" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsOnOrder" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="reorderLevel" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="discontinued" Type="Boolean" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/UpdateParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;InsertParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productName" Type="String" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="supplierID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="categoryID" Type="Int32" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="quantityPerUnit" Type="String" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitPrice" Type="Decimal" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsInStock" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsOnOrder" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="reorderLevel" Type="Int16" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="discontinued" Type="Boolean" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/InsertParameters&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:ObjectDataSource&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含了对应它关联的方法的每一个输入参数的</span><span lang="EN-US"><font face="Verdana">parameter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，就像当</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">被配置为调用预期一个输入参数的查询方法（例如</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">GetProductsByCategoryID(<em style="mso-bidi-font-style: normal">categoryID</em>)</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）时出现的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SelectParameter</font></span></span><span lang="EN-US"><font face="Verdana">s</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一栏。正如我们马上即将看到的，这些</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值在调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法之前自动地通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">被设置。必要时这些值也可以通过编程设置，这在以后的章节里讨论。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用数据源配置向导来配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的另一个影响是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">设置了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://msdn2.microsoft.com/en-US/library/system.web.ui.webcontrols.objectdatasource.oldvaluesparameterformatstring(VS.80).aspx"><font face="Verdana">OldValuesParameterFormatString</font></a></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">original_{0}</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这个属性值用来包含数据被编辑时的原始值，它在下面两种情况下非常有用：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l3 level1 lfo15"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font size="2">如果，当编辑一条记录时，用户可以修改主键的值。在这种情况下，新的主键的值和原始的主键值都需要提供，这样具有这个原始主键值的数据库记录才可以被找到然后才能将它的值更新。</font></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l3 level1 lfo15"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当使用开放式并发。开放式并发是为了保证同时操作的用户不至于覆盖另一个用户所做更改的一种技巧，这也是后面的教程中的一节（</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://www.cnblogs.com/eddie005/archive/2006/08/01/OptimisticConcurrency.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">实现开放式并发</span></span></a></span></em><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性指明了隐含对象的更新和删除方法中对应原始值的输入参数的名称。我们将在探讨开发式并发的时候更详细地讨论这个属性和它的目的。不过暂时我放下它，因为我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的方法并不需要这些原始的值因此我们删除这个属性，这一点很重要。如果让</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为除了默认值（</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）以外的其它任何的值，都将在数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件尝试调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法时引发一个错误，因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将尝试将这些原始值参数与</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一起传入。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果对此不是十分清楚，别担心，我们将在未来的章节中研究这个属性和它的效用。暂时，一定要完全地从声明语法中完全地删除这个属性或者将它设置为默认值（</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><font face="Verdana"><strong><span lang="EN-US" style="mso-fareast-language: ZH-CN">:</span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"> </span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">如果你只是简单地从设计视图的属性窗口删除这个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性的值，这个属性依旧会存在于声明语法中，不过被设置为一个空字符串。不幸地，这将依旧导致上面提到的同样的问题。所以，从声明语法里彻底地删除这个属性，或者从属性窗口将其设置为默认值，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第三步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加一个数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件并配置它为数据更改服务</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一般</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSOurce</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">被添加到页面并配置完成，我们可以添加一个数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件用来显示数据并提供一个最终用户修改数据的途径。我们将分别看看</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，因为这些数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件在它们的数据更改功能和配置上都有所不同。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如我们将在本文剩下的部分里看到的，通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件添加一个非常基本的编辑、插入和删除支持是真的非常简单，只需要勾选上一对</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。现实中提供这样的功能有许多微妙之处和边缘案例，这要比仅仅点几下要棘手得多。但是，本教程里，只着眼于提供简单的数据修改功能。以后的章节将研究在现实中不容置疑地出现的问题。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中删除数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">首先，从工具箱拖拽一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到设计器。然后，通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的智能标记中从下拉列表中选择从而绑定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。在这里</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的声明标记将是：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ReadOnly="True" SortExpression="ProductID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="SupplierID" HeaderText="SupplierID" SortExpression="SupplierID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="CategoryID" HeaderText="CategoryID" SortExpression="CategoryID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" SortExpression="QuantityPerUnit" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" SortExpression="ReorderLevel" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="CategoryName" HeaderText="CategoryName" ReadOnly="True"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SortExpression="CategoryName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="SupplierName" HeaderText="SupplierName" ReadOnly="True"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SortExpression="SupplierName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:GridView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过它的职能标记绑定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有下面两点的好处：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo14"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列被自动地添加，对应</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">返回的每一个字段。而且，这些绑定列和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列的属性已经被设置，基于隐含字段的元数据。例如</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsDataTable</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里被标记为只读，因此它们在编辑时也是不可更新的。为了实现这一点，这些绑定列的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.readonly(VS.80).aspx"><font face="Verdana">ReadOnly</font></a></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo14"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeynames(VS.80).aspx"><font face="Verdana" size="2">DataKeyNames</font></a></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性被赋值为隐含对象的主键。这是在使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">来编辑或删除数据的要点，因为这个属性象指出了标识唯一记录的那个字段（或是一组字段）。如果要获得更多的关于</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的信息，请回到</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://lidong.cnblogs.com/archive/2006/07/05/443207.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">使用</span></span><font face="Verdana">GridView </font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">和</span></span><font face="Verdana">DetailView</font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">实现的主</span></span><font face="Verdana">/</font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">从报表</span></span><span lang="EN-US"><span lang="EN-US"><font face="Verdana"> </font></span></span></a></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一节。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">虽然可以通过属性窗口或者声明语法将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，不过这需要你手工添加适当的绑定列和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">标记。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件提供了对行编辑和删除的内建的支持。配置一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">支持删除需要添加一个删除按钮列。当最终用户点击某一特定行的删除按钮时，引发一次回传并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">执行以下步骤：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l8 level1 lfo13"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">赋值</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l8 level1 lfo13"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，删除指定的记录</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l8 level1 lfo13"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过调用它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法</span><span lang="EN-US"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重新绑定到</span><span lang="EN-US"><font face="Verdana">ObjectDataSource </font></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">赋值到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值是点击删除按钮这一行的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段的值。因此正确地设置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性是至关重要的。如果缺少了这个，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步被赋上一个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">null</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值，从而在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中将不会导致删除任何记录。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了给</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">增加删除功能，简单地到它的职能标记里勾选上&#8220;启用删除&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig10cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 10: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">勾选&#8220;启用删除&#8221;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从智能标记中勾选启用删除会添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中补充一个按钮列，它履行一个或多个下属任务：选中一行记录、编辑一行记录和删除一行记录。我们先前在</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://lidong.cnblogs.com/archive/2006/07/05/443207.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">使用</span></span><font face="Verdana">GridView </font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">和</span></span><font face="Verdana">DetailView</font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">实现的主</span></span><font face="Verdana">/</font><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">从报表</span></span><span lang="EN-US"><span lang="EN-US"><font face="Verdana"> </font></span></span></a></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一节的教程里也看到过了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">用作选中记录时如何运作。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandFIeld</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含了一些</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Show<em style="mso-bidi-font-style: normal">X</em>Button</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，它指示哪一系列的按钮显示在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中。通过勾选启用删除，一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ShowDeleteButton</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">被添加到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的列集合。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CommandField ShowDeleteButton="True" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>... BoundFields removed for brevity ...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:GridView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到这里，你可能还不能相信，我们已经完成了给这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">增加删除支持！正如图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">11</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示的，当我们通过浏览器访问此页面时，一列删除按钮已经出现。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig11cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 11: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加一列删除按钮</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果你是从一开始就是自己创建本教程的程序，当测试这个页面点击删除按钮时将引发一个异常。继续读下去学习关于为什么会引发这些异常，还有如何修复它们。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果你是跟随着下载的教程的程序，这些问题已经被解决。然而，我鼓励你从头到尾读一遍下面列出的详细资料来帮助你识别可能出现的问题和适宜的工作区。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果，当尝试删除一个产品，你得到一个类似于&#8220;</span><font face="Verdana"><em style="mso-bidi-font-style: normal"><span lang="EN-US">ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'DeleteProduct' that has parameters: productID, original_ProductID</span></em><span lang="EN-US">,</span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的异常，你可能忘记了从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里删除</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。指定了</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的话，该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">会试图向</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法一并传入</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">productID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">original_ProductID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">输入参数，然而，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法只能接受一个输入参数，导致异常。删除</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性（或设置它为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）指示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">不要试图传入这个原始值的输入参数。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig12cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 12: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">确保</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性已被彻底清除</span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">即使你已经删除了</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，当你尝试删除一个产品时依旧将得到一个异常：&#8220;</span><em style="mso-bidi-font-style: normal"><span lang="EN-US"><font face="Verdana">The DELETE statement conflicted with the REFERENCE constraint 'FK_Order_Details_Products'</font></span></em><span lang="EN-US"><font face="Verdana">.</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Northwind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据库包含了一个在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Products</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表间的字段约束，表示如果一个产品在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表里对应它有一条或多条记录，那么该产品不能被删除。因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Northwind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据库里的每一个产品在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表里都至少有一条记录，所以我们不能删除任何产品，除非我们从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">order details</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表里删除这个产品的关联记录。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig13cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 13: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一个字段间约束阻止了对产品的删除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了我们的教程，就让我们删除</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表里的所有记录吧。在一个真实的应用程序中我们需要的是下面任一措施：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39.35pt; text-indent: -18pt; tab-stops: list 39.35pt; mso-list: l18 level1 lfo19"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过另外一个页面管理</span><span lang="EN-US"><font face="Verdana">order details</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">信息</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39.35pt; text-indent: -18pt; tab-stops: list 39.35pt; mso-list: l18 level1 lfo19"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法里增加包含删除指定产品的订单明细的逻辑</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39.35pt; text-indent: -18pt; tab-stops: list 39.35pt; mso-list: l18 level1 lfo19"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">修改</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所使用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，包含对指定产品的订单明细的删除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">就让我们从</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">表里删除所有记录从而绕过字段间约束的问题。到</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的服务器资源管理器，在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">NORTHWND.MDF</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">节点上点击鼠标右键，选择&#8220;新建查询&#8221;。然后，再查询窗口执行下面的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句：</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">DELETE FROM [Order Details]<br />
</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig14cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 14: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表里删除所有记录</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在清空了</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Order Details</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表后，点击删除按钮将会正确无误地删除这个产品。如果点击了删除按钮但是没有删除该产品，检查并确保</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为主键（</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">:</font></span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">当点击删除按钮时引发一次回传并删了了该记录。这是危险的，因为它很容易意外地错误点击了别的行的删除按钮。以后的章节里我们将看看如何在删除记录时添加一个客户端的确认询问。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中编辑数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">跟删除支持一起，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">还提供了内建的对行编辑的支持。配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GrdiView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">支持编辑将添加一列编辑按钮。从最终用户的角度，点击一行的编辑按钮可使这一行变成可编辑的，它的单元格转换成文本框并包含现有的值，并把编辑按钮替换成保存和取消按钮。在完成了他们期望的更改之后，最终用户可以点击保存按钮提交这些修改，或者点击取消按钮放弃这些修改。在任意一种情况，点击保存或者取消按钮后</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">回到它编辑前的状态。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">站在我们页面开发者的角度，当最终用户点击特定一行的编辑按钮时，引发一次回传并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">执行以下步骤：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l7 level1 lfo16"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span lang="EN-US"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemIndex</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性被赋值为当前点击编辑按钮的行的索引</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l7 level1 lfo16"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过调用它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，</span><span lang="EN-US"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重新绑定自己到</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l7 level1 lfo16"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemIndex</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">相匹配的行呈现为编辑模式。在此模式下，编辑按钮替换为保存和取消按钮，并且那些</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ReadOnly</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">False</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的绑定列呈现为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性被赋值为相应的数据字段的值。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到这里</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">HTML</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">标记被返回到浏览器，允许最终用户可以修改行数据。当用户点击保存按钮，再次发生一次回传，并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">执行以下几个步骤：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l13 level1 lfo17"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值被赋值为最终用户在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的编辑界面输入的值</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l13 level1 lfo17"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，更新指定的记录</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l13 level1 lfo17"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过调用它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，</span><span lang="EN-US"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重新绑定自己到</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性指定的主键的值在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中赋值到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，反之非主键的值来自当前编辑行的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件。如果这一点遗漏了，那么</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">主键的值在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中将被赋上一个值，然后转入第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中将不会导致任何记录的更新。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">编辑功能可以简单地通过勾选</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的智能标记中的启用编辑从而被激活。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig15cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 15: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">勾选启用编辑</span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">勾选启用编辑将添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（如果需要的话）并设置它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ShowEditButton</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。如我们之前所看过的，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含一些</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Show<em style="mso-bidi-font-style: normal">X</em>Button</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，他们指出哪一系列的按钮要显示在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里。在我们的例子里，勾选启用编辑添加</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ShowEditButton</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性到现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>... BoundFields removed for brevity ...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/Columns&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:GridView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">就这样就添加了根本的编辑支持。如图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">16</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所示，编辑界面还比较粗糙</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">&#8211;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">每一个非只读的绑定列呈现为一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这包括像</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的字段，而它们是来自其它表的外键。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig16cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 16: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">点击产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的编辑按钮让此行显示为&#8220;编辑模式&#8221;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了要求用户直接编辑外键，这个编辑界面还缺少了以下途径：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果用户输入一个在数据库中不存在的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，此更新将违反一个字段间的约束，引发一个异常。</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个编辑界面不包含任何数据验证。如果你不提供一个必填的值（例如</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），或者在要求输入数字的地方输入一个字符串，将抛出一个异常。未来的章节里将研究如何在编辑的用户界面中增加验证控件（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://truly.cnblogs.com/archive/2006/06/27/437107.html"><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">给编辑和新增界面增加验证控件</span></span></em><span lang="EN-US"><span lang="EN-US"><font face="Verdana"> </font></span></span></a></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通常，产品的所有非只读字段都必须包含在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里。如果我们从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里剔除一列，比如说</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，当更新数据时</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将不会设置</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值，这将把该数据库记录的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值更改为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">NULL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值。类似地，如果一个必填的字段，例如</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中被剔除了，那么这个更新将失败，并出现一个上文中提及过的&#8220;</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Column 'ProductName' does not allow nulls</font></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l16 level1 lfo18"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个编辑界面遗留了许多必要的格式化的问题。</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示为四位小数。理想地</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应该包含下拉列表（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DropDownList</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），它列出系统中存在的类别和供应商。</span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们不得不承认现在这还有许多缺点，但这些将在未来的章节里谈及。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中插入、编辑和删除数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如我们在之前的章节里看过的，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件一次只显示一条记录，就像</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一样，它也允许对当前显示的记录进行编辑和删除。不管是对最终用户来说从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">进行编辑和删除的体验，还是在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一面的工作流程，都跟</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是一样的。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">不同的地方是，它还提供了内键的插入支持。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了示范</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的数据修改功能，首先，添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Basics.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，放在现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的上方，并通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的职能标记把它绑定到现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。然后，清除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Height</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Width</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，并从它的职能标记中勾选&#8220;启用分页&#8221;。为了启用编辑、插入和删除支持，只需要简单地从它的职能标记里勾选上&#8220;启用插入&#8221;、&#8220;启用编辑&#8221;和&#8220;启用删除&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig17cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 17: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">支持编辑、插入和删除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">一样，添加编辑、插入或删除支持会添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，如下声明语法所示：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="ProductID"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>DataSourceID="ObjectDataSource1" AllowPaging="True" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;Fields&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ReadOnly="True" SortExpression="ProductID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="SupplierID" HeaderText="SupplierID" SortExpression="SupplierID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="CategoryID" HeaderText="CategoryID" SortExpression="CategoryID" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" SortExpression="QuantityPerUnit" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" SortExpression="ReorderLevel" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="CategoryName" HeaderText="CategoryName" ReadOnly="True"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SortExpression="CategoryName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="SupplierName" HeaderText="SupplierName" ReadOnly="True"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SortExpression="SupplierName" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/Fields&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:DetailsView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">默认显示在列集合的下方。因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的字段是以行的方式呈现的，所以</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">也表现为包含插入、编辑和删除按钮的一行，出现在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的下方。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig18cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 18: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">支持编辑、插入和删除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">点击删除按钮就会开始与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">相同的一系列的事件：一次回传；随之</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">基于</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值组成它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSOurce</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；最后以调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法结束，此方法从数据库中删除该产品的记录。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中编辑也以</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">同样的方式运作。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了插入数据，最终用户面对的是一个&#8220;新建&#8221;按钮，当点击时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">呈现为&#8220;插入模式&#8221;。在&#8220;插入模式&#8221;下，新建按钮被&#8220;插入&#8221;和&#8220;取消&#8221;按钮取代，并且显示那些</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertVisible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（默认）的绑定列。这些自增长标识的数据字段，例如</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段，当通过职能标记绑定该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到数据源的时候让它们的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.datacontrolfield.insertvisible(VS.80).aspx"><span style="font-family: Verdana; mso-fareast-language: ZH-CN; mso-no-proof: no">InsertVisible</span></a></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当通过智能标记绑定数据源到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为自增长的字段设置其</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertVisible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。只读的字段，像</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，将显示在&#8220;插入模式&#8221;下的用户界面中，除非它们的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertVisible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性也明确地设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。稍稍花些时间把这两个字段的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertVisible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的声明语法或者通过智能标记中的&#8220;编辑字段&#8221;链接。<br />
</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig19cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 19: Northwind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">商人现在提供产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Acme Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在设置好</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertVisible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性后，通过浏览器看看这个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Basics.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面并点击新建按钮。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">20</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示的是添加一个新的饮料&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Acme Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;到我们的生产线时的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig20cs.png" border="0" /><br />
图</span><font face="Verdana"> <span lang="EN-US" style="mso-fareast-language: ZH-CN">20</span><span lang="EN-US">: N</span><span lang="EN-US" style="mso-fareast-language: ZH-CN">orthwind</span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">商人现在提供产品&#8220;</span><span lang="EN-US"><font face="Verdana">Acme Te</font></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">a</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">输入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Acme Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的详细信息并点击插入按钮后，随之发生一次回传并将这个新记录添加到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Products</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据表。因为这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是按照数据库中的顺序依次列出产品，所以我们必须翻到最后一页才能看到这个新增加的产品。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig21css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">21: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">产品</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Acme Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的详细信息</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span><span lang="EN-US"><font face="Verdana">:</font></span></strong><span lang="EN-US" style="mso-bidi-font-weight: bold"><font face="Verdana"> DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.currentmode(VS.80).aspx"><span style="font-family: Verdana; mso-bidi-font-weight: bold; mso-no-proof: no">CurrentMode</span></a></span></span><span lang="EN-US" style="mso-bidi-font-weight: bold"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性指示当前显示的界面并可以被设置为下面几个值之一：</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Edit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Insert</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">或</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ReadOnly</font></span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New"> </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">。</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.defaultmode(VS.80).aspx"><span style="font-family: Verdana; mso-bidi-font-weight: bold; mso-no-proof: no">DefaultMode</span></a></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性则指示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">在完成一次编辑或插入之后显示的模式，这在需要让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">保持编辑或插入模式不变时是很有用的。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个点击插入和编辑的功能跟</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有相同的局限性：用户必须通过文本框输入存在的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值；界面缺少任何验证的逻辑；产品的所有不允许为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">NULL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值或者没有在数据库中指定默认值的字段必须包含在插入界面里，等等。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在以后的章节里我们将会研究的扩展和提高</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的编辑界面的技巧，同样可以应用到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的编辑和插入界面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">做一个更灵活的数据修改用户界面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件提供内建的对插入、编辑和删除数据的支持，不过因为它使用模版而不是列，它没有地方让我们添加像</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件提供给数据修改界面的绑定列和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。取而代之的是，这个界面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> &#8211; </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">收集新增一项或编辑现有项时用来收集用户输入的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，连同新增、编辑、删除、插入、保存和取消按钮</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> &#8211; </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">都必须手工添加到适当的模版里。幸运的是，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将在通过它的职能标记的下拉列表绑定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到数据源时自动地创建需要的界面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了阐明这些技巧，首先，添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Basics.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，并从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的职能标记，绑定它到已经存在的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这将为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">生成一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件收集用户的输入并用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Button</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件作为添加新增、编辑、删除、插入、保存和取消按钮。另外，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性被设置到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所返回的对象的主键（</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。最后，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的职能标记中勾选&#8220;起用分页&#8221;选项。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面展示出</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">后它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">声明标记。默认地，每一个除了布尔值以外的产品的字段都绑定到一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，相应地布尔类型的字段（</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Discontinued</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）绑定到一个不可更改的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Checked</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。为了让新增、编辑和删除按钮点击时能够引发某个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">行为，必要的工作是将它们的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CommandName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的值分别设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">New</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Edit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" AllowPaging="True" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;ItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProductID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="ProductIDLabel" runat="server" Text='&lt;%# Eval("ProductID") %&gt;'&gt;&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProductName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="ProductNameLabel" runat="server" Text='&lt;%# Bind("ProductName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="SupplierIDLabel" runat="server" Text='&lt;%# Bind("SupplierID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="CategoryIDLabel" runat="server" Text='&lt;%# Bind("CategoryID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QuantityPerUnit:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="QuantityPerUnitLabel" runat="server" Text='&lt;%# Bind("QuantityPerUnit") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitPrice:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="UnitPriceLabel" runat="server" Text='&lt;%# Bind("UnitPrice") %&gt;'&gt;&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsInStock:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="UnitsInStockLabel" runat="server" Text='&lt;%# Bind("UnitsInStock") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsOnOrder:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="UnitsOnOrderLabel" runat="server" Text='&lt;%# Bind("UnitsOnOrder") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ReorderLevel:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="ReorderLevelLabel" runat="server" Text='&lt;%# Bind("ReorderLevel") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Discontinued:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CheckBox ID="DiscontinuedCheckBox" runat="server" Checked='&lt;%# Bind("Discontinued") %&gt;'<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Enabled="false" /&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="CategoryNameLabel" runat="server" Text='&lt;%# Bind("CategoryName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="SupplierNameLabel" runat="server" Text='&lt;%# Bind("SupplierName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Edit"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Delete"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="New"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/ItemTemplate&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:FormView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">22</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示出通过浏览器查看时</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">ItemTemplate</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。列出产品的每一个字段，并且在下方分别由新增、编辑和删除按钮。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig22css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 22: <span style="mso-spacerun: yes">&nbsp;</span>FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">默认的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列出产品的每一个字段并连同新增、编辑和删除按钮</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类似</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，点击删除按钮</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> &#8211; </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或者其它任何一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CommandName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Button</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">LinkButton</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或者</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ImageButton &#8211; </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">引发一次回传，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataKeyNames</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值的基础上组建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DeleteParameters </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，并调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Delete()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当点击编辑按钮时，引发一次回传并且数据重新绑定到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它作为开始的编辑界面。这个界面包含为编辑数据用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件连同保存和取消按钮。默认的通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">生成的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含对应自增长字段</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">(</font></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductID</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、对应每一个非布尔型字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和对应每一个布尔型字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这个动作与在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件里自动生成的绑定列非常相似。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span><span lang="EN-US"><font face="Verdana">: </font></span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的自动生成的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有一个小问题，就是对于诸如</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这样的字段将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件呈现为只读。我们马上看看如何解决这个问题。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性已通过<em style="mso-bidi-font-style: normal">双向绑定</em></span><em style="mso-bidi-font-style: normal"><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的方式绑定到相应的数据字段的值。双向绑定，以</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">&lt;%# Bind("<em style="mso-bidi-font-style: normal">dataField</em>") %&gt;</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表示，在绑定数据到模版和为组装</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">插入或编辑记录的参数时都回执行绑定的动作。就是说，当用户从</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里点击编辑按钮时，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Bind()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法返回指定的数据字段的值。用户完成他们的修改并点击报存时，通过</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Bind()</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">指定的数据字段的值回传到</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。作为另一种选择，单向绑定，以</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">&lt;%# Eval("<em style="mso-bidi-font-style: normal">dataField</em>") %&gt;</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表示，仅仅在绑定数据到模版时取得数据字段的值，但并不会在回传时将用户输入的值返回到数据源控件的参数。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面的声明标记显示了该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">EditItemTemplate</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。注意这里在绑定语法里用的是</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Bind()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，并且因此保存和取消按钮设置它们的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CommandName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Verdana" size="2">&nbsp;</font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" AllowPaging="True" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProductID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Label ID="ProductIDLabel1" runat="server" Text='&lt;%# Eval("ProductID") %&gt;'&gt;&lt;/asp:Label&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProductName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="ProductNameTextBox" runat="server" Text='&lt;%# Bind("ProductName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="SupplierIDTextBox" runat="server" Text='&lt;%# Bind("SupplierID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="CategoryIDTextBox" runat="server" Text='&lt;%# Bind("CategoryID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QuantityPerUnit:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="QuantityPerUnitTextBox" runat="server" Text='&lt;%# Bind("QuantityPerUnit") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitPrice:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitPriceTextBox" runat="server" Text='&lt;%# Bind("UnitPrice") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsInStock:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitsInStockTextBox" runat="server" Text='&lt;%# Bind("UnitsInStock") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsOnOrder:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitsOnOrderTextBox" runat="server" Text='&lt;%# Bind("UnitsOnOrder") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ReorderLevel:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="ReorderLevelTextBox" runat="server" Text='&lt;%# Bind("ReorderLevel") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Discontinued:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CheckBox ID="DiscontinuedCheckBox" runat="server" Checked='&lt;%# Bind("Discontinued") %&gt;' /&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="CategoryNameTextBox" runat="server" Text='&lt;%# Bind("CategoryName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="SupplierNameTextBox" runat="server" Text='&lt;%# Bind("SupplierName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Update"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Cancel"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;ItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/ItemTemplate&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New">&lt;/asp:FormView&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这里我们的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">如果我们尝试使用它的话</span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将引起抛出一个异常。问题是</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里以</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件呈现。我们或者需要把这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">替换为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或者干脆把它们删除。让我们就简单地从</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">里把它们彻底删除吧。</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">23</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示的是在产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;上点击编辑按钮后浏览器中的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。注意显示在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段现在不在出现了，因为我们刚刚从</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里删除了它们。当点击保存按钮时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">执行的是与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件相似的一系列的步骤。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig23css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 23: </font></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">默认显示每一个可编辑的产品字段为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox<o:p></o:p></font></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当点击</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的新建按钮时发生一次回传。不过，没有数据绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，因为新建了一条记录。该</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">界面包含添加新记录用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件连同插入和取消按钮。通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">生成的默认的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含对应每一个非布尔型字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和对应布尔型字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，类似于自动生成的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的界面。这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性通过双向绑定的方式绑定到相应的数据字段。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面的声明标记显示了该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">InsertItemTemplate</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。注意这里的绑定语法使用的是</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Bind()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法并且因此设置了插入和取消按钮的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CommandName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New">&lt;asp:FormView ID="FormView1" runat="server" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" AllowPaging="True" EnableViewState="False"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/EditItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ProductName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="ProductNameTextBox" runat="server" Text='&lt;%# Bind("ProductName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="SupplierIDTextBox" runat="server" Text='&lt;%# Bind("SupplierID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryID:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="CategoryIDTextBox" runat="server" Text='&lt;%# Bind("CategoryID") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QuantityPerUnit:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="QuantityPerUnitTextBox" runat="server" Text='&lt;%# Bind("QuantityPerUnit") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitPrice:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitPriceTextBox" runat="server" Text='&lt;%# Bind("UnitPrice") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsInStock:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitsInStockTextBox" runat="server" Text='&lt;%# Bind("UnitsInStock") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UnitsOnOrder:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="UnitsOnOrderTextBox" runat="server" Text='&lt;%# Bind("UnitsOnOrder") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ReorderLevel:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="ReorderLevelTextBox" runat="server" Text='&lt;%# Bind("ReorderLevel") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Discontinued:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CheckBox ID="DiscontinuedCheckBox" runat="server" Checked='&lt;%# Bind("Discontinued") %&gt;' /&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CategoryName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="CategoryNameTextBox" runat="server" Text='&lt;%# Bind("CategoryName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SupplierName:<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:TextBox ID="SupplierNameTextBox" runat="server" Text='&lt;%# Bind("SupplierName") %&gt;'&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:TextBox&gt;&lt;br /&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Insert"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Text="Cancel"&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/asp:LinkButton&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/InsertItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;ItemTemplate&gt;<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>...<o:p></o:p></font></strong></font></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/ItemTemplate&gt;<o:p></o:p></font></font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font face="Courier New" size="2">&lt;/asp:FormView&gt;</font></strong></span></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的自动生成的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有一点细微的区别。特别的是，对于只读的字段，例如</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，也为它们添加了相应的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件。类似</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，我们也需要从</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里删除这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">24</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示新增一个产品（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Acme Coffee</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）时浏览器中的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。注意显示在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SupplierName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CategoryName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段现在不再显示了，因为我们刚刚删除了它们。当点击插入按钮时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">执行的是与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件相似的一系列的步骤，插入一条新记录到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Products</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">25</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示了新产品插入成功后在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的详细信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/16fig24css.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 24: </font></span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InsertItemTemplate</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">规定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的插入界面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://www.asp.net/learn/dataaccess/images/16fig25cs.png" border="0" /><br />
图</span><span lang="EN-US"><font face="Verdana"> 25: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">新增产品</span><span lang="EN-US"><font face="Verdana">Acme Coffee</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的详细信息显示在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过分开</span><span lang="EN-US"><font face="Verdana">read-only</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US"><font face="Verdana">editing</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US"><font face="Verdana">inserting</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">界面到这</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">3</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">个不同的模版，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">可以比</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">更高程度地控制这些界面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span><span lang="EN-US"><font face="Verdana">:</font></span></strong><span lang="EN-US" style="mso-bidi-font-weight: bold"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">就像</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">，</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CurrentMode</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性指示当前显示的界面，而它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DefaultMode</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性指示编辑或新建完成后</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">返回的显示方式。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font color="#808080">总结</font></span></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这一节里，我们研究了基本的使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">插入、编辑和删除数据。这三种控件都提供一些内建的数据修改功能，这可以被利用而不需要在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面里写一行代码，这得益于数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件。不过，这个简单的指和点的技巧只能提供出一个简陋的数据修改用户界面。为了提供数据验证、注入编程设置的值、适当地处理异常、自定义用户界面等等，我们就需要依赖于一些在下面几个章节了将讨论的技巧。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">祝编程快乐！</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">作者简介</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott Mitchell</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，著有六本</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP/ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方面的书，是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4GuysFromRolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的创始人，自</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1998</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">年以来一直应用微软</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">技术。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是个独立的技</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">术咨询顾问，培训师，作家，最近完成了将由</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sams</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">出版社出版的新作，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">24</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">小时内精通</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。他的联系电邮为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">mitchell@4guysfromrolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，也可以通过他的博客</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">http://ScottOnWriting.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与他联系。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<img src="http://www.cnblogs.com/eddie005/aggbug/488507.html?type=1" width="1" height="1" alt=""/><p>评论: 36　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件</title><link>http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Fri, 18 Aug 2006 08:58:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html</guid><description><![CDATA[<p>阅读: 8553 评论: 25 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2006-08-18 16:58 <a href="http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html" target="_blank">原文链接</a></p><p><span>&nbsp; </p>
<h1><span>在</span><span>ASP.NET 2.0</span><span>中操作数据</span><span>::</span><span>研究插入、更新和删除的关联事件</span></h1>
</span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span>导言</span></h2>
<p><span>当使用</span><span>GridView</span><span>、</span><span>DetailsView</span><span>或</span><span>FormView</span><span>控件的内建插入、编辑或删除特征时，在用户添加一条新记录或更新</span><span>/</span><span>删除一条现在记录的过程中发生了多个步骤。正如我们之前一节里所讨论的，在</span><span>GridView</span><span>中编辑一行时，保存（</span><span>Update</span><span>）和取消（</span><span>Cancel</span><span>）按钮将取代编辑（</span><span>Edit</span><span>）按钮，并且绑定列转换成</span><span>TextBox</span><span>。在用户更新了数据并点击保存按钮之后，下述步骤在回传时执行：</span></p>
<p>&nbsp;</p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>该</span><span>GridView</span><span>控件根据当前编辑行的唯一标识字段（通过</span><span><span>DataKeyNames</span></span><span>属性）组装它的</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>参数，连同用户输入的值</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>该</span><span>GridView</span><span>控件调用它的</span><span>ObjectDataSource</span><span>的</span><span><span>Update()</span></span><span>方法，它转而调用潜在对象的适当的方法（</span><span><span>ProductsDAL.UpdateProduct</span></span><span>，我们之前一节里）</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>现在，这些隐含的数据，包含保存后的更改，被重新绑定到</span><span>GridView</span><span>控件</span></p>
<p>&nbsp;</p>
<p><span>在这一连串的步骤里，触发了许多事件，这让我们可以创建事件处理程序从而在需要的地方增加自定义逻辑。例如，在第</span><span>1</span><span>步之前，触发</span><span>GridView</span><span>的事件。在这里，如果有什么</span><span>validation</span><span>错误我们可以取消更新请求。当调用</span><span><span>Update()</span></span><span>方法时，触发</span><span>ObjectDataSource</span><span>的</span><span><span>Updating</span></span><span>事件，提供了增加或自定义</span><span><span>UpdateParameters</span></span><span>的值的机会。在</span><span>ObjectDataSource</span><span>的潜在对象的方法完全执行后，触发</span><span>ObjectDataSource</span><span>的</span><span><span>Updated</span></span><span>事件。针对</span><span><span>Updated</span></span><span>事件的事件处理程序可以检查更新操作的相关详细信息，例如影响了多少行数据，或者是否引发了一个异常。最后，在第</span><span>2</span><span>步之后，</span><span>GridView</span><span>的</span><span><span>RowUpdated</span></span><span>事件触发；针对此事件的事件处理程序可以检查关于刚刚完成的更新操作的相关额外信息。</span></p>
<p>&nbsp;</p>
<p><span>图</span><span>1</span><span>描述了使用</span><span>GridView</span><span>更新时这一系列连续的事件和步骤。图</span><span>1</span><span>里的这个事件模式不仅是在</span><span>GridView</span><span>的更新操作。从</span><span>GridView</span><span>、</span><span>DetailsView</span><span>或者</span><span>FormView</span><span>里插入、更新或者删除数据时，数据</span><span>Web</span><span>服务器控件和</span><span>ObjectDataSource</span><span>都会发生这一连串的</span><span>pre-level</span><span>和</span><span>post-level</span><span>的事件。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig01css.png" border="0" /><br />
图</span><span>1: </span><span>当在</span><span>GridView</span><span>里更新数据时，触发一连串的</span><span>Pre-</span><span>和</span><span>Post-</span><span>事件</span></h6>
<p>&nbsp;</p>
<p><span>在这一节里，我们将探讨使用这些事件从而扩展</span><span>ASP.NET</span><span>数据</span><span>Web</span><span>服务器控件的内建插入、更新和删除功能。我们也会看看如何自定义编辑界面从而仅仅更新部分产品字段。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span>第一步</span><span>: </span><span>更新产品的</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>字段</span></h2>
<p><span>在之前一节的编辑界面里，包含了产品的所有字段并且它们都不是只读的。如果我们从</span><span>GridView</span><span>中剔除一列（</span><span><span>QuantityPerUnit</span></span><span>），那么当更新时数据</span><span>Web</span><span>服务器控件就不会设置</span><span>ObjectDataSource</span><span>的</span><span><span>QuantityPerUnit</span></span><span> </span><span><span>UpdateParameters</span></span><span>的值。</span><span>ObjectDataSource</span><span>则传入一个</span><span><span>null</span></span><span>值到</span><span><span>UpdateProduct</span></span><span>这个业务逻辑层的方法，它将当前编辑的数据库记录的</span><span><span>QuantityPerUnit</span></span><span>字段更改为值。同样地，如果是一个必需的字段，例如</span><span><span>ProductName</span></span><span>，如果从编辑界面中剔除了，那么此更新将会失败并抛出一个</span><span>&#8220;<em>Column 'ProductName' does not allow nulls</em>&#8221;</span><span>异常。导致这一现象的原因是</span><span>ObjectDataSource</span><span>被配置为调用</span><span><span>ProductsBLL</span></span><span>类的</span><span><span>UpdateProduct</span></span><span>方法，它预期每一个产品字段都对应一个输入参数。因此，</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合包含了该方法的每一个输入参数。</span></p>
<p>&nbsp;</p>
<p><span>如果我们希望提供一个允许最终用户仅仅可以更新部分字段的数据</span><span>Web</span><span>服务器控件，那么我们需要在</span><span>ObjectDataSource</span><span>的</span><span><span>Updating</span></span><span>事件处理程序中编程设置缺失的</span><span><span>UpdateParameters</span></span><span>值，或者创建并调用一个预期部分字段的</span><span>BLL</span><span>方法。让我们在接下来的步骤中探讨。</span></p>
<p>&nbsp;</p>
<p><span>特别地，让我们创建一个在一个可编辑的</span><span>GridView</span><span>中仅显示</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>字段的页面。这个</span><span>GridView</span><span>的编辑界面将仅仅允许用户更新两个显示的字段，</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice </span></span><span>。因为这个编辑界面仅仅提供产品的部分字段，我们需要创建一个</span><span>ObjectDataSource</span><span>，它使用现有的</span><span>BLL</span><span>的</span><span><span>UpdateProduct</span></span><span>方法并在</span><span><span>Updating</span></span><span>事件处理程序中编程设置产品的缺少的字段的值，或者我们需要创建一个新的</span><span>BLL</span><span>方法，它仅接受那些在</span><span>GridView</span><span>中已经定义的部分字段。在这一节里，我们使用后者，创建一个</span><span><span>UpdateProduct</span></span><span>方法的重载，它提取</span><span>3</span><span>个输入参数：</span><span><span>productName</span></span><span>、</span><span><span>unitPrice</span></span><span>和</span><span><span>productID</span></span><span>：</span></p>
<p>&nbsp;</p>
<p><span><span>[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, false)]</span></span></p>
<p><span><span>public bool UpdateProduct(string productName, decimal? unitPrice, int productID)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>if (products.Count == 0)</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// no matching record found, return false</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return false;</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>Northwind.ProductsRow product = products[0];</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>product.ProductName = productName;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>if (unitPrice == null) product.SetUnitPriceNull(); else product.UnitPrice = unitPrice.Value;</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>// Update the product record</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>int rowsAffected = Adapter.Update(product);</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>// Return true if precisely one row was updated, otherwise false</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>return rowsAffected == 1;</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>跟原有的</span><span><span>UpdateProduct</span></span><span>方法类似，这个重载方法首先检查是否在数据库中存在一个指定</span><span><span>ProductID</span></span><span>的产品。如果不存在，它返回</span><span><span>false</span></span><span>，指示更新产品信息的请求失败。否则，它因而更新现存的产品记录的</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>字段并通过调用</span><span>TableAdapter</span><span>的</span><span><span>Update()</span></span><span>方法提交此更新，传入</span><span><span>ProductsRow</span></span><span>实例。</span></p>
<p>&nbsp;</p>
<p><span>通过这些对我们的</span><span><span>ProductsBLL</span></span><span>类的额外处理，我们现在可以创建一个简单</span><span>GridView</span><span>界面。打开</span><span><span>EditInsertDelete</span></span><span>文件夹中的</span><span><span>DataModificationEvents.aspx</span></span><span> </span><span>，添加一个</span><span>GridView</span><span>控件到页面。新建一个</span><span>ObjectDataSource</span><span>并配置它使用</span><span><span>ProductsBLL</span></span><span>类，它的</span><span><span>Select()</span></span><span>方法映射到</span><span><span>GetProducts </span></span><span>，</span><span><span>Update()</span></span><span>方法映射到仅接受</span><span><span>productName</span></span><span>、</span><span><span>unitPrice</span></span><span>和</span><span><span>productID</span></span><span>输入参数的</span><span><span>UpdateProduct</span></span><span>方法重载。图</span><span>2</span><span>展示了映射</span><span>ObjectDataSource</span><span>的</span><span><span>Update()</span></span><span>方法到</span><span><span>ProductsBLL</span></span><span>类的新的</span><span><span>UpdateProduct</span></span><span>方法重载时的数据源配置向导。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig02css.png" border="0" /><br />
图</span><span> 2: </span><span>映射</span><span>ObjectDataSource</span><span>的</span><span><span>Update()</span></span><span>方法到新的</span><span><span>UpdateProduct</span></span><span>重载</span></h6>
<p>&nbsp;</p>
<p><span>因为我们的例子将仅仅需要编辑数据的能力，不需要插入或删除记录，那么花些时间明确地指明该</span><span>ObjectDataSource</span><span>的</span><span><span>Insert()</span></span><span>和</span><span><span>Delete()</span></span><span>方法不会映射到</span><span><span>ProductsBLL</span></span><span>类的任何方法</span><span>--</span><span>通过到</span><span>INSERT</span><span>和</span><span>DELETE</span><span>的</span><span>tab</span><span>页并从下拉列表中选择（无）。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig03css.png" border="0" /><br />
图</span><span> 3: </span><span>在</span><span>INSERT</span><span>和</span><span>DELETE</span><span>的</span><span>Tab</span><span>页，从下拉列表中选择（无）</span></h6>
<p>&nbsp;</p>
<p><span>完成了此向导后，从</span><span>GridView</span><span>的职能标记里勾选上启用编辑。</span></p>
<p>&nbsp;</p>
<p><span>完成了此数据源配置向导并绑定到</span><span>GridView</span><span>后，</span><span>Visual Staudio</span><span>就已经添加好它们的声明语法。到源视图察看该</span><span>ObjectDataSource</span><span>的声明标记，它将如下所示：</span></p>
<p>&nbsp;</p>
<p><span><span>&lt;asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts"</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>TypeName="ProductsBLL" UpdateMethod="UpdateProduct"&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;UpdateParameters&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productName" Type="String" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitPrice" Type="Decimal" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productID" Type="Int32" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/UpdateParameters&gt;</span></span></p>
<p><span><span>&lt;/asp:ObjectDataSource&gt;</span></span></p>
<p>&nbsp;</p>
<p><span>因为</span><span>ObjectDataSource</span><span>的</span><span><span>Insert()</span></span><span>和</span><span><span>Delete()</span></span><span>方法没有映射，也就没有</span><span><span>InsertParameters</span></span><span>或者</span><span><span>DeleteParameters</span></span><span>片段。此外，因为方法映射到</span><span><span>UpdateProduct</span></span><span>方法重载，它仅接受</span><span>3</span><span>个输入参数，</span><span><span>UpdateParameters</span></span><span>片段也就仅包含</span><span>3</span><span>个</span><span><span>Parameter</span></span><span>实例。</span></p>
<p>&nbsp;</p>
<p><span>注意到</span><span>ObjectDataSource</span><span>的属性被设置为</span><span><span>original_{0}</span></span><span>。这个属性是使用数据源配置向导时</span><span>Visual Studio</span><span>自动设置的。因此，由于我们的</span><span>BLL</span><span>方法不需要传入原始的</span><span><span>ProductID</span></span><span>值，从</span><span>ObjectDataSource</span><span>的声明语法中删除所有这些属性设置。</span></p>
<p>&nbsp;</p>
<p><strong><span>注意</span><span>:</span></strong><span> If you</span><span>如果你只是简单地在设计视图里从属性窗口清除</span><span><span>OldValuesParameterFormatString</span></span><span>属性的值，这个属性会依旧存在于声明语法里，但会被设置为一个空字符串。要么从声明语法里把该属性通通删掉，要么从属性窗口，设置它的值为默认值：</span><span><span>{0}</span></span><span> </span><span>。</span></p>
<p>&nbsp;</p>
<p><span>虽然</span><span>ObjectDataSource</span><span>仅仅包含对</span><span><span>productName</span></span><span>、</span><span><span>unitPrice</span></span><span>和</span><span><span>productID</span></span><span>的</span><span><span>UpdateParameters</span></span><span>，</span><span>Visual Studio</span><span>还是为产品的每一个字段添加一个绑定列或</span><span>CheckBoxField</span><span>。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig04css.png" border="0" /><br />
图</span><span> 4: </span><span>对应产品的每一个字段，</span><span>GridView</span><span>都包含一个</span><span>BoundField</span><span>或</span><span>CheckBoxField</span></h6>
<p>&nbsp;</p>
<p><span>当最终用户编辑一个产品并点击它的保存按钮（</span><span>Update</span><span>），该</span><span>GridView</span><span>遍历那些可编辑的字段，然后把用户输入的值赋值到</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合里对应的参数。如果没有对应的参数，</span><span>GridView</span><span>则添加一个到参数集合里。因此，如果我们的</span><span>GridView</span><span>包含对应产品的所有字段的绑定列或</span><span>CheckBox</span><span>列，那么</span><span>ObjectDataSource</span><span>则会调用能接受这些参数的方法重载，而不顾</span><span>ObjectDataSource</span><span>的声明标记指定只接受</span><span>3</span><span>个输入参数的事实（见图</span><span>5</span><span>）。类似地，如果存在某些由</span><span>GridView</span><span>非只读列构成的组合，而没有一个</span><span><span>UpdateProduct</span></span><span>重载能接受相应的参数，则会在试图保存时引发一个异常。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig05css.png" border="0" /><br />
图</span><span> 5: GridView</span><span>将添加参数到</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合</span></h6>
<p>&nbsp;</p>
<p><span>为了确保</span><span>ObjectDataSource</span><span>调用仅接受</span><span><span>productName</span></span><span>、</span><span><span>unitPrice</span></span><span>和</span><span><span>productID</span></span><span><span>参数</span></span><span>的</span><span><span>UpdateProduct</span></span><span>重载，我们需要限定</span><span>GridView</span><span>仅包含</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>这两个可编辑的列。这可以通过删除其他绑定列和</span><span>CheckBox</span><span>列，或者把这些列的</span><span><span>ReadOnly</span></span><span>属性设置为</span><span><span>true</span></span><span>实现，又或者上述两种方法结合使用。在本节里让我们简单地删除除了</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>绑定列以外的</span><span>GridView</span><span>的所有列，然后，</span><span>GridView</span><span>的声明标记将如下所示：</span></p>
<p>&nbsp;</p>
<p><span><span>&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>DataSourceID="ObjectDataSource1" EnableViewState="False"&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;Columns&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CommandField ShowEditButton="True" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/Columns&gt;</span></span></p>
<p><span><span>&lt;/asp:GridView&gt;</span></span></p>
<p>&nbsp;</p>
<p><span>即使重载预期</span><span>3</span><span>个输入参数，在我们的</span><span>GridView</span><span>里仅包含两个绑定列。这是因为</span><span><span>productID</span></span><span>输入参数是一个主键（</span><span>primary key</span><span>）的值，它通过当前编辑行的</span><span><span>DataKeyNames</span></span><span>属性传入值。</span></p>
<p>&nbsp;</p>
<p><span>我们的</span><span>GridView</span><span>控件，连同这个</span><span><span>UpdateProduct</span></span><span>重载，允许一个用户仅仅编辑产品的名称和单价而不会丢失产品的其他字段。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig06css.png" border="0" /><br />
图</span><span> 6: </span><span>仅允许编辑</span><span> ProductName</span><span>和</span><span>Unit</span><span>Price</span><span>的界面</span></h6>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><span>完善</span><span><span>UnitPrice</span></span><span>格式化</span></h3>
<p><span>虽然图</span><span>6</span><span>所示的</span><span>GridView</span><span>实例能够正常工作，</span><span><span>UnitPrice</span></span><span>字段还完全未被格式化，导致显示价格时缺少货币符号，还有</span><span>4</span><span>个小数位。为了在非编辑状态的行应用货币格式，只需要简单地设置</span><span><span>UnitPrice</span></span><span>绑定列的</span><span><span>DataFormatString</span></span><span>属性为</span><span><span>{0:c}</span></span><span>，还有它的</span><span><span>HtmlEncode</span></span><span>属性为</span><span><span>false</span></span><span> </span><span>。</span></p>
<p>&nbsp;</p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig07css.png" border="0" /><br />
图</span><span> 7: </span><span>设置</span><span><span>UnitPrice</span></span><span>绑定列的</span><span><span>DataFormatString</span></span><span>和</span><span><span>HtmlEncode</span></span><span>属性</span></h6>
<p>&nbsp;</p>
<p><span>通过此项更改，处于非编辑状态的行将价格格式化为货币；然而，当前编辑的行，仍然显示为没有货币符号并保留四位小数。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig08css.png" border="0" /><br />
图</span><span> 8: </span><span>现在，非编辑状态的行格式化为货币值</span></h6>
<p>&nbsp;</p>
<p><span>通过设置此绑定列的</span><span><span>ApplyFormatInEditMode</span></span><span>属性为</span><span><span>true</span></span><span>（默认为</span><span><span>false</span></span><span>），可以把</span><span><span>DataFormatString</span></span><span>属性里指定的格式化指令应用到编辑界面。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig09css.png" border="0" /><br />
图</span><span> 9: </span><span>设置此绑定列的</span><span><span>ApplyFormatInEditMode</span></span><span>属性为</span><span><span>true</span></span></h6>
<p>&nbsp;</p>
<p><span>通过这个更改，当前编辑行里显示的</span><span><span>UnitPrice</span></span><span>值也被格式化为货币。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig10css.png" border="0" /><br />
图</span><span> 10: </span><span>现在，当前编辑行的值也被格式化为货币</span></h6>
<p>&nbsp;</p>
<p><span>然而，如果把产品价格更新为文本框里带货币符号的值</span><span>&#8211; </span><span>例如</span><span>$19.00 &#8211; </span><span>则会抛出一个</span><span><span>FormatException</span></span><span>异常。当</span><span>GridView</span><span>尝试把用户提供的值赋值到</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合，它无法把</span><span><span>UnitPrice</span></span><span>字符串&#8220;</span><span>$<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="19" unitname="&#8221;" w:st="on">19.00<span><span>&#8221;</span></span></st1:chmetcnv><span>转换成参数要求的</span></span><span><span>decimal</span></span><span>类型（见图</span><span>11</span><span>）。为了补救这个问题我们可以为</span><span>GridView</span><span>的</span><span><span>RowUpdating</span></span><span>事件添加一个事件处理程序并让它把用户输入的</span><span><span>UnitPrice</span></span><span>格式化为货币格式的</span><span><span>decimal </span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>这个</span><span>GridView</span><span>的</span><span><span>RowUpdating</span></span><span>事件接受的第二个参数是一个</span><span><span><a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewupdateeventargs(VS.80).aspx">GridViewUpdateEventArgs</a></span></span><span>类型的对象，它包含一个</span><span><span>NewValues</span></span><span>字典，当中的每一个属性保存着用户输入的值，准备赋值到</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合。我们可以重写现有的</span><span><span>NewValues</span></span><span>集合中的</span><span><span>UnitPrice</span></span><span>值为一个货币金额，通过下面的事件处理程序中的代码进行解析：</span></p>
<p>&nbsp;</p>
<p><span><span>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span>&nbsp;if (e.NewValues["UnitPrice"] != null)</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>e.NewValues["UnitPrice"] = decimal.Parse(e.NewValues["UnitPrice"].ToString(), System.Globalization.NumberStyles.Currency);</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>如果用户提供了一个诸如&#8220;</span><span>$<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="19" unitname="&#8221;" w:st="on">19.00<span><span>&#8221;</span></span></st1:chmetcnv><span>的</span></span><span><span>UnitPrice</span></span><span>值，这个值会被通过</span><span><span><a href="http://msdn2.microsoft.com/en-us/library/system.decimal.parse(VS.80).aspx"><span>Decimal.Parse</span></a></span></span><span>计算并解析为货币金额的值重写。这将正确的解析货币值，无论是货币符号、逗号、小数点、等等，并使用</span><span><span><a href="http://msdn2.microsoft.com/en-US/library/abeh092z(VS.80).aspx"><span>System.Globalization</span></a></span></span><span>命名空间的</span><span><span><a href="http://msdn2.microsoft.com/en-US/library/system.globalization.numberstyles(VS.80).aspx"><span>NumberStyles</span><span><span>枚举</span></span></a></span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>图</span><span>11</span><span>展示因用户输入的</span><span><span>UnitPrice</span></span><span>值带有货币符号引起的问题，还展示了如果利用</span><span>GridView</span><span>的</span><span><span>RowUpdating</span></span><span>事件处理程序从而正确地解析这样的输入。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig11css.png" border="0" /><br />
图</span><span> <span>11: </span></span><span>现在，当前编辑行的</span><span><span>UnitPrice</span></span><span>值被格式化为货币金额</span></h6>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span>第二步</span><span>: </span><span>阻止</span><span><span>NULL UnitPrices</span></span></h2>
<p><span>虽然数据库被配置为允许</span><span><span>Products</span></span><span>表里的</span><span><span>UnitPrice</span></span><span>字段为</span><span><span>NULL</span></span><span>值，但我们可能希望防止用户访问这个特别的页面并指定一个空的</span><span><span>UnitPrice</span></span><span>值。更确切地说，如果用户在编辑一个产品行记录时忘记输入一个</span><span><span>UnitPrice</span></span><span>值，</span><span> </span><span>与其保存这个结果到数据库，我们还不如给用户显示一个提示信息，自始至终这个页面，任何的对产品的编辑必须指定一个价格。</span></p>
<p>&nbsp;</p>
<p><span>传入到</span><span>GridView</span><span>的事件处理程序的</span><span><span>GridViewUpdateEventArgs</span></span><span>对象包含一个</span><span><span>Cancel</span></span><span>属性，如果把它设置为</span><span><span>true</span></span><span>，则中止这个更新过程。让我们扩展</span><span><span>RowUpdating</span></span><span>事件处理程序，设置</span><span><span>e.Cancel</span></span><span>为</span><span><span>true</span></span><span>并显示一个信息说明为什么在</span><span><span>NewValues</span></span><span>集合里的</span><span><span>UnitPrice</span></span><span>值为</span><span><span>null</span></span><span> </span><span>。</span></p>
<p>&nbsp;</p>
<p><span>首先，添加一个</span><span>Label</span><span>服务器控件到页面并命名为</span><span><span>MustProvideUnitPriceMessage</span></span><span><span> </span></span><span>。这个</span><span>Label</span><span>控件将显示用户是否在更新一个产品时忘记指定一个</span><span><span>UnitPrice</span></span><span>值。设置这个</span><span>Label</span><span>的</span><span><span>Text</span></span><span>属性为&#8220;您必须为产品提供一个价格。&#8221;。我也已经在</span><span><span>Styles.css</span></span><span>文件中添加了一个名为</span><span><span>Warning</span></span><span>的新</span><span>CSS</span><span>类别，定义如下：</span></p>
<p>&nbsp;</p>
<p><span><span>.Warning</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>color: Red;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>font-style: italic;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>font-weight: bold;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>font-size: x-large;</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>最后，设置</span><span>Label</span><span>的</span><span><span>CssClass</span></span><span>属性为</span><span><span>Warning</span></span><span> </span><span>。这样设计器中将在</span><span>GridView</span><span>上方显示这个红色、斜体、加粗、并且较大字体的警告信息。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig12css.png" border="0" /><br />
图</span><span> 12: </span><span>一个</span><span>Label</span><span>控件已被添加到</span><span>GridView</span><span>上方</span></h6>
<p>&nbsp;</p>
<p><span>默认地，这个</span><span>Label</span><span>控件隐藏，那么在</span><span><span>Page_Load</span></span><span>事件处理程序中设置它的</span><span><span>Visible</span></span><span>属性为</span><span><span>false</span></span><span> </span><span>。</span></p>
<p>&nbsp;</p>
<p><span><span>protected void Page_Load(object sender, EventArgs e)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>MustProvideUnitPriceMessage.Visible = false;</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>如果用户尝试更新一个产品并不指定</span><span><span>UnitPrice</span></span><span>值，我们希望取消这个更新并显示警告标签。在</span><span>GridView</span><span>的</span><span><span>RowUpdating</span></span><span>事件处理程序中增加如下的代码：</span></p>
<p>&nbsp;</p>
<p><span><span>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span>&nbsp;if (e.NewValues["UnitPrice"] != null)</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>e.NewValues["UnitPrice"] = decimal.Parse(e.NewValues["UnitPrice"].ToString(), System.Globalization.NumberStyles.Currency);</span></span></p>
<p><span><span>&nbsp;else</span></span></p>
<p><span><span>&nbsp;{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>// Show the Label</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>MustProvideUnitPriceMessage.Visible = true;</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>&nbsp;&nbsp; </span>// Cancel the update</span></span></p>
<p><span><span><span>&nbsp;&nbsp; </span>e.Cancel = true;</span></span></p>
<p><span><span>&nbsp;}</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>如果一个用户试图保存一个产品并不指定价格，这个更新操作就被取消并显示一个有用的提示信息。虽然数据库（和业务逻辑）允许</span><span><span>NULL</span></span><span>值的</span><span><span>UnitPrice</span></span><span>，但这个特定的</span><span>ASP.NET</span><span>页面不允许。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig13css.png" border="0" /><br />
图</span><span> 13: </span><span>用户不能让</span><span><span>UnitPrice</span></span><span>为空</span></h6>
<p>&nbsp;</p>
<p><span>到目前为止我们看过了如何使用</span><span>GridView</span><span>的</span><span><span>RowUpdating</span></span><span>事件来编程改变赋值到</span><span>ObjectDataSource</span><span>的</span><span><span>UpdateParameters</span></span><span>集合的参数值，还有如何完全地取消这个更新过程。这些思想也可以延展至</span><span>DetailsView</span><span>和</span><span>FormView</span><span>控件并且应用到插入或删除。</span></p>
<p>&nbsp;</p>
<p><span>这些任务也可以在</span><span>ObjectDataSource</span><span>这一层通过的</span><span><span>Inserting</span></span><span>、</span><span><span>Updating</span></span><span>和</span><span><span>Deleting</span></span><span>事件处理程序完成。这些事件在隐含对象的关联方法被调用前触发，并且提供一个更改输入参数集合或者完全取消此操作的最后机会。对应这</span><span>3</span><span>个事件的事件处理程序传入一个</span><span><span><a href="http://msdn2.microsoft.com/en-US/library/system.web.ui.webcontrols.objectdatasourcemethodeventargs(VS.80).aspx"><span>ObjectDataSourceMethodEventArgs</span></a></span></span><span> </span><span>类型的对象，我们对它的这两个属性感兴趣：</span></p>
<p>&nbsp;</p>
<p><span><span>&#183;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span><span><a href="http://msdn2.microsoft.com/en-US/library/system.componentmodel.canceleventargs.cancel(VS.80).aspx">Cancel</a></span></span><span>，它如果被设置为</span><span><span>true</span></span><span>，取消执行中的操作</span></p>
<p><span><span>&#183;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span><span><a href="http://msdn2.microsoft.com/en-US/library/system.web.ui.webcontrols.objectdatasourcemethodeventargs.inputparameters(VS.80).aspx">InputParameters</a></span></span><span>，它是</span><span><span>InsertParameters</span></span><span>、</span><span><span>UpdateParameters</span></span><span>或</span><span><span>DeleteParameters</span></span><span>的集合，这取决于这是</span><span><span>Inserting</span></span><span>、</span><span><span>Updating</span></span><span><span>、</span></span><span>还是</span><span><span>Deleting</span></span><span>事件的事件处理程序</span></p>
<p>&nbsp;</p>
<p><span>为了举例说明在</span><span>ObjectDataSource</span><span>这一层如何处理参数的值，让我们在页面里包含一个</span><span>DeailsView</span><span>，它允许用户新增一个新的产品记录。这个</span><span>DetailsView</span><span>将用作提供一个快捷的方式添加一个新的产品记录到数据库。为了在新增产品时保持界面一致，我们仅允许用户输入</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>字段。作为默认值，这些在</span><span>DetailsView</span><span>的插入界面提供的值将被设置为一个数据库的</span><span><span>NULL</span></span><span>值。不过，我们可以使用</span><span>ObjectDataSource</span><span>的</span><span><span>Inserting</span></span><span>事件注入不同的默认值，正如我们马上要看的。</span></p>
<p>&nbsp;</p>
<h2><span>第三步</span><span>: </span><span>提供一个添加新产品的界面</span></h2>
<p><span>在</span><span>GridView</span><span>的上方，从工具箱里拖放一个</span><span>DetailsView</span><span>控件到设计器，清空它的</span><span><span>Height</span></span><span>和</span><span><span>Width</span></span><span>属性，并将它绑定到页面中已经存在的</span><span>ObjectDataSource </span><span>。这将为产品的每一个字段添加一个绑定列或</span><span>CheckBox</span><span>列。因为我们希望用这个</span><span>DetailsView</span><span>控件来添加新产品，我们需要从它的职能标记里勾选启用插入这一项；然而并没有这一项，这是因为此</span><span>ObjectDataSource</span><span>的</span><span><span>Insert()</span></span><span>方法还没有映射到</span><span><span>ProductsBLL</span></span><span>类的方法（回想起我们在配置数据源时设置了这个映射为（无）</span><span> &#8211; </span><span>见图</span><span>3</span><span>）。</span></p>
<p>&nbsp;</p>
<p><span>为了再次配置这个</span><span>ObjectDataSource</span><span>，从它的职能标记中选择&#8220;配置数据源&#8221;的链接，载入向导。第一屏允许你更改</span><span>ObjectDataSource</span><span>绑定到的隐含对象；让它依旧是</span><span><span>ProductsBLL</span></span><span> </span><span>。下一屏列出从</span><span>ObjectDataSource</span><span>到隐含对象的方法的映射。尽管我们已经明确地指定</span><span><span>Insert()</span></span><span>和</span><span><span>Delete()</span></span><span>不映射到任何方法，然而如果你到</span><span>INSERT</span><span>和</span><span>DELETE</span><span>的</span><span>tab</span><span>页你还是会看到那里有一个映射。这是因为</span><span><span>ProductsBLL</span></span><span>的</span><span><span>AddProduct</span></span><span>和</span><span><span>DeleteProduct</span></span><span>方法使用了</span><span><span>DataObjectMethodAttribute</span></span><span>指出它们分别是为</span><span><span>Insert()</span></span><span>和</span><span><span>Delete()</span></span><span>服务的默认的方法。因此，</span><span>ObjectDataSource</span><span>向导在每次运行时都会自动地选择它们，除非那里被明确地指定了一个别的值。</span></p>
<p>&nbsp;</p>
<p><span>让</span><span><span>Insert()</span></span><span>方法依旧指向</span><span><span>AddProduct</span></span><span>方法，不过再次从</span><span>DELETE</span><span>的</span><span>tab</span><span>页的下拉列表中选择&#8220;</span><span>(</span><span>无</span><span>)</span><span>&#8221;。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig14css.png" border="0" /><br />
图</span><span> 14: </span><span>从</span><span>INSERT</span><span>的</span><span>Tab</span><span>页的下拉列表中选择</span><span><span>AddProduct</span></span><span>方法</span></h6>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig15css.png" border="0" /><br />
图</span><span> 15: </span><span>从</span><span>DELETE</span><span>的</span><span>Tab</span><span>页的下拉列表中选择</span><span>(</span><span>无</span><span>) </span></h6>
<p>&nbsp;</p>
<p><span>完成了这些更改后，该</span><span>ObjectDataSource</span><span>的声明语法中将包含一个</span><span><span>InsertParameters</span></span><span>集合，如下所示：</span></p>
<p>&nbsp;</p>
<p><span><span>&lt;asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProducts"</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>TypeName="ProductsBLL" UpdateMethod="UpdateProduct" OnUpdating="ObjectDataSource1_Updating" InsertMethod="AddProduct" OldValuesParameterFormatString="original_{0}"&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;UpdateParameters&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productName" Type="String" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitPrice" Type="Decimal" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productID" Type="Int32" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/UpdateParameters&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;InsertParameters&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="productName" Type="String" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="supplierID" Type="Int32" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="categoryID" Type="Int32" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="quantityPerUnit" Type="String" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitPrice" Type="Decimal" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsInStock" Type="Int16" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="unitsOnOrder" Type="Int16" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="reorderLevel" Type="Int16" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:Parameter Name="discontinued" Type="Boolean" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/InsertParameters&gt;</span></span></p>
<p><span><span>&lt;/asp:ObjectDataSource&gt;</span></span></p>
<p>&nbsp;</p>
<p><span>再次运行向导导致重新添加</span><span><span>OldValuesParameterFormatString</span></span><span>属性。把这个属性设置为默认值（</span><span><span>{0}</span></span><span>）或者从声明语法中把它们完全删除。</span></p>
<p>&nbsp;</p>
<p><span>随着</span><span>ObjectDataSource</span><span>提供插入数据的能力，现在</span><span>DetailsView</span><span>的职能标记里包含&#8220;启用插入&#8221;的</span><span>checkbox</span><span>；回到设计器并勾选这一项。然后，减少</span><span>DetailsView</span><span>的列直道它只包含两个绑定列</span><span>- </span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span> </span><span>，还有一个</span><span>CommandField</span><span>。此时</span><span>DetailsView</span><span>的声明语法将如下所示：</span></p>
<p>&nbsp;</p>
<p><span><span>&lt;asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="ProductID"</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>DataSourceID="ObjectDataSource1" EnableViewState="False"&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;Fields&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;asp:CommandField ShowInsertButton="True" /&gt;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/Fields&gt;</span></span></p>
<p><span><span>&lt;/asp:DetailsView&gt;</span></span></p>
<p>&nbsp;</p>
<p><span>图</span><span>16</span><span>展现的是在此时通过浏览器查看的页面。正如你所看到的，</span><span>DetailsView</span><span>列出第一个产品（</span><span>Chai</span><span>）的名称和价格。不过，我们需要的是一个插入界面来提供一个用户快速增加一个新产品到数据库的手段。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig16css.png" border="0" /><br />
图</span><span>16: </span><span>该</span><span>DetailsView</span><span>当前呈现在只读模式</span></h6>
<p>&nbsp;</p>
<p><span>为了展示插入模式的</span><span>DetailsView</span><span>我们需要设置</span><span><span>DefaultMode</span></span><span>属性为</span><span><span>Inserting</span></span><span>。这让</span><span>DetailsView</span><span>在第一次访问和插入一条新纪录之后，它都呈现在插入模式。如图</span><span>17</span><span>所示，这样的一个</span><span>DetailsView</span><span>提供了一个快捷的界面用以添加新记录。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig17css.png" border="0" /><br />
图</span><span> 17: </span><span>这个</span><span>DetailsView</span><span>提供了一个快速添加新产品的界面</span></h6>
<p>&nbsp;</p>
<p><span>当用户输入一个产品名称和价格（例如&#8220;</span><span>Acme Wate</span><span>&#8221;和</span><span>1.99</span><span>，如图</span><span>17</span><span>）并点击插入按钮，发生回传并且开始插入的工作流程，直到最后添加一个新产品记录到数据库。</span><span>DetailsView</span><span>维持在它的插入界面，并且</span><span>GridView</span><span>自动地重现绑定到它的数据源，目的是为了包含新增加的产品，如图</span><span>18</span><span>所示。</span></p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig18cs.png" border="0" /><br />
图</span><span> 18: </span><span>产品&#8220;</span><span>Acme Water</span><span>&#8221;已经被添加到数据库</span></h6>
<p>&nbsp;</p>
<p><span>虽然图</span><span>18</span><span>的</span><span>GridView</span><span>中没有显示出来，</span><span>DetailsView</span><span>界面里缺少的产品字段</span><span> &#8211; </span><span><span>CategoryID</span></span><span>、</span><span><span>SupplierID</span></span><span>、</span><span><span>QuantityPerUnit</span></span><span>、等等</span><span> &#8211; </span><span>被赋上一个数据库</span><span><span>NULL</span></span><span>值。你可以通过履行下面一个步骤来看到这一点：</span></p>
<p>&nbsp;</p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>到</span><span>Visual Studio</span><span>的服务器资源管理器</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>展开</span><span><span>NORTHWND.MDF</span></span><span>数据库节点</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><span>Products</span></span><span>数据表节电上右键点击</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>选择&#8220;显示表数据&#8221;</span></p>
<p>&nbsp;</p>
<p><span>这将列出</span><span><span>Products</span></span><span>表中的所有记录。如图</span><span>19</span><span>所示，除了</span><span><span>ProductID</span></span><span>、</span><span><span>ProductName</span></span><span>和</span><span><span>UnitPrice</span></span><span>字段，我们的新产品的其它字段都为</span><span><span>NULL</span></span><span>值。</span></p>
<p>&nbsp;</p>
<h6><span><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/17fig19cs.png" border="0" /><br />
图</span><span> 19: </span><span>未在</span><span>DetailsView</span><span>中提供的产品的其它字段被赋予</span><span><span>NULL</span></span><span>值</span></h6>
<p>&nbsp;</p>
<p><span>我们可能希望给予一个或几个这些字段的值一个默认值，而不是</span><span><span>NULL</span></span><span>，要么是因为</span><span><span>NULL</span></span><span>并非最佳的默认项，要么是因为数据库字段本身不允许</span><span><span>NULL</span></span><span>值。为了实现这一点，我们可以编程设置这些</span><span>DetailsView</span><span>的</span><span><span>InputParameters</span></span><span>集合里的参数值。这项工作可以在</span><span>DetailsView</span><span>的</span><span><span>ItemInserting</span></span><span>事件处理程序中完成，或者在</span><span>ObjectDataSource</span><span>的</span><span><span>Inserting</span></span><span>事件处理程序。因为我们已经看过了如何在数据</span><span>Web</span><span>服务器控件中如何使用</span><span>pre-</span><span>和</span><span>post-level</span><span>的事件，这次让我们探究一下</span><span>ObjectDataSource</span><span>的事件。</span></p>
<p>&nbsp;</p>
<h2><span>第四步</span><span>: </span><span>给</span><span><span>CategoryID</span></span><span>和</span><span><span>SupplierID</span></span><span>参数赋值</span></h2>
<p><span>在这里我们假设当我们的应用程序通过这个界面添加一个新产品时应该给</span><span><span>CategoryID</span></span><span>和</span><span><span>SupplierID</span></span><span>字段赋值为</span><span>1</span><span>。如之前提及的，</span><span>ObjectDataSource</span><span>控件有一对</span><span>pre-</span><span>和</span><span>post-level</span><span>的事件发生在数据更改过程中。当它的</span><span><span>Insert()</span></span><span>方法被调用时，</span><span>ObjectDataSource</span><span>首先触发它的</span><span><span>Inserting</span></span><span>事件，然后调用它的</span><span><span>Insert()</span></span><span>方法所映射到的业务方法，最后触发</span><span><span>Inserted</span></span><span>事件。这个</span><span><span>Inserting</span></span><span>事件处理程序提供给我们一个处理输入参数或者彻底取消此操作的最后机会。</span></p>
<p>&nbsp;</p>
<p><strong><span>注意</span></strong><strong><span>:</span></strong><span> </span><span>在一个真实的应用程序中你很可能希望既让用户指定</span><span>category</span><span>和</span><span>supplier</span><span>的值，又希望基于一定的标准和业务逻辑的基础上选择这个值（而不是盲目地选择</span><span>ID</span><span>为</span><span>1</span><span>）。不管如何，这个例子阐明了如何在</span><span>ObjectDataSource</span><span>的</span><span>pre-level</span><span>的事件中编程设置一个输入参数的值。</span></p>
<p>&nbsp;</p>
<p><span>花些时间为</span><span>ObjectDataSource</span><span>的</span><span><span>Inserting</span></span><span>事件创建一个事件处理程序。注意到该事件处理程序的第二个输入参数是一个</span><span><span>ObjectDataSourceMethodEventArgs</span></span><span>类型的对象，它有一个属性来存取参数集合（</span><span><span>InputParameters</span></span><span>），还有一个属性用来取消此操作（</span><span><span>Cancel</span></span><span>）。</span></p>
<p>&nbsp;</p>
<p><span><span>protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span></span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>此时，</span><span><span>InputParameters</span></span><span>属性包含了通过</span><span>DetailsView</span><span>赋值到</span><span>ObjectDataSource</span><span>的</span><span><span>InsertParameters</span></span><span>集合。为了修改这些参数里的一个值，简单地使用：</span><span><span>e.InputParameters["<em>paramName</em>"] = <em>value </em></span></span><span>。所以，为了设置</span><span><span>CategoryID</span></span><span>和</span><span><span>SupplierID</span></span><span>为</span><span>1</span><span>，把</span><span><span>Inserting</span></span><span>事件处理程序调整为如下：</span></p>
<p>&nbsp;</p>
<p><span><span>protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)</span></span></p>
<p><span><span>{</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>e.InputParameters["CategoryID"] = 1;</span></span></p>
<p><span><span><span>&nbsp;&nbsp;&nbsp; </span>e.InputParameters["SupplierID"] = 1;</span></span></p>
<p><span><span>}</span></span></p>
<p>&nbsp;</p>
<p><span>这次当我们添加一个新产品（例如</span><span>Acme Soda</span><span>），这个新产品的</span><span><span>CategoryID</span></span><span>和</span><span><span>SupplierID</span></span><span>字段被赋值为</span><span>1</span><span>（见图</span><span>20</span><span>）。</span></p>
<h6><span><img alt="" src="http://www.asp.net/learn/dataaccess/images/17fig20cs.png" border="0" /><br />
图</span><span> 20: </span><span>现在，新产品的</span><span><span>CategoryID</span></span><span>和</span><span><span>SupplierID</span></span><span>字段被设置为</span><span>1</span></h6>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span>总结</span></h2>
<p><span>在编辑、插入和删除的过程中，无论数据</span><span>Web</span><span>服务器控件还是</span><span>ObjectDataSource</span><span>都会发生许多</span><span>pre-</span><span>和</span><span>post-level</span><span>的事件。在这一节里，我们研究了</span><span>pre-level</span><span>的事件，并看到了如何在数据</span><span>Web</span><span>服务器控件和</span><span>ObjectDataSource</span><span>的事件里使用它们来自定义输入参数或取消当前的数据更改操作。下一节，我们将看看创建和使用</span><span>post-level</span><span>的事件的事件处理程序。</span></p>
<p>&nbsp;</p>
<p><span>祝编程快乐！</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><span>作者简介</span></h3>
<p><span>Scott Mitchell</span><span>，著有六本</span><span>ASP/ASP.NET</span><span>方面的书，是</span><span>4GuysFromRolla.com</span><span>的创始人，自</span><span>1998</span><span>年以来一直应用微软</span><span>Web</span><span>技术。</span><span>Scott</span><span>是个独立的技</span><span> </span><span>术咨询顾问，培训师，作家，最近完成了将由</span><span>Sams</span><span>出版社出版的新作，</span><span>24</span><span>小时内精通</span><span>ASP.NET 2.0</span><span>。他的联系电邮为</span><span>mitchell@4guysfromrolla.com</span><span>，也可以通过他的博客</span><span>http://ScottOnWriting.NET</span><span>与他联系。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src="http://www.cnblogs.com/eddie005/aggbug/476224.html?type=1" width="1" height="1" alt=""/><p>评论: 25　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Scott Mitchell 的ASP.NET 2.0数据教程之二十一:: 实现开放式并发</title><link>http://www.cnblogs.com/eddie005/archive/2006/08/14/OptimisticConcurrency.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Mon, 14 Aug 2006 03:35:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2006/08/14/OptimisticConcurrency.html</guid><description><![CDATA[<p>阅读: 12520 评论: 12 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2006-08-14 11:35 <a href="http://www.cnblogs.com/eddie005/archive/2006/08/14/OptimisticConcurrency.html" target="_blank">原文链接</a></p><h1 style="margin: 9pt 0cm 3pt"><font size="5"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中操作数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">:</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实现开放式并发</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h1>
<p class="MsoNormal" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 3pt 0cm"><span lang="EN-US" style="font-size: 9pt; color: #333333"><a href="http://download.microsoft.com/download/4/d/f/4df58778-2e89-4fc6-a4f7-47d38f106ade/ASPNET_Data_Tutorial_21_CS.exe" target="_blank"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><span lang="EN-US">下载本教程中的编码例子</span></span></a></span><span lang="EN-US" style="font-size: 9pt; color: #333333; mso-fareast-language: ZH-CN"><font face="Verdana"> | </font></span><span lang="EN-US" style="font-size: 9pt; color: #333333"><a href="http://www.asp.net/learn/dataaccess/datatutorial21cs.pdf"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><span lang="EN-US">下载<span lang="EN-US">本教程的</span></span></span><span style="mso-fareast-language: ZH-CN"><font face="Verdana">PDF</font></span><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><span lang="EN-US">版</span></span></a></span><span lang="EN-US" style="font-size: 9pt; mso-fareast-language: ZH-CN"><o:p></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">导言</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对于那些仅仅允许用户查看数据，或者仅有一个用户可以修改数据的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应用软件，不存在多用户并发冲突的问题。然而对于那些允许多个用户修改或删除数据的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应用软件，则有可能发生一个用户所做的更改与另一个并发用户的更改冲突。在没有任何并发策略的地方，当两个用户同时编辑某一条记录，最后提交的用户的更改将覆盖先提交的用户所作的更改。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">例如，假设两个用户，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Jisun</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sam</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，都访问我们的应用软件中的一个页面，这个页面允许访问者通过一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件更新和删除产品数据。他们都同时点击</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件中的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Edit</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">按钮。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Jisun</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">把产品名称更改为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;并点击</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">按钮，实质结果是向数据库发送一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，它将更新此产品的所有可修改的字段（尽管</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Jisun</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实际上只修改了一个字段：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。在这一刻，数据库中包含有这条产品记录&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;—种类为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Beverages</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、供应商为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Exotic Liquids</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、等该产品的详细信息。然而，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sam</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的屏幕中的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里，当前编辑行里显示的产片名称依旧是&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Jisun</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的更改被提交后片刻，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sam</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">把种类更改为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Condiments</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;并点击</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">按钮。这个发送到数据库的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句的结果是将产品名称更改为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段的值是种类</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Beverages</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对应的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，等等。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Jisun</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所作的对产品名称的更改就被覆盖了。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">展示了这些连续的事件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig01CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 1: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当两个用户同时更新一条记录，则存在一个用户的更改覆盖另一个的更改的可能性</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类似地，当两个用户同时访问一个页面，一个用户可能更新的事另一个用户已经删除的记录。或者，在一个用户加载页面跟他点击删除按钮之间的时间里，另一个用户修改了这条记录的内容。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有下面三中并发控制策略可供选择：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39pt; text-indent: -21pt; tab-stops: list 39.0pt; mso-list: l4 level1 lfo1"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">什么都不做</span></strong><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8211;如果并发用户修改的是同一条记录，让最后提交的结果生效（默认的行为）</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> <o:p></o:p></font></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39pt; text-indent: -21pt; tab-stops: list 39.0pt; mso-list: l4 level1 lfo1"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">开放式并发（</span></strong><span lang="EN-US" style="color: #333333"><a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control"><strong><span style="color: #3366cc; font-family: Verdana; text-decoration: none; mso-fareast-language: ZH-CN; text-underline: none">Optimistic Concurrency</span></strong></a></span><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）</span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> - </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">假定并发冲突只是偶尔发生，绝大多数的时候并不会出现；</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">那么，当发生一个冲突时，仅仅简单的告知用户，他所作的更改不能保存，因为别的用户已经修改了同一条记录</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> <o:p></o:p></font></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 39pt; text-indent: -21pt; tab-stops: list 39.0pt; mso-list: l4 level1 lfo1"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">保守式并发（</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Pessimistic Concurrency</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）</span></strong><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8211;</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">假定并发冲突经常发生，并且用户不能容忍被告知自己的修改不能保存是由于别人的并发行为；那么，当一个用户开始编辑一条记录，锁定该记录，从而防止其他用户编辑或删除该记录，直到他完成并提交自己的更改</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> <o:p></o:p></font></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意：</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在本节里，我们不讨论保守式并附的例子。保守式并发控制很少使用，因为锁定如果没有完全释放，会妨碍其他用户进行数据更新。例如，如果一个用户为了编辑而锁定某一条记录，但在解锁之前就离开了，那么其他任何用户都不能更新这条记录，直到最初的用户返回并完成他的更新。因此，使用保守式并发控制的地方，相应地会作一个时间限制，如果到达这个时间限制，则取消锁定。例如订票网站，当用户完成他的订票过程时会锁定某个特定的座位，这就是一个使用保守式并发控制的例子。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第一步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">:</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如何实现开放式并发控制</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">开放式并发控制能够确保一条记录在更新或者删除时跟它开始这次更新或修改过程时保持一致。例如，当在一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里点击编辑按钮时，该记录的原始值从数据库中读取出来并显示在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和其他</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件中。这些原始的值保存在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里。随后，当用户完成他的修改并点击更新按钮，这些原始值加上修改后的新值发送到业务逻辑层，然后到数据访问层。数据访问层必定发出一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，它将仅仅更新那些开始编辑时的原始值根数据库中的值一致的记录。图二描述了这些事件发生的顺序。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig02CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了更新或删除能够成功，原始值必须与数据库中相应的值一致</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有多种方法可以实现开放式并发控制（查看</span><span lang="EN-US" style="color: #333333"><a href="http://www.eggheadcafe.com/articles/pbrombergresume.asp"><font face="Verdana">Peter A. Bromberg</font></a></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的文章</span><font face="Verdana"><span style="mso-fareast-language: ZH-CN"> </span><span style="color: #333333"><span style="mso-spacerun: yes">&nbsp;</span><span lang="EN-US"><a href="http://www.eggheadcafe.com/articles/20050719.asp">Optmistic Concurrency Updating Logic</a></span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，从摘要中看到许多选择）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ADO.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类型化数据集提供了一种应用，这只需要在配置时勾选上一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CheckBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。使用开发式并发的目的是使类型化数据集的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句可以检测自该记录加载到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataSet</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中以来数据库中的值是否被更改。例如下面的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，当当前数据库中的值与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中开始编辑的原始值一致才更新某个产品的名称和价格。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">@ProductName </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> @UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">参数包含的是用户输入的新值，而参数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">@original_ProductName </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> @original_UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">则包含最初点击编辑按钮时加载到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的值：</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> <span lang="EN-US"><o:p></o:p></span></font></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><o:p></o:p></font></font></strong></span></span></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;Products&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000"><br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ProductName&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ProductName</span><span style="color: #000000">,<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UnitPrice&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@UnitPrice</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ProductID&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@original_ProductID</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ProductName&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@original_ProductName</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000"><br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UnitPrice&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@original_UnitPrice</span><span style="color: #000000"><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注意：</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句是为了易读而简单化了。实际上，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句中检测</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">会比较棘手，这是因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">可以包含空值，而</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NULL = NULL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">则总是返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">False</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（相应地你必须用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">IS NULL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextIndented" style="margin: 3pt 18pt"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">除了使用一个不同的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句之外，配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用开放式并发控制还需要修改它直接发送到数据库的方法。回到我们的第一节，</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="font-family: Tahoma"><a href="http://blog.joycode.com/saucer/articles/77807.aspx" target="_blank"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-fareast-language: ZH-CN"><span lang="EN-US">创建一个数据访问层</span></span></a></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，这些发送到数据库的方法接收一列标量的值作为输入参数（不仅仅是强类型</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的实例）。当使用开放式并发，直接发送到数据库的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update() </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> Delete()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法就包含了对应原始值的输入参数。而且，业务逻辑层中批量方式更新的代码（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的重载，它不仅接受标量值，也接受</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRows </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> DataTables</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）也要做出相应的更改。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与其扩展我们现有得数据访问层表适配器使用开放式并发（同时也必须修改业务逻辑层以协调），不如让我们创建一个新的类型化数据集</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NorthwindOptimisticConcurrency</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，在它里面我们添加一个使用开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Products</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">表适配器。然后，我们将在业务逻辑层中创建类</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它为了支持开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">会有适当的更改。一旦这些基础工作都已完成，我们就可以创建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第二步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">创建一个支持开放式并发的数据访问层</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了创建一个新的类型化数据集，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">App_Code</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹里的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹上右键点击，选择添加一个新的数据集并命名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NorthwindOptimisticConcurrency</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。正如我们在第一节中看到过的那样，系统会自动添加一个表适配器（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）到当前的类型化数据集众，并自动地进入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置向导。在第一屏中，向导提示我们选择数据库连接</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8211;</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">连接到同样的数据库</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Northwind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web.config</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里设置好的连接字符串</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NORTHWNDConnectionString</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig03CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 3: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">连接到同一个数据库</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Northwind<o:p></o:p></font></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下一步，向导提示我们选择如何访问数据库：通过一个指定的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，创建新的存储过程，或者使用一个现有的存储过程。既然我们最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是使用的是指定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询语句，这里我们还是使用它。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig04CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用指定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句的方式访问数据库</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下一步，进入查询分析器，返回产品信息。让我们使用在最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中产品</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">相同的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询，它返回产品的所有字段包括产品的供应商和类别名称。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;ProductID,&nbsp;ProductName,&nbsp;SupplierID,&nbsp;CategoryID,&nbsp;QuantityPerUnit,<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnitPrice,&nbsp;UnitsInStock,&nbsp;UnitsOnOrder,&nbsp;ReorderLevel,&nbsp;Discontinued,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;CategoryName&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;Categories&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;Categories.CategoryID&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;Products.CategoryID)&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;CategoryName,&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;CompanyName&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;Suppliers&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;Suppliers.SupplierID&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;Products.SupplierID)&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;SupplierName<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Products&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm"></font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><o:p></o:p></font></font></strong></span></span></p>
<font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig05CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">5</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：使用在最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中产品</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">相同的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font>
<p>&nbsp;</p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在我们进入下一步之前，点击&#8220;高级选项&#8221;按钮。要让这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用开放式并发，仅仅需要勾选上&#8220;使用开放式并发&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig06CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">6</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：勾选&#8220;使用开放式并发&#8221;启用开放式并发控制</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">最后，需要指出的是，该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应该同时使用&#8220;填充</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;和&#8220;返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;两种要生成的方法；并且，勾选&#8220;创建方法以将更新直接发送到数据库（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GenerateDBDirectMethods</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）&#8221;。将返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的方法名称从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetData</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">改为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProducts</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，使之与我们最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的命名规则匹配。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig07CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">7</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：让这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">利用所有的数据访问方式</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成了配置向导后，该数据集设计器将包含一个强类型的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Products DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。让我们花些时间把该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的名称</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Products</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">改为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrency</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，方法是右键点击</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的标题栏，从菜单中选择&#8220;重命名&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig08CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">8</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">已经添加到类型化数据集</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了看看</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrency TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（使用开放式并发）和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Products TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（不使用并发控制）的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询之间有什么不同，选中该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并转到属性窗口。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteCommand </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> UpdateCommand </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这两个属性的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> CommandText </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子属性里，我们可以看到调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或者</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">delete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">关联的方法时发送到数据库的实际的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrency TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句是：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><o:p></o:p></font></font></strong></span></span></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">DELETE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">Products</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;((</span><span style="color: #ff0000">[</span><span style="color: #ff0000">ProductID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_ProductID</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">ProductName</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_ProductName</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_SupplierID</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">SupplierID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">SupplierID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_SupplierID</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_CategoryID</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">CategoryID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">CategoryID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_CategoryID</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_QuantityPerUnit</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">QuantityPerUnit</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">QuantityPerUnit</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_QuantityPerUnit</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_UnitPrice</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitPrice</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitPrice</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_UnitPrice</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_UnitsInStock</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitsInStock</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitsInStock</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_UnitsInStock</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_UnitsOnOrder</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitsOnOrder</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">UnitsOnOrder</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_UnitsOnOrder</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;((</span><span style="color: #008000">@IsNull_ReorderLevel</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">ReorderLevel</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">ReorderLevel</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_ReorderLevel</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">Discontinued</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_Discontinued</span><span style="color: #000000">))&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">相反，最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Products TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所使用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句则简单得多：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">DELETE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">Products</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;((</span><span style="color: #ff0000">[</span><span style="color: #ff0000">ProductID</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@Original_ProductID</span><span style="color: #000000">))</span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如你所看到的，启用了开发式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所使用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句里的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句包含了对表</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Product</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">每一个字段现有的值与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（或者</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）最后一次加载时的原始值的对比。因为除了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName, </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Discontinued</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">之外，其他所有字段都可能为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NULL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值，所以</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句里还包含了额外的参数以及与</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NULL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值恰当的比较。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这一节里，我们不会在启用了开放式并发的数据集里增加其他的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">了，因为我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面将仅提供更新和删除产品信息的功能。然而，我们仍然需要在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrency TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID) </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了实现这一点，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的标题栏（在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Fill</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProducts</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法名的上方）上右键并从菜单里选择&#8220;添加查询&#8221;。这将启动</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询配置向导。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的最初配置的基础上，选择指定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句来创建</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法（见图四）。因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法返回指定产品的信息，因此需要指定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询类型为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SELECT</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（返回行）&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig09CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">9</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：标记</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查询类型为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SELECT</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（返回行）&#8221;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">进入下一步，向导提示我们指定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SQL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句，并且与载入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">默认查询语句。在现有的查询语句的基础上添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE ProductID = @ProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句，如图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">10</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig10CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">10</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：在预载入的查询语句上添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句从而返回特定的产品记录</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">最后，把生成的方法重命名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FillByProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig11CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">11</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：把生成的方法重命名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FillByProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID<o:p></o:p></font></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成这个向导之后，现在这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含两个访问数据的方法：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProducts()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它返回所有</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的产品；和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它返回特定的产品。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第三步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">创建一个支持启用了开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的业务逻辑层</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类包含批量更新和直接发送数据库的模式的例子。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">AddProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重载都使用了批量更新模式，通过一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例发送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。另一方面，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法则使用直接发送到数据库的模式，调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在新的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrency TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里，发送到数据库的方法现还要求传入原始的值。例如，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法现在要求十个输入参数：原始的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">QuantityPerUnit</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitsInStock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitsOnOrder</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReorderLevel</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Discontinued</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。它在发送到数据库的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句里使用这些额外的输入参数，仅仅删除当前数据库的值与原始值一致的指定记录。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用批量更新模式时，如果标记给</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用的方法没有更改，那么代码就需要同时记录原始值和新的值。然而，与其在我们现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的基础上试图使用启用了开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，不如让我们重新创意一个业务逻辑类支持我们新的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">App_Code</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹下的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子文件夹里，添加一个名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的新类。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig12CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 12: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">然后，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类里添加如下代码：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font size="2"><font face="Courier New"><o:p></o:p></font></font></strong></span></span></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Data;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Configuration;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.Security;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.WebControls;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.WebControls.WebParts;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.HtmlControls;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;NorthwindOptimisticConcurrencyTableAdapters;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[System.ComponentModel.DataObject]<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductsOptimisticConcurrencyBLL<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img id="Codehighlighter1_386_1016_Open_Image" onclick="this.style.display='none'; Codehighlighter1_386_1016_Open_Text.style.display='none'; Codehighlighter1_386_1016_Closed_Image.style.display='inline'; Codehighlighter1_386_1016_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_386_1016_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_386_1016_Closed_Text.style.display='none'; Codehighlighter1_386_1016_Open_Image.style.display='inline'; Codehighlighter1_386_1016_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_386_1016_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_386_1016_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ProductsOptimisticConcurrencyTableAdapter&nbsp;_productsAdapter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;ProductsOptimisticConcurrencyTableAdapter&nbsp;Adapter<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img id="Codehighlighter1_538_749_Open_Image" onclick="this.style.display='none'; Codehighlighter1_538_749_Open_Text.style.display='none'; Codehighlighter1_538_749_Closed_Image.style.display='inline'; Codehighlighter1_538_749_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_538_749_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_538_749_Closed_Text.style.display='none'; Codehighlighter1_538_749_Open_Image.style.display='inline'; Codehighlighter1_538_749_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_538_749_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_538_749_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img id="Codehighlighter1_562_742_Open_Image" onclick="this.style.display='none'; Codehighlighter1_562_742_Open_Text.style.display='none'; Codehighlighter1_562_742_Closed_Image.style.display='inline'; Codehighlighter1_562_742_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_562_742_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_562_742_Closed_Text.style.display='none'; Codehighlighter1_562_742_Open_Image.style.display='inline'; Codehighlighter1_562_742_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_562_742_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_562_742_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(_productsAdapter&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_productsAdapter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductsOptimisticConcurrencyTableAdapter();<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_productsAdapter;<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)]<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;NorthwindOptimisticConcurrency.ProductsOptimisticConcurrencyDataTable&nbsp;GetProducts()<br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img id="Codehighlighter1_967_1013_Open_Image" onclick="this.style.display='none'; Codehighlighter1_967_1013_Open_Text.style.display='none'; Codehighlighter1_967_1013_Closed_Image.style.display='inline'; Codehighlighter1_967_1013_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_967_1013_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_967_1013_Closed_Text.style.display='none'; Codehighlighter1_967_1013_Open_Image.style.display='inline'; Codehighlighter1_967_1013_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_967_1013_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_967_1013_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Adapter.GetProducts();<br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意在类的声明开始之前的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">using NorthwindOptimisticConcurrencyTableAdapters</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句。命名空间</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">NorthwindOptimisticConcurrencyTableAdapters</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含了类</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyTableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它提供</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的方法。并且，在类声明之前我们还能找到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">System.ComponentModel.DataObject</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性标志，它指示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">把该类包含在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">向导的数据对象下拉列表中。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Adapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性提供快速访问</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyTableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的一个实例，并和我们最初的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoriesBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">等等）相似。最后，方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProducts()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">仅仅是调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProdcuts()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法并返回一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyDataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象，该对象由对应数据库里每一个产品记录的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例组成。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用支持开放式并发的发送到数据库的模式删除一个产品记录</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当使用支持开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">发送到数据库的模式，方法必须传入新值和原始值。对删除来说，这没有新的值，所以仅仅需要传入原始值。那么，在我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里，我们必须接收所有原始值所为输入参数。让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法使用这个发送到数据的方法。这意味着此方法必须接受所有的十个产品数据字段作为输入参数，并传送这些参数到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，如下面的代码所示：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)]<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;DeleteProduct(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;original_productID,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;original_productName,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_supplierID,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_categoryID,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;original_quantityPerUnit,&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitsInStock,<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitsOnOrder,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_reorderLevel,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;original_discontinued)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_474_1195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_474_1195_Open_Text.style.display='none'; Codehighlighter1_474_1195_Closed_Image.style.display='inline'; Codehighlighter1_474_1195_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_474_1195_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_474_1195_Closed_Text.style.display='none'; Codehighlighter1_474_1195_Open_Image.style.display='inline'; Codehighlighter1_474_1195_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_474_1195_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_474_1195_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.Delete(original_productID,<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_productName,&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_supplierID,<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_categoryID,<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_quantityPerUnit,<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_unitPrice,<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_unitsInStock,<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_unitsOnOrder,<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_reorderLevel,<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_discontinued);<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Return&nbsp;true&nbsp;if&nbsp;precisely&nbsp;one&nbsp;row&nbsp;was&nbsp;deleted,&nbsp;otherwise&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">34</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果这些在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（或者是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）最后一次加载时的原始值跟用户点击删除按钮时数据库中的值不一致，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句将不能匹配任何数据库记录，这就没有记录会受到影响。因此，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法将返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用支持开放式并发的批量更新模式修改一个产品记录</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如之前注意到的，批量更新模式时用的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法也有同样的方法声明为不管是否支持开放式并发。也就是，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法可以接受一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，一批</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，或者一个类型化的数据集。正是因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataTable</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow(s)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里保留了从原始值到修改后的值这个变化的轨迹使这成为可能。当</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">生成它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句时，参数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">@original_ColumnName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">装入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的原始值，反之，参数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">@ColumnName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">装入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中修改后的值。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在类</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（我们最初使用的不支持开放式并发</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的）里，当我们使用批量更新模式更新产品信息时，我们的代码执行的则是按顺序执行下列世间：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l3 level1 lfo2"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法读取当前数据库中的产品信息到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l3 level1 lfo2"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步里将新的值赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l3 level1 lfo2"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，传入该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一连串的步骤，无论如何都不可能支持开放式并发，因为在第一步中产生的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是直接从数据库组装的，这意味着，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中使用的原始值是当前存在于数据库中值，而并非开始编辑过程时绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值。相反地，当使用启用开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，我们需要修改</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的重载以使用下面这些步骤：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l1 level1 lfo3"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProductByProductID(productID)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法读取当前数据库中的产品信息到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l1 level1 lfo3"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步里将原始</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l1 level1 lfo3"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">AcceptChanges()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，这指示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">目前这些值是&#8220;原始&#8221;的值</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l1 level1 lfo3"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">4.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将新</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 48pt; text-indent: -21pt; tab-stops: list 48.0pt; mso-list: l1 level1 lfo3"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">5.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，传入该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步读取当前数据库里指定产品记录的所有字段的值。对更新所有</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">产品字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的重载里，这一步是多余的（因为这些值在第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中被改写），而对那些仅仅传入部分字段值的重载方法来说则是必要的。一旦原始值赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例，调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">AcceptChanges()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，这将当前</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的值标记为原始值，这些值将用作</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">@original_ColumnNam</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">参数。然后，新的参数值被赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，最后，调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，传入这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataRow</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面这些代码展示了重载方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">接受所有产品数据字段作为输入参数。虽然这里没有展示，实际上从本节教程下载的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类里还包含了重载方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它仅仅接受产品名称和单价作为输入参数。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;AssignAllProductValues(NorthwindOptimisticConcurrency.ProductsOptimisticConcurrencyRow&nbsp;product,<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;productName,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;supplierID,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;categoryID,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;quantityPerUnit,<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsInStock,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsOnOrder,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;reorderLevel,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;discontinued)<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_405_1228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_405_1228_Open_Text.style.display='none'; Codehighlighter1_405_1228_Closed_Image.style.display='inline'; Codehighlighter1_405_1228_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_405_1228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_405_1228_Closed_Text.style.display='none'; Codehighlighter1_405_1228_Open_Image.style.display='inline'; Codehighlighter1_405_1228_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_405_1228_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_405_1228_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;product.ProductName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;productName;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(supplierID&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetSupplierIDNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.SupplierID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;supplierID.Value;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(categoryID&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetCategoryIDNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.CategoryID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;categoryID.Value;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(quantityPerUnit&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetQuantityPerUnitNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.QuantityPerUnit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;quantityPerUnit;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitPrice&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitPriceNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitPrice&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitPrice.Value;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitsInStock&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitsInStockNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitsInStock&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitsInStock.Value;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitsOnOrder&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitsOnOrderNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitsOnOrder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitsOnOrder.Value;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(reorderLevel&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetReorderLevelNull();&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.ReorderLevel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;reorderLevel.Value;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;product.Discontinued&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;discontinued;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)]<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UpdateProduct(<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;new&nbsp;parameter&nbsp;values</span><span style="color: #008000"><br />
</span><span style="color: #008080">20</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;productName,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;supplierID,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;categoryID,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;quantityPerUnit,<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsInStock,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsOnOrder,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;reorderLevel,<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;discontinued,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;productID,<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;original&nbsp;parameter&nbsp;values</span><span style="color: #008000"><br />
</span><span style="color: #008080">25</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;original_productName,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_supplierID,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_categoryID,<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;original_quantityPerUnit,&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitsInStock,<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_unitsOnOrder,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;original_reorderLevel,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;original_discontinued,<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;original_productID)<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img id="Codehighlighter1_2133_3420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2133_3420_Open_Text.style.display='none'; Codehighlighter1_2133_3420_Closed_Image.style.display='inline'; Codehighlighter1_2133_3420_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2133_3420_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2133_3420_Closed_Text.style.display='none'; Codehighlighter1_2133_3420_Open_Image.style.display='inline'; Codehighlighter1_2133_3420_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_2133_3420_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2133_3420_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;STEP&nbsp;1:&nbsp;Read&nbsp;in&nbsp;the&nbsp;current&nbsp;database&nbsp;product&nbsp;information</span><span style="color: #008000"><br />
</span><span style="color: #008080">31</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NorthwindOptimisticConcurrency.ProductsOptimisticConcurrencyDataTable&nbsp;products&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.GetProductByProductID(original_productID);<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(products.Count&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;no&nbsp;matching&nbsp;record&nbsp;found,&nbsp;return&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">34</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;NorthwindOptimisticConcurrency.ProductsOptimisticConcurrencyRow&nbsp;product&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;products[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;STEP&nbsp;2:&nbsp;Assign&nbsp;the&nbsp;original&nbsp;values&nbsp;to&nbsp;the&nbsp;product&nbsp;instance</span><span style="color: #008000"><br />
</span><span style="color: #008080">39</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AssignAllProductValues(product,&nbsp;original_productName,&nbsp;original_supplierID,<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_categoryID,&nbsp;original_quantityPerUnit,&nbsp;original_unitPrice,<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_unitsInStock,&nbsp;original_unitsOnOrder,&nbsp;original_reorderLevel,<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;original_discontinued);<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;STEP&nbsp;3:&nbsp;Accept&nbsp;the&nbsp;changes</span><span style="color: #008000"><br />
</span><span style="color: #008080">45</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;product.AcceptChanges();<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;STEP&nbsp;4:&nbsp;Assign&nbsp;the&nbsp;new&nbsp;values&nbsp;to&nbsp;the&nbsp;product&nbsp;instance</span><span style="color: #008000"><br />
</span><span style="color: #008080">48</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AssignAllProductValues(product,&nbsp;productName,&nbsp;supplierID,&nbsp;categoryID,&nbsp;quantityPerUnit,&nbsp;unitPrice,<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unitsInStock,&nbsp;unitsOnOrder,&nbsp;reorderLevel,&nbsp;discontinued);<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;STEP&nbsp;5:&nbsp;Update&nbsp;the&nbsp;product&nbsp;record</span><span style="color: #008000"><br />
</span><span style="color: #008080">52</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.Update(product);<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Return&nbsp;true&nbsp;if&nbsp;precisely&nbsp;one&nbsp;row&nbsp;was&nbsp;updated,&nbsp;otherwise&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">55</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</font></strong></font></span></span>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第四步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面把原始值和新值传入</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">后，剩下的工作就是创建一个能利用系统中内建的开放式并发逻辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面。特别地，数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> Web </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DetailsView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">或</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）必须记住它的原始值，并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">必须同时传送这两套值到业务逻辑层。此外，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面必须加以配置从而适当地处理并发冲突。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">首先，打开</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">EditInsertDelete</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹中的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OptimisticConcurrency.aspx</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到设计器，设置它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsGrid</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的职能标记里，选择创建一个新的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。既然我们希望这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用支持开放式并发的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，就把它配置为使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig13CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 13: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在向导中从下拉列表选择</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GetProducts</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法。对</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，则使用接受所有产品数据字段的重载。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的属性</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成了向导之后，该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的声明标记应该如下：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:ObjectDataSource&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="ProductsOptimisticConcurrencyDataSource"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;DeleteMethod</span><span style="color: #0000ff">="DeleteProduct"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OldValuesParameterFormatString</span><span style="color: #0000ff">="original_{0}"</span><span style="color: #ff0000">&nbsp;SelectMethod</span><span style="color: #0000ff">="GetProducts"</span><span style="color: #ff0000">&nbsp;TypeName</span><span style="color: #0000ff">="ProductsOptimisticConcurrencyBLL"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UpdateMethod</span><span style="color: #0000ff">="UpdateProduct"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DeleteParameters</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_productID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_productName"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_supplierID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_categoryID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_quantityPerUnit"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitPrice"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Decimal"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitsInStock"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitsOnOrder"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_reorderLevel"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_discontinued"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Boolean"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DeleteParameters</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">UpdateParameters</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="productName"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="supplierID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="categoryID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="quantityPerUnit"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="unitPrice"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Decimal"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="unitsInStock"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="unitsOnOrder"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="reorderLevel"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="discontinued"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Boolean"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="productID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_productName"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_supplierID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_categoryID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_quantityPerUnit"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="String"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitPrice"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Decimal"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitsInStock"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_unitsOnOrder"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_reorderLevel"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int16"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_discontinued"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Boolean"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Parameter&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="original_productID"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Int32"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">UpdateParameters</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ObjectDataSource</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如你所看到的，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteParameters</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">集合包含了对应</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的每一个输入参数的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Parameter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例。同样地，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateParameters</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">集合也包含了对应</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">每一个输入参数的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Parameter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在先前的那些关于数据修改的教程中，我们在这里都会移除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OldValuesParameterFormatString</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，因为这个属性需要</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法既要求传入原始值也要求传入修改后的值。此外，这个属性还需要对应原始值的输入参数的名称。既然我们现在要把原始值传送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，那就不要</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">删除这个属性。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注意：</span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OldValuesParameterFormatString</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的值必须映射到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里接收原始值的输入参数的名称。因为我们把这些参数命名为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">original_productName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">original_supplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">等等，我们可以让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OldValuesParameterFormatString</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的值依旧是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">original_{0}</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。然而如果</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的输入参数名为的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">old_productName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">old_supplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">等等，那么，你不得不把</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OldValuesParameterFormatString</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性的值改为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">old_{0}</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextIndented" style="margin: 3pt 18pt"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">能够正确地将原始值传送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，还有最后一个属性需要设置。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">有一个</span><font face="Verdana"><span style="mso-fareast-language: ZH-CN"> </span><span lang="EN-US" style="color: #333333"><a href="http://msdn2.microsoft.com/en-US/library/system.web.ui.webcontrols.objectdatasource.conflictdetection.aspx">ConflictDetection</a></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性，它可以设定为下面的</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面两个值之一：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l2 level1 lfo4"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">OverwriteChanges </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8211;</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">默认值；</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">不将原始值发送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法相应的输入参数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> <o:p></o:p></font></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l2 level1 lfo4"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CompareAllValues </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8211;</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将原始值发送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法；当使用开放式并发时使用这一项</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">稍花些时间将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ConflictDetection</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CompareAllValues</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的属性和字段</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当正确的配置完</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的属性后，让我们把注意力放在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的设置上。首先，因为我们希望</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">支持编辑和删除，因此，从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的智能标记中点击添加新列，从下拉列表中选择</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并勾选上&#8220;删除&#8221;和&#8220;编辑</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">/</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">更新&#8221;。这将增加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CommandField</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ShowEditButton</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ShowDeleteButton</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性都已设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当绑定</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyDataSource ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对应每一个产品数据字段都包含一列。虽然这样的一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">可以被编辑，但用户的体验将是不可接受的。这没有对数字栏作格式化处理，也没有</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">validation</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件以确保提供</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">product's name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">unit price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">units in stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">units on order</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">reorder level</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值都是大于零的数字。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">跟我们在之前的</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="color: #333333"><a href="http://truly.cnblogs.com/archive/2006/06/27/437107.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><span lang="EN-US">给编辑和新增界面增加验证控件</span></span></a></span></em><font face="Verdana"><span lang="EN-US" style="color: #333333; mso-fareast-language: ZH-CN"> </span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><span style="mso-spacerun: yes">&nbsp;</span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节里所论述的一样，用户界面可以通过将绑定列（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BoundFields</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）替换为模板列（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TemplateFields</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）实现自定义。我已经通过以下方式修改了这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和它的编辑界面：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l0 level1 lfo5"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">删除</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这几个绑定列；</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l0 level1 lfo5"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列替换为模板列并添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RequiredFieldValidation</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件；</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l0 level1 lfo5"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列替换为模板列，并调整编辑界面，使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DropDownList</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">而不是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TextBox</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。在这些模板列的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ItemTemplates</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里，显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段；</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l0 level1 lfo5"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitsInStock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitsOnOrder</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReorderLevel</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列替换为模板列并添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CompareValidator</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">因为我们在之前的章节里已经详细说明了如何完成这些任务，我仅仅把最终的声明语法列出并把具体执行留给读者作为练习。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:GridView&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="ProductsGrid"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;AutoGenerateColumns</span><span style="color: #0000ff">="False"</span><span style="color: #ff0000">&nbsp;DataKeyNames</span><span style="color: #0000ff">="ProductID"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;DataSourceID</span><span style="color: #0000ff">="ProductsOptimisticConcurrencyDataSource"</span><span style="color: #ff0000">&nbsp;OnRowUpdated</span><span style="color: #0000ff">="ProductsGrid_RowUpdated"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Columns</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CommandField&nbsp;</span><span style="color: #ff0000">ShowDeleteButton</span><span style="color: #0000ff">="True"</span><span style="color: #ff0000">&nbsp;ShowEditButton</span><span style="color: #0000ff">="True"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Product"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="ProductName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TextBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditProductName"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("ProductName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TextBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:RequiredFieldValidator&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="RequiredFieldValidator1"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;ControlToValidate</span><span style="color: #0000ff">="EditProductName"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage</span><span style="color: #0000ff">="You&nbsp;must&nbsp;enter&nbsp;a&nbsp;product&nbsp;name."</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:RequiredFieldValidator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label1"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("ProductName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Category"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="CategoryName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:DropDownList&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditCategoryID"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;DataSourceID</span><span style="color: #0000ff">="CategoriesDataSource"</span><span style="color: #ff0000">&nbsp;AppendDataBoundItems</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">18</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTextField</span><span style="color: #0000ff">="CategoryName"</span><span style="color: #ff0000">&nbsp;DataValueField</span><span style="color: #0000ff">="CategoryID"</span><span style="color: #ff0000">&nbsp;SelectedValue</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("CategoryID")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:ListItem&nbsp;</span><span style="color: #ff0000">Value</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">(None)</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ListItem</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:DropDownList</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">asp:ObjectDataSource&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="CategoriesDataSource"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">21</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValuesParameterFormatString</span><span style="color: #0000ff">="original_{0}"</span><span style="color: #ff0000">&nbsp;SelectMethod</span><span style="color: #0000ff">="GetCategories"</span><span style="color: #ff0000">&nbsp;TypeName</span><span style="color: #0000ff">="CategoriesBLL"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ObjectDataSource</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label2"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("CategoryName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Supplier"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="SupplierName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:DropDownList&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditSuppliersID"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;DataSourceID</span><span style="color: #0000ff">="SuppliersDataSource"</span><span style="color: #ff0000">&nbsp;AppendDataBoundItems</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">31</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTextField</span><span style="color: #0000ff">="CompanyName"</span><span style="color: #ff0000">&nbsp;DataValueField</span><span style="color: #0000ff">="SupplierID"</span><span style="color: #ff0000">&nbsp;SelectedValue</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("SupplierID")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:ListItem&nbsp;</span><span style="color: #ff0000">Value</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">(None)</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ListItem</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:DropDownList</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">asp:ObjectDataSource&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="SuppliersDataSource"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">34</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValuesParameterFormatString</span><span style="color: #0000ff">="original_{0}"</span><span style="color: #ff0000">&nbsp;SelectMethod</span><span style="color: #0000ff">="GetSuppliers"</span><span style="color: #ff0000">&nbsp;TypeName</span><span style="color: #0000ff">="SuppliersBLL"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:ObjectDataSource</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label3"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("SupplierName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:BoundField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">="QuantityPerUnit"</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">="Qty/Unit"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="QuantityPerUnit"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Price"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="UnitPrice"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TextBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditUnitPrice"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitPrice",&nbsp;"{0:N2}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Columns="8"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TextBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CompareValidator&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="CompareValidator1"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;ControlToValidate</span><span style="color: #0000ff">="EditUnitPrice"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">46</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage</span><span style="color: #0000ff">="Unit&nbsp;price&nbsp;must&nbsp;be&nbsp;a&nbsp;valid&nbsp;currency&nbsp;value&nbsp;without&nbsp;the&nbsp;currency&nbsp;symbol&nbsp;and&nbsp;must&nbsp;have&nbsp;a&nbsp;value&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;zero."</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">47</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operator</span><span style="color: #0000ff">="GreaterThanEqual"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Currency"</span><span style="color: #ff0000">&nbsp;ValueToCompare</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:CompareValidator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label4"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitPrice",&nbsp;"{0:C}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Units&nbsp;In&nbsp;Stock"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="UnitsInStock"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TextBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditUnitsInStock"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitsInStock")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Columns="6"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TextBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CompareValidator&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="CompareValidator2"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;ControlToValidate</span><span style="color: #0000ff">="EditUnitsInStock"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">57</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage</span><span style="color: #0000ff">="Units&nbsp;in&nbsp;stock&nbsp;must&nbsp;be&nbsp;a&nbsp;valid&nbsp;number&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;zero."</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">58</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operator</span><span style="color: #0000ff">="GreaterThanEqual"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Integer"</span><span style="color: #ff0000">&nbsp;ValueToCompare</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:CompareValidator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label5"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitsInStock",&nbsp;"{0:N0}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Units&nbsp;On&nbsp;Order"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="UnitsOnOrder"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TextBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditUnitsOnOrder"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitsOnOrder")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Columns="6"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TextBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CompareValidator&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="CompareValidator3"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;ControlToValidate</span><span style="color: #0000ff">="EditUnitsOnOrder"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">68</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage</span><span style="color: #0000ff">="Units&nbsp;on&nbsp;order&nbsp;must&nbsp;be&nbsp;a&nbsp;valid&nbsp;numeric&nbsp;value&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;zero."</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">69</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operator</span><span style="color: #0000ff">="GreaterThanEqual"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Integer"</span><span style="color: #ff0000">&nbsp;ValueToCompare</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:CompareValidator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label6"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitsOnOrder",&nbsp;"{0:N0}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">74</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">75</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Reorder&nbsp;Level"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="ReorderLevel"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">76</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">77</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TextBox&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="EditReorderLevel"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("ReorderLevel")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Columns="6"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TextBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">78</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CompareValidator&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="CompareValidator4"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;ControlToValidate</span><span style="color: #0000ff">="EditReorderLevel"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">79</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage</span><span style="color: #0000ff">="Reorder&nbsp;level&nbsp;must&nbsp;be&nbsp;a&nbsp;valid&nbsp;numeric&nbsp;value&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;zero."</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">80</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operator</span><span style="color: #0000ff">="GreaterThanEqual"</span><span style="color: #ff0000">&nbsp;Type</span><span style="color: #0000ff">="Integer"</span><span style="color: #ff0000">&nbsp;ValueToCompare</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:CompareValidator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">81</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">82</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">83</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label7"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("ReorderLevel",&nbsp;"{0:N0}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">84</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">85</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">86</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:CheckBoxField&nbsp;</span><span style="color: #ff0000">DataField</span><span style="color: #0000ff">="Discontinued"</span><span style="color: #ff0000">&nbsp;HeaderText</span><span style="color: #0000ff">="Discontinued"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="Discontinued"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">87</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Columns</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">88</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:GridView</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">89</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们已经非常接近于完成一个完整的例子。然而，还有一些细节问题需要我们慢慢解决。另外，我们还需要一些界面，当发生并发冲突时用来提示用户。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注意</span><span lang="EN-US"><font face="Verdana">: </font></span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了让数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件能够正确地把原始的值传送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（它随之将其发送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GirdView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">EnableViewState</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（默认值）是至关重要的。如果禁用了视图状态，这些原始值在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">postback</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的时候将会丢失。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">传送正确的原始值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource<o:p></o:p></font></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的配置，还有几个问题。如果这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ConflictDetection </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CompareAllValues </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（正如我们所做的），它会尝试复制</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的原始值到它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Parameter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">实例。回到图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">查看这个过程的图解。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">特别需要指出的是，这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的原始值是被指定为双向绑定的。因此，这些必需的原始值是通过双向绑定获取的，并且它们是规定为可改变的格式，这一点很重要。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了看看为什么这一点非常重要，花些时间通过浏览器访问我们的页面。正如所预料那样，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列出每一个产品，并且每行最左边的一列都显示编辑和删除按钮。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig14CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 14: GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">列出所有的产品信息</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果你点击任意一行的删除按钮，则抛出一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormatException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig15CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 15: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">尝试删除任意一个产品导致</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormatException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">试图读取原始的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值引发了一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormatException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。因为该模板列将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值限制为货币格式（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">&lt;%# Bind("UnitPrice", "{0:C}") %&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），它包含一个货币符号，例如</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">$19.95</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">FormatException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常发生在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">试图将字符产转换成小数。为了绕过此问题，我们有许多种选择：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l5 level1 lfo6"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从模板列里删除货币格式限制。就是说，取代</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">&lt;%# Bind("UnitPrice", "{0:C}") %&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，简单地使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">&lt;%# Bind("UnitPrice") %&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。下方的价格就是没有格式化的。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l5 level1 lfo6"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在模板列中显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">时格式化为货币，但是使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Eval</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">关键字实现绑定。记得</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Eval</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是实现单向绑定的。我们仍然需要提供</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值作为原始的值，因此在模板列里我们依旧需要一个双向绑定的声明，但这可以放在一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visible</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件里。在模板列里我们可以使用下面的标记：</span></font></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="DummyUnitPrice"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("UnitPrice")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Visible="false"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label4"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Eval("UnitPrice",&nbsp;"{0:C}")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span></div>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l5 level1 lfo6"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从模板列里删除货币格式限制，使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> &lt;%# Bind("UnitPrice") %&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RowDataBound</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理里，编码访问显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件并设置其</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Text</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为格式化的版本。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 57pt; text-indent: -21pt; tab-stops: list 57.0pt; mso-list: l5 level1 lfo6"><span lang="EN-US" style="font-family: Wingdings; mso-fareast-language: ZH-CN; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore"><font size="2">&#216;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8226;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><span style="mso-tab-count: 1"><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">保留货币格式化。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RowDeleting</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理里，将现存的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的原始值（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">$19.95</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）替换为实际的小数值（使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Decimal.Parse</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。在前面的</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> <em style="mso-bidi-font-style: normal"><span lang="EN-US"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">在</span></span>ASP.NET<span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">页面中处理</span></span>BLL/DAL<span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">异常</span></span></a></span></span></em><span lang="EN-US"> </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节教程里我们也已经看过如何</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RowUpdating</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理里实现类似的功能。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在我的例程里我选择第二种方法，添加一个隐藏的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，并将它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Text</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性双向绑定到无格式的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">解决了这个问题之后，再次点击任意一个产品的删除按钮。这一次，当</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">尝试调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法时我们得到一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">InvalidOperationException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig16CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 16: ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">找不到具有它要发送的输入参数的方法</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">仔细看看异常信息，明显地</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">希望调用一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，此方法包含</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">original_CategoryName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">original_SupplierName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">输入参数。这是因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">模板列的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ItemTemplate</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当前是双向绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据字段。作为替换，我们需要包含对</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据字段的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Bind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">声明。为了实现这一点，把现有的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Bind</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">声明更改为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Eval</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">声明，并且添加隐藏的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Text</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性使用双向绑定的方式绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CategoryID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">SupplierID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">数据字段，如下所示：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Category"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="CategoryName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="DummyCategoryID"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("CategoryID")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Visible="False"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label2"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Eval("CategoryName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:TemplateField&nbsp;</span><span style="color: #ff0000">HeaderText</span><span style="color: #0000ff">="Supplier"</span><span style="color: #ff0000">&nbsp;SortExpression</span><span style="color: #0000ff">="SupplierName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">EditItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="DummySupplierID"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Bind("SupplierID")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&nbsp;Visible="False"&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="Label3"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Text</span><span style="color: #0000ff">='&lt;%#&nbsp;</span><span style="color: #ff0000">Eval("SupplierName")&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:Label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ItemTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">asp:TemplateField</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过这些更改，现在我们可以成功地删除和编辑产品信息了！在第五步里，我们将看看如何验证删除时发生并发冲突。但是现在，花几分钟尝试更新和删除一些记录，确认在单用户的情况下更新和删除能够正常运作。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第五步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">测试开放式并发支持</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了验证并发冲突是否能够被发现（而不是导致数据被盲目改写），我们需要打开两个浏览器窗口来访问这个页面。在两个浏览窗口里，都点击产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的编辑按钮。然后，在其中一个窗口修改其名称为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;并点击更新。这个更新应该会成功并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">回到预编辑状态，并且该产品的名称已经改为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">而在另一个浏览器窗口里，产品名称域依旧显示的是&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;。在这个浏览器窗口，将</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UnitPrice</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值更新为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">25.00</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。如果没有开放式并发支持的话，点击第二个浏览器窗口的更新按钮将把产品名称改回&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;，从而覆盖了第一个浏览器窗口里所作的修改。然而现在有了开发式并发，当点击第二个窗口中的更新按钮时导致了一个</span><span lang="EN-US" style="color: #333333"><a href="http://msdn2.microsoft.com/en-us/library/system.data.dbconcurrencyexception.aspx"><span style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span></a></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig17CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 17: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">发现并发冲突，抛出一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常仅当利用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的批量更新模式时会被抛出。直接发送到数据库的模式则不会引发异常，它仅仅会提示没有行受到影响。为了举例说明这个，两个浏览器窗口里的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">都回到预编辑的状态。然后，在第一个窗口里，点击编辑按钮，把产品名称从&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;改为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;并点击更新。在第二个窗口里，点击产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的删除按钮。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">点击删除按钮，页面会传，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Delete()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，然后</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductsOptimisticConcurrencyBLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，传入原始的值。在第二个浏览器窗口里原始的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值是&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;，这个值与当前数据库中相应的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值是不一致的。因此，发送到数据库的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句影响</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">行，因为数据库中没有记录能够满足</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并且</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的数据重新绑定到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">从最后一个用户的观点来看，在第二个浏览器窗口里点击了产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai Tea</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的删除按钮导致屏幕闪烁，恢复后该产品依旧在，虽然现在它的名称是&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;（在第一个浏览器窗口里修改了产品名称）。如果用户再次点击删除按钮，这次就能成功删除，因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的原始的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ProductName</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值（&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;）现在能够与数据库中相应的值匹配。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这些例子里，用户的体验跟理想的状况还有颇远的距离。显然我们在使用批量更新模式时不希望用户看到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常生硬的详细信息。并且使用直接发送到数据库模式的行为也会让用户有些疑惑，因为用户操作失败了但是没有准确的提示说明为什么。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了补救这两个小问题，我们可以在页面上放置一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，它用来提供为什么更新或删除失败的说明。在批量更新模式，我们可以在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级事件处理里判定是否引发了一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常，显示必要的警告标签。对于直接发送到数据库的方法，我们可以检测</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法（它对一行或多行产生影响返回</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，否则</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）的返回值并显示必要的提示信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第六步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加提示信息并且在发生并发冲突时显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当一个并发冲突出现时，展现出来的行为取决于是使用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的批量更新还是直接发送到数据库的模式。我们这一节的教程两种模式都用了，用批量更新模式实现修改，用直接发送到数据库的方式实现删除。首先，我们添加两个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件到页面，它们用来解释更新或删除数据时出现的并发冲突。设置</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visible</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">EnableViewState</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；这意味一般情况下它们都是隐藏的，除非是那些特别的页面访问，在那里它们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visible</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性通过编码设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><strong><font size="2"><font face="Courier New"><span class="CodeFeaturedElement"></span><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><o:p></o:p></span></span></font></font></strong></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="DeleteConflictMessage"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Visible</span><span style="color: #0000ff">="False"</span><span style="color: #ff0000">&nbsp;EnableViewState</span><span style="color: #0000ff">="False"</span><span style="color: #ff0000">&nbsp;CssClass</span><span style="color: #0000ff">="Warning"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">2</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text</span><span style="color: #0000ff">="The&nbsp;record&nbsp;you&nbsp;attempted&nbsp;to&nbsp;delete&nbsp;has&nbsp;been&nbsp;modified&nbsp;by&nbsp;another&nbsp;user&nbsp;since&nbsp;you&nbsp;last&nbsp;visited&nbsp;this&nbsp;page.&nbsp;<br />
</span><span style="color: #008080">3</span><span style="color: #0000ff"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Your&nbsp;delete&nbsp;was&nbsp;cancelled&nbsp;to&nbsp;allow&nbsp;you&nbsp;to&nbsp;review&nbsp;the&nbsp;other&nbsp;user's&nbsp;changes&nbsp;and&nbsp;determine&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;continue&nbsp;deleting&nbsp;this&nbsp;record."</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">asp:Label&nbsp;</span><span style="color: #ff0000">ID</span><span style="color: #0000ff">="UpdateConflictMessage"</span><span style="color: #ff0000">&nbsp;runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;Visible</span><span style="color: #0000ff">="False"</span><span style="color: #ff0000">&nbsp;EnableViewState</span><span style="color: #0000ff">="False"</span><span style="color: #ff0000">&nbsp;CssClass</span><span style="color: #0000ff">="Warning"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">6</span><span style="color: #ff0000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text</span><span style="color: #0000ff">="The&nbsp;record&nbsp;you&nbsp;attempted&nbsp;to&nbsp;update&nbsp;has&nbsp;been&nbsp;modified&nbsp;by&nbsp;another&nbsp;user&nbsp;since&nbsp;you&nbsp;started&nbsp;the&nbsp;update&nbsp;process.&nbsp;<br />
</span><span style="color: #008080">7</span><span style="color: #0000ff"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Your&nbsp;changes&nbsp;have&nbsp;been&nbsp;replaced&nbsp;with&nbsp;the&nbsp;current&nbsp;values.&nbsp;Please&nbsp;review&nbsp;the&nbsp;existing&nbsp;values&nbsp;and&nbsp;make&nbsp;any&nbsp;needed&nbsp;changes."</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在设置了它们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visible</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">EnabledViewState</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Text</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性之外，我们还要把</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CssClass</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Warning</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，这让标签显示大的、红色的、斜体、加粗的字体。这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CSS Warning </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">分类是在<span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><a href="http://www.cnblogs.com/eddie005/archive/2006/08/14/EventsOfDataWebControl.html"><em><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">研究插入、更新和删除的关联事件</span></span><span lang="EN-US"><span lang="EN-US"> </span></span></em></a></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节里添加到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Styles.css</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并且定义好的。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加了这些标签之后，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visual Studio</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">设计器里看起来应该类似于图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">18</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig18CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 18: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">两个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件添加到页面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件放置到适当的位置后，我们准备好检测当并发冲突发生时如何判定，在哪个时间点把适当的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Visible</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并显示提示信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">更新时处理并发冲突</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">让我们首先看看当使用批量更新模式是如何处理并发冲突。因为批量更新模式下的这些冲突导致抛出一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常，我们需要在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面中添加代码来判定更新过程中出现的是否</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。如果是，我们则显示一个信息向用户解释他们的更改没有被保存，由于别的用户在他开始编辑和点击更新按钮之间的时间里修改了同样的数据记录。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如我们在</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="color: #333333; mso-fareast-language: ZH-CN"><font face="Verdana"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">在</span></span>ASP.NET<span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">页面中处理</span></span>BLL/DAL<span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">异常</span></span></a></span> </font></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节里看过的那样，这样的异常可以在数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级事件处理里被发现和排除。因此，我们需要创建一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RowUpdated</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件的处理，它用来检测是否抛出了一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。这个事件处理通过一个不同的分支区别更新过程中引发的其它异常，如下面的时间处理代码所示：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><strong><font face="Courier New"><font size="2"><span class="CodeFeaturedElement"></span><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><o:p></o:p></span></span></font></font></strong></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ProductsGrid_RowUpdated(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;GridViewUpdatedEventArgs&nbsp;e)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_82_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_457_Open_Text.style.display='none'; Codehighlighter1_82_457_Closed_Image.style.display='inline'; Codehighlighter1_82_457_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_82_457_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_82_457_Closed_Text.style.display='none'; Codehighlighter1_82_457_Open_Image.style.display='inline'; Codehighlighter1_82_457_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_82_457_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_82_457_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Exception&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.Exception.InnerException&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_155_455_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_455_Open_Text.style.display='none'; Codehighlighter1_155_455_Closed_Image.style.display='inline'; Codehighlighter1_155_455_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_155_455_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_155_455_Closed_Text.style.display='none'; Codehighlighter1_155_455_Open_Image.style.display='inline'; Codehighlighter1_155_455_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_155_455_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_155_455_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Exception.InnerException&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;System.Data.DBConcurrencyException)<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_243_449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_449_Open_Text.style.display='none'; Codehighlighter1_243_449_Closed_Image.style.display='inline'; Codehighlighter1_243_449_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_243_449_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_243_449_Closed_Text.style.display='none'; Codehighlighter1_243_449_Open_Image.style.display='inline'; Codehighlighter1_243_449_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_243_449_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_243_449_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Display&nbsp;the&nbsp;warning&nbsp;message&nbsp;and&nbsp;note&nbsp;that&nbsp;the&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;exception&nbsp;has&nbsp;been&nbsp;handled<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateConflictMessage.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.ExceptionHandled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">面对一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DBConcurrencyException</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常，该事件处理显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateConflictMessage Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件并且指出该异常已经被处理。正确地编写了这些代码后，当更新记录时发生了并发冲突，用户的更改会丢失，因为他们不能覆盖同时发生的另一个用户的更改。特别地，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">回到预编辑幢白并且绑定到当前数据库中数据。这将在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的行中显示出别的用户的更改，而之前这些更改是看不见的。另外，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UpdateConflictMessage Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件将向用户说明发生了什么。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">19</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">详细展示了这一连串的事件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/21fig19CS.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 19: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">面对并发冲突，一个用户的更改丢失了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注意：</span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">作为另一种选择，与其让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">回到预编辑状态，我们还不如让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">停留在编辑状态，通过设置传入的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridViewUpdatedEventArgs</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">KeepInEditMode</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">true</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。如果你接受这种方法，那么，必须重新绑定数据到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（通过调用它的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DataBind()</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法）从而将其他用户更改后的值栽入到编辑界面。在这一节的可下载的代码里，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">RowUpdated</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理里有这两行注悉掉的代码；仅仅需要启用这两行代码就可以让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在发生了并发冲突之后保留编辑模式。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextIndented" style="margin: 3pt 18pt"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><font size="5"><font color="#c0c0c0"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">响应删除时的并发冲突</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></font></h3>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对于直接发送到数据库的模式，面对并发冲突时并不会引发异常。然而，数据库语句不影响任何记录，因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">WHERE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">子句不能匹配任何记录。所有在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">里创建的修改数据的方法都被设计为返回一个布尔值指示它们是否正好影响了一条记录。因此，为了确定删除记录时是否发生了并发冲突，我们可以检查</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的返回值。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的返回值可以在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级事件处理中通过传入事件处理的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSourceStatusEventArgs</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReturnValue</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性被检测。因为我们感兴趣的是判断从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteProduct</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法返回的结果，我们需要创建一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Deleted</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件的事件处理程序。该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReturnValue</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">object</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类型的，并且如果在方法可以返回一个值之前引发了异常并且方法被中断的情况下，它的值也可能为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">null</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。所以，我们应该首先确保</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReturnValue</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性非空并是个布尔值。若能通过这个检查，如果</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ReturnValue</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> false</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteConflictMessage Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件。可以通过下面的代码完成：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font face="Courier New"><font size="2"><o:p></o:p></font></font></strong></span></span></p>
<span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ProductsOptimisticConcurrencyDataSource_Deleted(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;ObjectDataSourceStatusEventArgs&nbsp;e)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_113_411_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_411_Open_Text.style.display='none'; Codehighlighter1_113_411_Closed_Image.style.display='inline'; Codehighlighter1_113_411_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_113_411_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_113_411_Closed_Text.style.display='none'; Codehighlighter1_113_411_Open_Image.style.display='inline'; Codehighlighter1_113_411_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_113_411_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_113_411_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.ReturnValue&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.ReturnValue&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_175_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_175_409_Open_Text.style.display='none'; Codehighlighter1_175_409_Closed_Image.style.display='inline'; Codehighlighter1_175_409_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_175_409_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_175_409_Closed_Text.style.display='none'; Codehighlighter1_175_409_Open_Image.style.display='inline'; Codehighlighter1_175_409_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_175_409_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_175_409_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;deleteReturnValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">bool</span><span style="color: #000000">)e.ReturnValue;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(deleteReturnValue&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_280_403_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_403_Open_Text.style.display='none'; Codehighlighter1_280_403_Closed_Image.style.display='inline'; Codehighlighter1_280_403_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_280_403_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_280_403_Closed_Text.style.display='none'; Codehighlighter1_280_403_Open_Image.style.display='inline'; Codehighlighter1_280_403_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_280_403_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_280_403_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;No&nbsp;row&nbsp;was&nbsp;deleted,&nbsp;display&nbsp;the&nbsp;warning&nbsp;message</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteConflictMessage.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">面对一个并发冲突，用户的删除请求会被取消。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">被刷新，显示在用户载入页面跟点击删除按钮之间的时间里发生在该记录上面的更改。当发生这样的一个冲突，显示</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DeleteConflictMessage Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件，说明发生了什么（见图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">20</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://www.asp.net/learn/dataaccess/images/21fig20CSs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 20: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">面对并发冲突，一个用户的删除请求被取消了</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">总结</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="TextCharChar" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并发冲突可能存在于所有允许多用户同时更新或删除数据的应用程序里。如果不解决这样的冲突，当两个用户同时更新同一条数据，无论谁最后得到&#8220;胜利&#8221;，都将覆盖掉另一个用户所做的更改。作为另一种选择，开发者可以实现开放式并发控制（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">optimistic concurrency control</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），或者保守式并发控制（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">pessimistic concurrency control</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。开放式并发控制假定并发冲突很少发生，简单地否决一个会提起并发冲突的更新或者删除命名。保守式并发控制则假定并发冲突频繁地发生，简单地拒绝某个用户的更新或者删除命令是不可接受的。在保守式并发控制下，编辑一条记录涉及到锁定它，从而该记录被锁定时预防其他用户的修改或删除。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中的类型化数据集提供了支持开放式并发控制的功能。特别地，发送到数据库的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">UPDATE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DELETE</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">语句包含了这个表的所有字段，从而确保了仅当该记录但前的值与用户开始他们的修改或更新时的原始值相匹配时，修改或删除才会发生。一旦</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">配置为支持开放式并发，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的方法就需要修改。另外，调用</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面也需要配置为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">能从它的数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件获取到这些原始的值并将这些值传送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如我们在本节里所看到的，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应用程序中实现开放式并发控制包括修改</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，还包括在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面中添加相应的支持。无论这些额外的工作对你的时间来说是否一项明智的投入，对你的应用程序来说是否有所成效。如果你极少面对多个用户同时更新数据，或者不同的用户对数据作出不同的更改，那么并发控制并非必选项。然而，如果你时常面对多个用户在线并且对同一些数据进行操作，并发控制可以帮助预防一个用户的更新或删除被另一个用户在不知情的情况下覆盖。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">祝编程快乐！</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font color="#c0c0c0" size="5">作者简介</font></span></h3>
<p class="TextChar" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott Mitchell</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，著有六本</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP/ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方面的书，是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4GuysFromRolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的创始人，自</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1998</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">年以来一直应用微软</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">技术。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是个独立的技</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">术咨询顾问，培训师，作家，最近完成了将由</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sams</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">出版社出版的新作，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">24</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">小时内精通</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。他的联系电邮为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">mitchell@4guysfromrolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，也可以通过他的博客</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">http://ScottOnWriting.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与他联系。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p>&nbsp;</p>
<img src="http://www.cnblogs.com/eddie005/aggbug/464952.html?type=1" width="1" height="1" alt=""/><p>评论: 12　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/14/OptimisticConcurrency.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/14/OptimisticConcurrency.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Scott Mitchell 的ASP.NET 2.0数据教程之十八:: 在ASP.NET页面中处理BLL/DAL层的异常</title><link>http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Tue, 08 Aug 2006 10:43:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html</guid><description><![CDATA[<p>阅读: 11563 评论: 25 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2006-08-08 18:43 <a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html" target="_blank">原文链接</a></p><h1 style="margin: 9pt 0cm 3pt"><font size="5"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中操作数据</span><span lang="EN-US"><font face="Verdana">::</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面中处理</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL/DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">层的异常<br />
<br />
</span></font><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;<a href="http://download.microsoft.com/download/9/6/9/969e5c94-dfb6-4e47-9570-d6d9e704c3c1/ASPNET_Data_Tutorial_18_CS.exe" target="_blank"><font color="#1a8bc8">下载本教程中的编码例子</font></a> | <a href="http://static.asp.net/asp.net/files/DataTutorials/datatutorial18cs.pdf"><font color="#1a8bc8">下载本教程的PDF版</font></a></font></o:p></span></h1>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">导言</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在一个使用了分层体系架构的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应用系统里处理数据，一般遵循以下几步：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo1"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">确定业务逻辑层需要调用哪个方法，并且需要出入哪些参数。这些参数可以通过硬编码设置，程序自动设定，或者由用户输入。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo1"><span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font size="2">调用此方法。</font></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo1"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"><span style="mso-list: Ignore"><font face="Verdana" size="2">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">处理结果。当调用一个返回数据的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法时，这包括绑定数据到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Data Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件。而对于修改数据的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法而言，这包括基于返回值的基础上执行某些动作，或者适当地处理在第二步中引发的异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">正如我们在前一节里看到的，无论</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件还是数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件，都为第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">3</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步提供了可扩展性。例如</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件，触发它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdating</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件之前把它的字段的值赋值到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">集合；在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成它的操作之后触发</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们已经检测到第</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">步中触发的事件，并且看过了如何使用它们实现自定义出入参数或者取消操作。这一节我们将把我们的注意力转到操作完成后所触发的事件。通过这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">event handler</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和其它，可以判断在操作过程中是否产生了一个异常，并且适当地处理它，在屏幕中显示友好的错误信息要优于转到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的默认错误处理页。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了举例说明这些</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级事件的工作方式，让我们创建一个页面，它在一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中列出产品信息。当更新一个产品时，如果引发了一个异常，我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面会在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的上方显示一个简短的信息，说明出现了一个问题。好吧，让我们开始！</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第一步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为产品创建一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView<o:p></o:p></font></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节里我们创建一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它仅仅包含两个的字段，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><font face="Courier New"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'">UnitPrice</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"> </span></span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。这需要为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法增加一个额外的重载，它仅仅接受</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">3</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">个输入参数（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">product&#8217;s name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">unit price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">），相对于接受每一个产品的字段的方法。在本节里让我们再一次练习一下这些技巧，创建一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它显示产品的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">quantity per unit</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">unit price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">units in stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，但仅仅允许</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">unit price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">units in stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">可编辑。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为了提供这个场景，我们需要对</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法的另一个重载，它接收</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">个参数：</span><font face="Verdana"> <span lang="EN-US" style="mso-fareast-language: ZH-CN">product&#8217;s name</span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">unit price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US"><font face="Verdana">units in stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类中添加下面这个方法：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">)]<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UpdateProduct(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;productName,&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsInStock,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;productID)<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_210_890_Open_Image" onclick="this.style.display='none'; Codehighlighter1_210_890_Open_Text.style.display='none'; Codehighlighter1_210_890_Closed_Image.style.display='inline'; Codehighlighter1_210_890_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_210_890_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_210_890_Closed_Text.style.display='none'; Codehighlighter1_210_890_Open_Image.style.display='inline'; Codehighlighter1_210_890_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_210_890_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_210_890_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Northwind.ProductsDataTable&nbsp;products&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.GetProductByProductID(productID);<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(products.Count&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;no&nbsp;matching&nbsp;record&nbsp;found,&nbsp;return&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Northwind.ProductsRow&nbsp;product&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;products[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;product.ProductName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;productName;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitPrice&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitPriceNull();&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitPrice&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitPrice.Value;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitsInStock&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitsInStockNull();&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitsInStock&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitsInStock.Value;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Update&nbsp;the&nbsp;product&nbsp;record</span><span style="color: #008000"><br />
</span><span style="color: #008080">18</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.Update(product);<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Return&nbsp;true&nbsp;if&nbsp;precisely&nbsp;one&nbsp;row&nbsp;was&nbsp;updated,&nbsp;otherwise&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">21</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm"></font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2"></p>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">完成了此方法后，我们可以创建一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，它允许编辑这四个产品字段。打开</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EditInsertDelete</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件夹里的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ErrorHandling.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，并通过设计器添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到页面中。绑定这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">到一个新的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件，映射</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Select()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">GetProducts()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法，方法</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Update()</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">映射到刚刚创建的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重载。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig01css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">使用</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法重载，它接受四个输入参数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这将创建一个</span><span lang="EN-US"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它包含四个参数的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateParameters</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">集合，还有一个一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它包含产品的每一个字段。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的声明标记给</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">OldValuesParameterFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性赋值为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">original_{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它将引发一个异常，因为我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类没有一个名为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">original_productID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的输入参数需要传入。别忘了从声明语法里把这些设置通通删除（或者把它们设置为默认值：</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">然后，减少</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的绑定列，仅包含</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">QuantityPerUnit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitsInStock</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这几列。随意设置一些你认为必要的字段级的格式（例如更改</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">HeaderText</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性）。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在之前的章节里我们已经看过了如何在只读和编辑两种模式下格式化</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列为货币格式。在这里我们同样这样做。这需要设置绑定列的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">DataFormatString</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">{0:c}</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">HtmlEncode</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，还有它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplyFormatInEditMode</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，如图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所示。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig02css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">2: </font></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列配置为显示一个货币金额</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">要在编辑界面将</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">格式化为货币，这需要为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdating</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件创建一个事件处理，它将一个货币格式的字符串转换成</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">decimal</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">。回想上一节，</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdating</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">事件处理也用来检测并确保用户输入的是一个</span></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">的值。不过，本节我们可以允许用户忽略</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">price</font></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">列。</span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;GridView1_RowUpdating(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;GridViewUpdateEventArgs&nbsp;e)<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_79_253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_253_Open_Text.style.display='none'; Codehighlighter1_79_253_Closed_Image.style.display='inline'; Codehighlighter1_79_253_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_79_253_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_79_253_Closed_Text.style.display='none'; Codehighlighter1_79_253_Open_Image.style.display='inline'; Codehighlighter1_79_253_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_79_253_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_79_253_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.NewValues[</span><span style="color: #000000">"</span><span style="color: #000000">UnitPrice</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.NewValues[</span><span style="color: #000000">"</span><span style="color: #000000">UnitPrice</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">decimal</span><span style="color: #000000">.Parse(e.NewValues[</span><span style="color: #000000">"</span><span style="color: #000000">UnitPrice</span><span style="color: #000000">"</span><span style="color: #000000">].ToString(),&nbsp;System.Globalization.NumberStyles.Currency);<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">包含一个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">QuantityPerUnit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列，但它仅仅用作显示，不能被用户编辑。为了实现这一点，只需要简单地将该绑定列的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ReadOnly</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig03css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 3: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">设置</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">QuantityPerUnit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列为只读</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">最后，从</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的智能标记里勾选上&#8220;启用编辑&#8221;。完成了这些步骤后，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ErrorHandling.aspx</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面在设计视图里将如图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">所示。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig04css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 4: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">删除除了必需的绑定列之外的其它列并启用编辑</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这里我们显示产品的所有列，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">QuantityPerUnit</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitsInStock</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；不过仅仅</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitsInStock</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这几列可以编辑。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig05css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 5: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">用户现在可以很方便地编辑</span><span lang="EN-US"><font face="Verdana">Products&#8217; Names</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US"><font face="Verdana">Prices</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US"><font face="Verdana">Units In Stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第二步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">:</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">适当地处理</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">层异常</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这时我们的可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在用户输入合法的</span><span lang="EN-US"><font face="Verdana">product&#8217;s name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、</span><span lang="EN-US"><font face="Verdana">price</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US"><font face="Verdana">units in stock</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">时表现极佳，输入不合法的值时则导致一个异常。例如，遗漏了</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值则引发抛出一个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatanonullallowedexceptionclasstopic.asp"><span style="mso-fareast-language: ZH-CN"><font face="Courier New">NoNullAllowedException</font></span></a></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常，因为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProdcutsRow</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置了它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">AllowDBNull</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；如果数据库不正常运作，则在试图连接数据库时通过</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">TableAdapter</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">抛出一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">SqlException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。没有任何的动作，这些异常都会从数据访问层冒出到业务逻辑层，然后到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，最后到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">运行时。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">取决于你的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">应用程序如何配置以及是否从</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">localhost</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">访问该应用，一个未经处理的异常会出现在一类服务器错误处理页，一个详细的错误报表，或者一个对用户友好的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面。查看</span><span lang="EN-US"><a href="http://www.15seconds.com/issue/030102.htm"><font face="Verdana">Web Application Error Handling in ASP.NET</font></a><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><font face="Verdana"> </font><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn2.microsoft.com/en-US/library/h0hfz6fc(VS.80).aspx"><font face="Courier New">customErrors</font><span style="font-family: Verdana; mso-no-proof: no"> Element</span></a></span></span><span lang="EN-US"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">获得更多的关于</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面如何响应一个未捕获的异常的相关信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">6</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">展示的是试图不指定</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的值更新一个产品时屏幕的状况。这显示的是通过</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">localhost</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">访问时的默认详细错误报表。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig06css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 6: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">省略</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Product&#8217;s Name</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将显示异常明细</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">虽然这样的异常明细在我们测试应用程序的时候是很有用的，然而当一个最终用户面对这样的异常呈现时却是无所适从的。一个最终用户很可能并不知道</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">NoNullAllowedException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是什么，或者它是如何引起的。更好的方法是呈现给用户一个更友好的信息说明试图更新产品时出现了问题。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果在执行这项操作时出现了一个异常，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">post</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级事件都提供了发现并不让它出现在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">运行时的方法。在我们的例子里，让我们为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件创建一个事件处理程序，它判断是否激发了一个异常，如果是，则在一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件中显示异常详细信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">首先，添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面，设置它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ID</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">并清空它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。为了吸引用户的实现到此信息，设置其</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">CssClass</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Warning</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，这是我们在之前的章节里添加到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Styles.css</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">文件的一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CSS</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类别。记得这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">CSS</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类别让</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">text</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示为红色、斜体、加粗的较大的字体。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig07css.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 7: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">添加一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件到页面</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">因为我们希望这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件仅在异常出现时显示，在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Page_Load</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理中设置它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_53_93_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_93_Open_Text.style.display='none'; Codehighlighter1_53_93_Closed_Image.style.display='inline'; Codehighlighter1_53_93_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_53_93_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_93_Closed_Text.style.display='none'; Codehighlighter1_53_93_Open_Image.style.display='inline'; Codehighlighter1_53_93_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_53_93_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_53_93_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm"></font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过这些代码，当第一次访问页面和随后的回传后，</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性都将被设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。当在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理程序中检测到一个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL/BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">层的异常时，我们将设置</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。因为页面生命周期里</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">服务器控件的事件处理出现在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Page_Load</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理之后，该</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">将会显示。不过，下一次回传，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Page_Load</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理将重新将</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性设置回</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，再次隐藏它。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">我们也可以不必在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Page_Load</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">里设置</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性，作为另一种选择，可以在声明语法里设置其</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">并禁用视图状态（设置它的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">EnableViewState</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">）。我们将在以后的章节里使用这种方法。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过添加这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Label</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件，我们下一步是为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件添加一个事件处理程序。在设计视图中选中</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件，打开属性窗口，点击黄色闪电状图标，列出</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的所有事件。在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdating</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件里我们可以看到已经存在一个入口，因为我们在本节较早的时候已经为此事件创建了一个事件处理程序。为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件创建一个事件处理程序。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig08cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 8: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的事件创建一个事件处理</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><font face="Verdana"><strong><span lang="EN-US" style="mso-fareast-language: ZH-CN">:</span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"> </span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">你也可以通过代码隐藏文件顶处的下拉列表创建这个事件处理。从左边的下拉列表中选择这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">控件，并从右边的下拉列表中选择</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold">事件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-weight: bold"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">创建这个事件处理将添加下面这些代码到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面的代码隐藏类中：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm">
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><strong><font face="Courier New"><font size="2"><o:p></o:p></font></font></strong></span></span></p>
<span lang="EN-US"><o:p><font face="Verdana" size="2">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;GridView1_RowUpdated(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;GridViewUpdatedEventArgs&nbsp;e)<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_79_82_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_82_Open_Text.style.display='none'; Codehighlighter1_79_82_Closed_Image.style.display='inline'; Codehighlighter1_79_82_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_79_82_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_79_82_Closed_Text.style.display='none'; Codehighlighter1_79_82_Open_Image.style.display='inline'; Codehighlighter1_79_82_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_79_82_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_79_82_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个事件处理程序的第二个输入参数是一个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><a href="http://msdn2.microsoft.com/en-US/library/system.web.ui.webcontrols.gridviewupdatedeventargs.aspx"><span style="mso-fareast-language: ZH-CN"><font face="Courier New">GridViewUpdatedEventArgs</font></span></a></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类型的对象，它有三个关于处理异常的属性：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Exception</font></span></span><span lang="EN-US"><font face="Verdana"> &#8211;</font></span><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">获取更新操作过程中引发的异常</span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；如果没有抛出异常，该属性的值为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">null</font></span></span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionHandled</font></span></span><span lang="EN-US"><font face="Verdana"> &#8211;</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">获取或设置一个值，它</span><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">指示在更新操作过程中所引发的异常是否已在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">事件处理程序中得到处理</span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">；如果设为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（默认值</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">)</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，该异常将被重新引发，漏出到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">运行时</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="font-family: Symbol; mso-fareast-language: ZH-CN; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">KeepInEditMode</font></span></span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> &#8211; </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">如果设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当前编辑行将维持在编辑模式；如果设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">false</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">（默认值），当前行将恢复到只读模式</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">那么我们的代码应该检测</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Exception</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是否为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">null</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，不是</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">null</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">则意味着执行此操作时引发了一个异常。如果是这样，我们则希望：</span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo3"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件中显示一个对用户友好的提示信息</span></font></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo3"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font size="2">指示异常已经被处理</font></span></p>
<p class="Text" style="margin: 3pt 0cm 3pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo3"><span lang="EN-US" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span style="mso-list: Ignore"><font size="2">&#183;</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font size="2">让当前行保持编辑模式</font></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">下面的代码实现了上述的目的：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US"><o:p><font face="Verdana" size="2"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;GridView1_RowUpdated(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;GridViewUpdatedEventArgs&nbsp;e)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_79_1241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_1241_Open_Text.style.display='none'; Codehighlighter1_79_1241_Closed_Image.style.display='inline'; Codehighlighter1_79_1241_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_79_1241_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_79_1241_Closed_Text.style.display='none'; Codehighlighter1_79_1241_Open_Image.style.display='inline'; Codehighlighter1_79_1241_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_79_1241_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_79_1241_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Exception&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_114_1239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_1239_Open_Text.style.display='none'; Codehighlighter1_114_1239_Closed_Image.style.display='inline'; Codehighlighter1_114_1239_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_114_1239_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_1239_Closed_Text.style.display='none'; Codehighlighter1_114_1239_Open_Image.style.display='inline'; Codehighlighter1_114_1239_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_114_1239_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_114_1239_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Display&nbsp;a&nbsp;user-friendly&nbsp;message</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">There&nbsp;was&nbsp;a&nbsp;problem&nbsp;updating&nbsp;the&nbsp;product.&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Exception.InnerException&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_335_1070_Open_Image" onclick="this.style.display='none'; Codehighlighter1_335_1070_Open_Text.style.display='none'; Codehighlighter1_335_1070_Closed_Image.style.display='inline'; Codehighlighter1_335_1070_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_335_1070_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_335_1070_Closed_Text.style.display='none'; Codehighlighter1_335_1070_Open_Image.style.display='inline'; Codehighlighter1_335_1070_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_335_1070_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_335_1070_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception&nbsp;inner&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.Exception.InnerException;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(inner&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;System.Data.Common.DbException)<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Our&nbsp;database&nbsp;is&nbsp;currently&nbsp;experiencing&nbsp;problems.&nbsp;Please&nbsp;try&nbsp;again&nbsp;later.</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(inner&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;NoNullAllowedException)<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">There&nbsp;are&nbsp;one&nbsp;or&nbsp;more&nbsp;required&nbsp;fields&nbsp;that&nbsp;are&nbsp;missing.</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(inner&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;ArgumentException)<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_785_969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_785_969_Open_Text.style.display='none'; Codehighlighter1_785_969_Closed_Image.style.display='inline'; Codehighlighter1_785_969_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_785_969_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_785_969_Closed_Text.style.display='none'; Codehighlighter1_785_969_Open_Image.style.display='inline'; Codehighlighter1_785_969_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_785_969_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_785_969_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;paramName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((ArgumentException)inner).ParamName;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExceptionDetails.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Concat(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;paramName,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;value&nbsp;is&nbsp;illegal.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(inner&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;ApplicationException)ExceptionDetails.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;inner.Message;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Indicate&nbsp;that&nbsp;the&nbsp;exception&nbsp;has&nbsp;been&nbsp;handled</span><span style="color: #008000"><br />
</span><span style="color: #008080">26</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.ExceptionHandled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Keep&nbsp;the&nbsp;row&nbsp;in&nbsp;edit&nbsp;mode</span><span style="color: #008000"><br />
</span><span style="color: #008080">29</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeepInEditMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这个事件处理程序中，首先检测</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">e.Exception</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是否为</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">null</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。如果不是，设置</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Visible</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">、设置它的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性为&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">There was a problem updating the product.</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;。当前抛出的异常详细信息则保存在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">e.Exception</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">对象的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">InnerException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性里。检查这个内部异常，如果它是特定的类型，则把一些额外的有用的信息附加到</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionDetails</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">标签的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Text</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性。最后，</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ExceptionHandled</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">KeepInEditMode</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">属性都设置为</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">true</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">9</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">展示的是遗漏了产品名称时的页面的截屏；图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">10</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">则显示输入一个不合法的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值（</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">-50</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">）时的结果。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig09cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 9: </font></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductName</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">绑定列必须包含一个值</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://static.asp.net/asp.net/images/dataaccess/18fig10cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 10: </font></span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值不接受负数</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过设置属性为，事件处理程序指示该异常已经被处理。因此，这个异常不会传送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">运行时。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span></strong><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">9</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">10</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示了一种得体的方式处理不正确的用户输入所引发的异常。可是，更理想地，这些不正确的输入不应该到达业务逻辑层，因为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">页面应该在调用</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ProductsBLL</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">类的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法之前就确保用户的输入是有效的。我们在下一节里将会看看如何添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">validation</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到编辑和插入界面从而保证提交到业务逻辑层的数据遵循业务规则。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">validation</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件不但可以阻止调用</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法直到用户提供有效的数据，还可以为定位数据输入问题提供一个更充满提示性的用户体验。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><font color="#808080"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">第三步</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">适当地处理</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">层异常</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">当插入、更新或删除数据时，面对一个数据相关的错误时数据访问层会抛出一个异常。数据库可能未连线，一个必需的数据库表字段可能未指定值，或者违反了某个表间约束。除了确定的数据相关的异常外，业务逻辑层也使用异常指示违反了业务逻辑。在</span><em style="mso-bidi-font-style: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><a href="http://reeezak.cnblogs.com/archive/2006/06/24/434439.html"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US">创建一个业务逻辑层</span></span></a><font face="Verdana"> </font></span></em><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这一节里，作为例子，我们添加了一个业务规则检查最初的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重载。特别地，如果用户标记一个产品为停止供应，我们要求这个产品不能是该供应商唯一供应的产品。如果违反了这个条件，抛出一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplicationException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在这一节里，我们给</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重载增加一个业务规则：禁止把</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">字段的值设置为超过原来的两倍。为了实现这一点，调整</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">重载以使它可以执行这个检查并且在违反该规则时抛出一个</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplicationException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常。此更新方法如下：</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UpdateProduct(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;productName,&nbsp;</span><span style="color: #0000ff">decimal</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitPrice,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;unitsInStock,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;productID)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_102_1076_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_1076_Open_Text.style.display='none'; Codehighlighter1_102_1076_Closed_Image.style.display='inline'; Codehighlighter1_102_1076_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_102_1076_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_102_1076_Closed_Text.style.display='none'; Codehighlighter1_102_1076_Open_Image.style.display='inline'; Codehighlighter1_102_1076_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_102_1076_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_102_1076_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Northwind.ProductsDataTable&nbsp;products&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.GetProductByProductID(productID);<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(products.Count&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;no&nbsp;matching&nbsp;record&nbsp;found,&nbsp;return&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Northwind.ProductsRow&nbsp;product&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;products[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Make&nbsp;sure&nbsp;the&nbsp;price&nbsp;has&nbsp;not&nbsp;more&nbsp;than&nbsp;doubled</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitPrice&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">product.IsUnitPriceNull())<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitPrice&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;product.UnitPrice&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ApplicationException(</span><span style="color: #000000">"</span><span style="color: #000000">When&nbsp;updating&nbsp;a&nbsp;product&nbsp;price,</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;the&nbsp;new&nbsp;price&nbsp;cannot&nbsp;exceed&nbsp;twice&nbsp;the&nbsp;original&nbsp;price.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;product.ProductName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;productName;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitPrice&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitPriceNull();&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitPrice&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitPrice.Value;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(unitsInStock&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;product.SetUnitsInStockNull();&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;product.UnitsInStock&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;unitsInStock.Value;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Update&nbsp;the&nbsp;product&nbsp;record</span><span style="color: #008000"><br />
</span><span style="color: #008080">23</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Adapter.Update(product);<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Return&nbsp;true&nbsp;if&nbsp;precisely&nbsp;one&nbsp;row&nbsp;was&nbsp;updated,&nbsp;otherwise&nbsp;false</span><span style="color: #008000"><br />
</span><span style="color: #008080">26</span><span style="color: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rowsAffected&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="Text" style="margin: 3pt 0cm"></font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span class="CodeFeaturedElement"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font size="2"><strong><font face="Courier New"><span style="mso-spacerun: yes">&nbsp;</span></font></strong></font></span></span><span lang="EN-US"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">通过这个修改，任何超过现有价格两倍的价格更新都回引发一个</span><span class="CodeChar"><span lang="EN-US" style="mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplicationException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常被抛出。就像</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">DAL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">中引发的异常一样，这个</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">BLL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">引发的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplicationException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">异常可以在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理程序中被侦测并处理。实际上，我们已有的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件处理程序的代码可以正确地发现到这个异常并显示</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">ApplicationException</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Message</font></span></span><span class="CodeChar"><span style="font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'">属性的</span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">值。图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">11</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">显示的是当一个用户试图将产品&#8220;</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Chai</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">&#8221;的价格更新为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">$50.00</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">时的截屏，这超过了它原有价格</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">$19.95</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的两倍。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<h6><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><img alt="" src="http://www.asp.net/learn/dataaccess/images/18fig11cs.png" border="0" /><br />
图</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana"> 11: </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">这个业务规则不接受价格增长超出产品现有价格的两倍</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></h6>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextIndented" style="margin: 3pt 18pt"><font size="2"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">注意</span></strong><font face="Verdana"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-language: ZH-CN">:</span></strong><span lang="EN-US" style="mso-fareast-language: ZH-CN"> </span></font><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">理想化地我们的业务规则不应该在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UpdateProduct</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方法重载里而应该在一个公共的方法中。这留作读者练习。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h2 style="margin: 9pt 0cm 3pt"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN"><font color="#808080">总结</font></span></h2>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在插入、更新或删除操作的过程中，数据</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件和</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件都包含了</span><span lang="EN-US"><font face="Verdana">pre- </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">和</span><span lang="EN-US"><font face="Verdana">post-</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">级的事件，它们记录着当前的操作。正如我们在本节和前面的一节里所看到的，当使用一个可编辑的</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">时，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdating</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Updating</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件之后触发，此时</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">update</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">命令发送到</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的隐含对象。完成了此操作，在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">GridView</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">RowUpdated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件之后，触发</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ObjectDataSource</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">Updated</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">事件。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">我们可以为这些发生在操作之前的事件创建事件处理程序，目的是自定义输入参数；为发生在</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">操作之后的事件创建事件处理，目的是检测和相应操作的结果。</span><span lang="EN-US"><font face="Verdana">Post-level</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的事件处理程序通常用作侦测在操作过程中是否出现了一个异常。当面对一个异常时，这些</span><span lang="EN-US"><font face="Verdana">post-level</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的事件处理程序可以随意地处理该异常。在本节里我们看过了如何处理这样的一个异常，显示一个友好的错误提示信息。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">在下一节里我们将看看如何降低因数据格式的问题引起异常的可能性（例如在</span><span class="CodeChar"><span lang="EN-US" style="mso-fareast-language: ZH-CN; mso-bidi-font-family: 'Times New Roman'"><font face="Courier New">UnitPrice</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">输入一个负数）。特别地，我们将看看如何添加</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">validation</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">控件到编辑和插入界面。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><font size="2"><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">祝编程快乐！</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextCharChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<h3 style="margin: 9pt 0cm 3pt"><span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font color="#c0c0c0" size="5">作者简介</font></span></h3>
<p class="TextChar" style="margin: 3pt 0cm"><font size="2"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott Mitchell</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，著有六本</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP/ASP.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">方面的书，是</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">4GuysFromRolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">的创始人，自</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">1998</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">年以来一直应用微软</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Web</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">技术。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Scott</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">是个独立的技</span><span style="mso-fareast-language: ZH-CN"><font face="Verdana"> </font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">术咨询顾问，培训师，作家，最近完成了将由</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">Sams</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">出版社出版的新作，</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">24</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">小时内精通</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">ASP.NET 2.0</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">。他的联系电邮为</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">mitchell@4guysfromrolla.com</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">，也可以通过他的博客</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><font face="Verdana">http://ScottOnWriting.NET</font></span><span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">与他联系。</span><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p></o:p></span></font></p>
<p class="TextChar" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="Text" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 3pt 0cm"><span lang="EN-US" style="mso-fareast-language: ZH-CN"><o:p><font face="Verdana" size="2">&nbsp;</font></o:p></span></p>
<img src="http://www.cnblogs.com/eddie005/aggbug/471446.html?type=1" width="1" height="1" alt=""/><p>评论: 25　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56819/" target="_blank">Yahoo脑震荡 关闭服务汇总</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56824/" target="_blank">2003年微软遭遇iTunes：我们彻底晕头转向了</a><span style="color:gray">(2010-02-10 12:06)</span><br/>· <a href="http://news.cnblogs.com/n/56823/" target="_blank">百度数据能被“作弊”软件篡改？百度:追究侵权</a><span style="color:gray">(2010-02-10 11:52)</span><br/>· <a href="http://news.cnblogs.com/n/56822/" target="_blank">Ksplice为Linux提供永远不用重启服务</a><span style="color:gray">(2010-02-10 11:51)</span><br/>· <a href="http://news.cnblogs.com/n/56821/" target="_blank">视频网站2010年格局之变：七成企业将被淘汰</a><span style="color:gray">(2010-02-10 11:48)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" target="_blank">Google社会化产品Buzz发布会实录</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>【翻译】Scott Mitchell的ASP.NET2.0数据教程中文版索引 </title><link>http://www.cnblogs.com/eddie005/archive/2006/08/01/WorkingWithData_ASPNET2.html</link><dc:creator>№.零零伍</dc:creator><author>№.零零伍</author><pubDate>Tue, 01 Aug 2006 10:24:00 GMT</pubDate><guid>http://www.cnblogs.com/eddie005/archive/2006/08/01/WorkingWithData_ASPNET2.html</guid><description><![CDATA[<p>阅读: 16367 评论: 20 作者: <a href="http://www.cnblogs.com/eddie005/" target="_blank">№.零零伍</a> 发表于 2006-08-01 18:24 <a href="http://www.cnblogs.com/eddie005/archive/2006/08/01/WorkingWithData_ASPNET2.html" target="_blank">原文链接</a></p><p class="postText"><span>本教程共有46篇；参与这些教程翻译的有若干网友，通过点击下面的目录就能转到他们各自的博客；<br />
本人只翻译了其中几篇，有不当之处敬请指出；为了方便访客阅读全文在此列出中文版目录索引。<br />
<br />
<strong><span style="color: red"><strong>非常抱歉，前段时间没有注意原文中的图片链接已经更改，造成图片显示不出来，现已修复，谢谢！</strong><br />
</span></strong><br />
</p>
<div class="postText">
<dt>
<p><strong>导言</strong></p>
<ul>
    <li><a href="http://blog.joycode.com/saucer/articles/77807.aspx" target="_blank"><font color="#56662d">创建一个数据访问层</font></a>
    <li><a href="http://reeezak.cnblogs.com/archive/2006/06/24/434439.html" target="_blank"><font color="#56662d">创建一个业务逻辑层</font></a>
    <li><a href="http://yuyijq.cnblogs.com/archive/2006/06/25/435218.html" target="_blank"><font color="#56662d">母板页和站点导航</font></a>&nbsp; </li>
</ul>
</dt></div>
<dt><strong>基本报表</strong>&nbsp;
<ul>
    <li><a href="http://eddie005.cnblogs.com/articles/UsingObjectDataSource.html" target="_blank"><font color="#56662d">使用ObjectDataSource展现数据</font><a href="http://www.asp.net/learn/dataaccess/tutorial04cs.aspx?tabid=63"></a> </a>
    <li><a href="http://eddie005.cnblogs.com/archive/2006/06/26/DeclarativeParameters.html" target="_blank"><font color="#56662d">声明参数</font></a>
    <li><a href="http://eddie005.cnblogs.com/archive/2006/06/27/SetParameters.html" target="_blank"><font color="#56662d">编程设置ObjectDataSource的参数值</font></a> </li>
</ul>
<dt><strong>主/从</strong>&nbsp;
<ul>
    <li><a href="http://lidong.cnblogs.com/archive/2006/06/23/434105.html" target="_blank"><font color="#56662d">使用DropDownList过滤的主/从报表</font></a><strong>&nbsp;&nbsp;&nbsp;</strong>
    <li><a href="http://lidong.cnblogs.com/archive/2006/06/28/437704.html" target="_blank"><font color="#56662d">使用两个DropDownList过滤的主/从报表</font></a>
    <li><a href="http://lidong.cnblogs.com/archive/2006/07/05/443203.html" target="_blank"><font color="#56662d">跨页面的主/从报表</font></a>&nbsp;
    <li><a href="http://lidong.cnblogs.com/archive/2006/07/05/443207.html" target="_blank"><font color="#56662d">使用GridView 和DetailView实现的主/从报表</font></a> </li>
</ul>
<dt><strong>自定义格式化</strong>&nbsp;
<ul>
    <li><a href="http://zhzkl.cnblogs.com/archive/2006/07/01/440614.html" target="_blank"><font color="#56662d">基于数据的自定义格式化</font></a>
    <li><a href="http://reeezak.cnblogs.com/archive/2006/07/06/444315.html" target="_blank"><font color="#56662d">在GridView控件中使用TemplateField </font></a>
    <li><a href="http://reeezak.cnblogs.com/archive/2006/07/06/444700.html" target="_blank"><font color="#56662d">在DetailsView控件中使用TemplateField</font></a>
    <li><a href="http://reeezak.cnblogs.com/archive/2006/07/07/445611.html" target="_blank"><font color="#56662d">使用FormView 的模板</font></a> <a href="http://reeezak.cnblogs.com/archive/2006/07/09/446444.html" target="_blank">
    <li>在GridView的页脚中显示统计信息 </a></li>
</ul>
<dt></span>&nbsp;&nbsp;<strong>编辑插入和删除数据</strong>&nbsp;
<ul>
    <li><a title="概述插入、更新和删除数据" href="http://www.cnblogs.com/eddie005/archive/2006/08/28/488507.html">概述插入、更新和删除数据</a>&nbsp;
    <li><u><font color="#0000ff"><a title="研究插入、更新和删除的关联事件" href="http://www.cnblogs.com/eddie005/archive/2006/08/18/EventsOfDataWebControl.html">研究插入、更新和删除的关联事件</a></font></u>
    <li><a href="http://www.cnblogs.com/eddie005/archive/2006/08/08/BLLAndDALExceptions.html" target="_blank"><font color="#56662d">在ASP.NET页面中处理BLL/DAL异常</font></a>&nbsp;
    <li><a href="http://truly.cnblogs.com/archive/2006/06/27/437107.html" target="_blank"><font color="#56662d">给编辑和新增界面增加验证控件</font></a>&nbsp;
    <li><a href="http://truly.cnblogs.com/archive/2006/06/29/438526.html" target="_blank"><font color="#56662d">定制数据修改界面</font></a>
    <li><a href="http://www.cnblogs.com/eddie005/archive/2006/08/01/OptimisticConcurrency.html" target="_blank"><font color="#56662d">实现开放式并发&nbsp;</font></a>&nbsp;
    <li><a href="http://chagel.cnblogs.com/archive/2006/07/19/454440.html" target="_blank"><font color="#56662d">为删除数据添加客户端确认</font></a>
    <li><a href="http://chagel.cnblogs.com/articles/456883.html" target="_blank"><font color="#56662d">基于用户对修改数据进行限制</font></a> </li>
</ul>
<strong>
<p><strong>分页和排序</strong>&nbsp; </p>
<ul>
    <li><a href="http://www.cnblogs.com/lovecherry/archive/2006/08/25/486077.html"><font color="#56662d">分页和排序报表数据</font></a>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/10/523992.html" target="_blank"><font color="#56662d">大数据量时提高分页的效率</font></a>
    <li><a href="http://www.cnblogs.com/lovecherry/archive/2006/09/05/494998.html" target="_blank"><font color="#56662d">排序自定义分页数据</font></a>
    <li><a href="http://blog.csdn.net/ksnoopy/archive/2006/08/27/1125097.aspx" target="_blank"><font color="#56662d">创建自定义排序用户界面</font></a>&nbsp;<a href="http://reeezak.cnblogs.com/archive/2006/07/06/444315.html" target="_blank"></a> </li>
</ul>
<p><strong>自定义按钮行为</strong>&nbsp; </p>
<ul>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/04/521400.html" target="_blank"><font color="#56662d">GridView里的Button &nbsp;</font></a> </li>
</ul>
<p><strong>使用DataList和Repeater显示数据</strong>&nbsp; </p>
<ul>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/07/521593.html" target="_blank"><font color="#56662d">用DataList和Repeater来显示数据</font></a>&nbsp;
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/08/523252.html" target="_blank"><font color="#56662d">格式化DataList和Repeater的数据</font></a>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/13/527119.html" target="_blank"><font color="#56662d">使用DataList来一行显示多条记录</font></a>&nbsp;
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/17/527593.html" target="_blank"><font color="#56662d">数据控件的嵌套</font></a> </li>
</ul>
<p><strong>使用DataList和Repeater过滤数据</strong>&nbsp; </p>
<ul>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/23/533180.html" target="_blank"><font color="#56662d">使用DropDownList过滤的主/从报表</font></a>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/26/537273.html" target="_blank"><font color="#56662d">跨页面的主/从报表</font></a>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/10/30/539128.html" target="_blank"><font color="#56662d">使用Repeater和DataList实现的主/从报表</font></a>&nbsp; </li>
</ul>
<strong>
<p><strong>使用DataList编辑和删除数据</strong>&nbsp; </p>
<ul>
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/11/03/546974.html" target="_blank"><font color="#56662d">综叙：在DataList里编辑和删除数据</font></a>&nbsp;
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/11/07/551210.html" target="_blank"><font color="#56662d">批量更新</font></a>&nbsp;
    <li><a href="http://www.cnblogs.com/ilovejolly/archive/2006/11/08/551745.html" tar