DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行。下面简要的介绍一下行状态和行版本的特点和关系。
ü 行状态(RowState):
l UnChanged状态:指表中的行自创建之后没有做过任何改动的状态,或则是行在上次接受修改之后,至今未做过任何改动的状态。
l Added状态:该状态是指已经将行添加到表中,但是尚未调用表对象的AcceptChanged方法。调用AcceptChanged方法时,所有处在Added状态的行都变为Unchanged状态。
l Modified状态:该状态表示该行已经被修改。调用AcceptChanged方法时,所有处在Modified状态的行都变为Unchanged状态
l Deleted状态:该状态表示该行已经从表中删除,但是尚未调用表对象的AcceptChanged方法
l Detached状态:该状态表示该行不属于任何表,或则已经从表中分离出去了,不再属于任何表的DataRow对象。
下面举例说行的变化状态。新建的行(DataRow对象)处于Detached状态,把它添加到DataTable对象之后,该DataRow对象的状态变为Added状态。如果对该DataRow进行了修改,则该行处于Modified状态。如果使用Remove方法从表中移除该DataRow对象,或则使用Delete方法和AcceptChanged方法移除该行,则该行处于Detached状态。
ü 行版本(DataRowVersion)
行(DataRow)对象有四种不同的行版本,分别是Current,Original,proposed和default。下面对这些行版本进行简要的说明。
l Current:表示行的当前值。处于deleted状态的行不存在该行版本。
l Original:表示行的原始值。处于Added状态的行不存在该行版本
l Proposed:表示行的建议值。不属于表的行,即处于Detached状态的行存在该行版本;对于正在进行编辑的行,也存在该行版本。
l Default:表示行的默认版本。处于Added,Modified或则Unchanged状态的行的默认行版本是current;处于deleted状态的行的默认行版本是original。处于Detached状态的行的默认版本是proposed。
下面举例说明行状态和行版本的变化。当调用AcceptChanged方法,所有处于deleted状态的行将变为Detached状态,即被移除。其余的行会变为Unchanged状态,并且Original版本中的值会改写为current行版本的值。
http://cyjwlj.spaces.live.com/blog/cns!61937147116f197a!148.entry
DataRow的RowState和DataRowVersion.Original
static void Main()
{
// Create a new DataRow.
row = table.NewRow();
// Detached row.
Console.WriteLine("New Row " + row.RowState);
if (row.HasVersion(DataRowVersion.Original))
Console.WriteLine("New Row " + "XXXXXXXXXXXXXXXXXXX");
table.Rows.Add(row);
// AddRow row.
Console.WriteLine("AddRow " + row.RowState);
if (row.HasVersion(DataRowVersion.Original))
Console.WriteLine("AddRow " + "XXXXXXXXXXXXXXXXXXX");
table.AcceptChanges();
// Unchanged row.
Console.WriteLine("AcceptChanges " + row.RowState);
if (row.HasVersion(DataRowVersion.Original))
Console.WriteLine("AcceptChanges " + "XXXXXXXXXXXXXXXXXXX");
row["FirstName"] = "Scott";
// Modified row.
Console.WriteLine("Modified " + row.RowState);
if (row.HasVersion(DataRowVersion.Original))
Console.WriteLine("Modified " + "XXXXXXXXXXXXXXXXXXX");
row.Delete();
// Deleted row.
Console.WriteLine("Deleted " + row.RowState);
if (row.HasVersion(DataRowVersion.Original))
Console.WriteLine("Deleted " + "XXXXXXXXXXXXXXXXXXX");
}
static DataTable MakeTable()
{
// Make a simple table with one column.
DataTable table = new DataTable("table");
DataColumn dcFirstName = new DataColumn(
"FirstName", Type.GetType("System.String"));
table.Columns.Add(dcFirstName);
return table;
}
output:
New Row Detached
AddRow Added
AcceptChanges Unchanged
AcceptChanges XXXXXXXXXXXX
Modified Modified
Modified XXXXXXXXXXXX
Deleted Deleted
Deleted XXXXXXXXXXXX
分享到:
相关推荐
### 一、理解DataRow和DataTable 在开始之前,首先需要明确`DataRow`和`DataTable`的概念: - **DataRow**:表示`DataTable`中的单个数据行。它包含了该行的所有列值以及对该行进行更改的能力。 - **DataTable**:...
总的来说,“选中对象,获取邻接对象属性值”是GIS应用中常见的操作,它结合了空间分析和属性查询的能力。通过SuperMap .NET的iObject和SpatialQuery类,开发者可以方便地实现这一功能,从而在实际项目中实现更复杂...
在本文中,我们将深入探讨如何使用 ADO.NET 中的 DataRow 对象来操作数据,包括导入、加载、遍历、查找和检查数据。 首先,创建和导入行可以通过 DataTable 的几个方法实现。例如,`ImportRow` 方法用于将一个 ...
反射是.NET中的一种强大特性,让我们能够在运行时动态地操作类型和对象。通过反射,我们可以方便地将`DataRow`对象的数据转换为自定义的实体类。虽然反射带来便利,但需要注意其潜在的性能问题,并采取适当的优化...
通过使用`DataRow.IsNull(columnName)`,可以直接检查列是否为DBNull.Value。 ```csharp foreach (DataRow dr in table[0].Rows) { if (!dr.IsNull("score1")) { score1 = Convert.ToInt32(dr["score1"]); }...
、XML的完整性:DataSet对象和XML文档几乎是可互换的。 、创建DataSet对象: 、查看调用SqlDataAdapter.Fill创建的结构 、查看SqlDataAdapter返回的数据 DataRow对象 DataRow中的数据 DatTable中...
每个 DataTable 对象都可以包含多个 DataRow 对象,表示表格中的每一行记录。 在实际应用中,我们可以使用 DataSet 来实现数据的增删改查操作。 1. 表格新增记录方式 在 C# 中,我们可以使用 BindingSource 的 ...
你可以创建`CellStyle`对象,设置相应的属性,然后将其应用到单元格上。 7. **保存文件** 最后,你需要将工作簿保存为Excel文件。对于内存中的工作簿,可以使用`FileStream`创建一个文件流,然后调用`WriteTo...
2. 数据更新:DataSet支持乐观并发控制,通过DataRow的RowState和OriginalValues,可以检测在提交更改期间数据库是否已被其他用户修改。更新数据库使用DataAdapter的Update方法,它会根据数据行的状态(如已修改、...
DataSet对象可以包含多个DataTable对象,每个DataTable对象都可以包含多个DataRow对象。我们可以通过校验DataTable对象的Constrains集合来了解数据的约束关系: ①、校验DataColumn的属性:ReadOnly, AllowDBNull, ...
`DataRow`的状态由`DataRow.RowState`属性表示,反映了其相对于`DataTable`的状态,如`Added`、`Deleted`、`Modified`、`Detached`、`Unchanged`等。 - 新建`DataRow`后,其初始状态为`Detached`,需要通过`...
生成 Excel 文件的过程可以分为三步:创建工作簿对象、写入数据和设置字体和单元格样式。 创建工作簿对象 首先,需要引入 POI 的包 import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util....
`DataRow`的状态由`DataRow.RowState`属性标识,包括`Added`(新添加)、`Deleted`(已删除)、`Detached`(未关联)、`Modified`(已修改)、`Unchanged`(未变更)。状态管理机制确保了数据更新的追踪和事务性操作...
在将DataTable中的值赋给T对象的属性时,需要比较属性名和列名是否相同。如果相同,则赋值;否则,不赋值。 10. 使用ToList()方法 在将DataTable对象转换为List对象时,需要使用ToList()方法来将DataTable对象转换...
该类通过对 ADO.NET 提供的 `SqlConnection` 和 `SqlCommand` 等对象进行封装,使得开发者能够更高效、更简洁地执行数据库相关的操作。随着时间的发展,基于 `SqlHelper.cs` 的设计理念,社区还扩展出了针对其他类型...
7. **DataColumn对象**:定义DataTable中的列,包括列名、数据类型和其他属性。 8. **DataRow对象**:表示DataTable中的一行数据,可以修改、添加或删除数据。 9. **Transaction对象**:用于管理数据库事务,确保...
在这个例子中,我们定义了一个名为`Class1`的实体类,它包含两个属性:`IntTemp`和`StrTemp`。 ```csharp public class Class1 { private int intTemp; public int IntTemp { get { return intTemp; } set { ...
shp文件主要存储几何对象,如点、线和多边形,而.dbf文件则存储与这些几何对象相关的属性信息。在C#中,我们可以利用开源库如SharpMap或NetTopologySuite来操作shapefile。 1. **引入必要的库**: 在C#项目中,...
在C#编程中,处理数据时,经常需要追踪和管理DataTable中的...了解和熟练运用RowState和DataRowVersion,可以提高代码的健壮性和处理复杂数据场景的能力。对于C#初学者而言,掌握这些概念和用法具有很高的学习价值。
dataRow.createCell(0).setCellValue(user.getName()); dataRow.createCell(1).setCellValue(user.getPhone()); dataRow.createCell(2).setCellValue(user.getAge()); } // 下载导出(一个流两个头) // 设置头...