100165605.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 440 行 · 第 1/5 页
HTM
440 行
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 112.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="149">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Original</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 324.6pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="433">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">最初从数据库中选择出来的列值。如果调用了</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">DataRow</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">的</span><span lang="EN-US">AcceptChanges</span><span style="FONT-FAMILY: 宋体">方法,该值就更新为当前值</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 112.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="149">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Proposed</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 324.6pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="433">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">对列进行逐步的修改时,可以检索到这个已改变的值。如果在行上调用了方法</span><span lang="EN-US">BeginEdit()</span><span style="FONT-FAMILY: 宋体">,并进行了修改,每一列都会有一个推荐值,直到调用了</span><span lang="EN-US">EndEdit()</span><span style="FONT-FAMILY: 宋体">或</span><span lang="EN-US">CancelEdit()</span><span style="FONT-FAMILY: 宋体">为止</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">可以以许多方式使用给定列的版本。例如,在数据库中更新数据行时,常常使用如下</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">语句:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">UPDATE Products</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">SET Name = Column.Current</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">WHERE ProductID = xxx</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">AND Name = Column.Original;</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">显然,这段代码永远不会编译,但它说明了列的初值和当前值的一个用法。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">要从</span><span lang="EN-US">DataRow</span><span style="FONT-FAMILY: 宋体">索引器中检索某个版本的值,应使用索引器方法,把</span><span lang="EN-US">DataRowVersion</span><span style="FONT-FAMILY: 宋体">值作为一个参数。下面的代码段说明了如何获得</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中每一列的所有值:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">foreach (DataRow row in ds.Tables["Customers"].Rows )</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> foreach ( DataColumn dc in ds.Tables["Customers"].Columns )</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> Console.WriteLine ("{0} Current = {1}" , dc.ColumnName , </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> row[dc,DataRowVersion.Current]);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> Console.WriteLine (" Default = {0}" , row[dc,DataRowVersion.Default]);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> Console.WriteLine (" Original = {0}" , row[dc,DataRowVersion.Original]);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">整个数据行有一个状态标志</span><span lang="EN-US">RowState</span><span style="FONT-FAMILY: 宋体">,可以用于确定在返回数据库时需要对该行进行什么操作。</span><span lang="EN-US">RowState</span><span style="FONT-FAMILY: 宋体">标志跟踪对</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">所作的所有改变,例如添加新行、删除现有的行,改变表中的列。当数据与数据库保持一致时,行的状态标志用于确定应执行什么</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">操作。这些标志由</span><span lang="EN-US">DataRowState</span><span style="FONT-FAMILY: 宋体">枚举定义,如表</span><span lang="EN-US">21-6</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p class="a5" style="MARGIN-TOP: 8.15pt"><a ftel="DataRowState"><span style="FONT-FAMILY: 黑体">表</span><span lang="EN-US"> 21-6</span></a></p>
<div align="center">
<table class="MsoNormalTable" style="MARGIN-LEFT: -18.55pt; WIDTH: 436.7pt; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none" cellspacing="0" cellpadding="0" width="582" border="1">
<tbody>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="131">
<p class="a2"><span lang="EN-US">DataRowState</span><span style="FONT-FAMILY: 黑体">值</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
<p class="a2"><span style="FONT-FAMILY: 黑体">说</span><span lang="EN-US"> </span><span style="FONT-FAMILY: 黑体">明</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="131">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Added</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">把新数据行添加到</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">Rows</span><span style="FONT-FAMILY: 宋体">集合中。在客户机中创建的所有行都设置为这个值,最终在与数据库保持一致时,会使用</span><span lang="EN-US">SQL INSERT</span><span style="FONT-FAMILY: 宋体">语句</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="131">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Deleted</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">通过</span><span lang="EN-US">DataRow.Delete()</span><span style="FONT-FAMILY: 宋体">方法把</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的数据行标记为删除。该行仍存在</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中,但在屏幕上看不到它</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">除非显式设置</span><span lang="EN-US">DataView)</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">DataView</span><span style="FONT-FAMILY: 宋体">在下一章讨论。在</span><span lang="EN-US">DataTable </span><span style="FONT-FAMILY: 宋体">中标记为已删除的</span><span lang="EN-US">Rows</span><span style="FONT-FAMILY: 宋体">将在与数据库保持一致时从数据库中删除</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="131">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Detached</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">数据行在创建后立即显示为这个状态,调用</span><span lang="EN-US">DataRow.Remove()</span><span style="FONT-FAMILY: 宋体">也可以返回这个状态。分立的行不是任何</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">的一部分,因此处于这种状态的行不能使用任何</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体">语句</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="131">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Modified</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">如果列中的值发生了改变,就会修改一行数据</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 97.9pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="131">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Unchanged</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 338.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="452">
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?