`
lsuper
  • 浏览: 923 次
社区版块
存档分类
最新评论

DataRow对象的RowState和DataRowVersion属性特点 .

 
阅读更多

   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`的概念: - **DataRow**:表示`DataTable`中的单个数据行。它包含了该行的所有列值以及对该行进行更改的能力。 - **DataTable**:...

    选中对象,获取邻接对象属性值

    总的来说,“选中对象,获取邻接对象属性值”是GIS应用中常见的操作,它结合了空间分析和属性查询的能力。通过SuperMap .NET的iObject和SpatialQuery类,开发者可以方便地实现这一功能,从而在实际项目中实现更复杂...

    探讨 ADO.NET DataRow

    在本文中,我们将深入探讨如何使用 ADO.NET 中的 DataRow 对象来操作数据,包括导入、加载、遍历、查找和检查数据。 首先,创建和导入行可以通过 DataTable 的几个方法实现。例如,`ImportRow` 方法用于将一个 ...

    反射,DataRow转换为实体类

    反射是.NET中的一种强大特性,让我们能够在运行时动态地操作类型和对象。通过反射,我们可以方便地将`DataRow`对象的数据转换为自定义的实体类。虽然反射带来便利,但需要注意其潜在的性能问题,并采取适当的优化...

    对象不能从 DBNull 转换为其他类型

    通过使用`DataRow.IsNull(columnName)`,可以直接检查列是否为DBNull.Value。 ```csharp foreach (DataRow dr in table[0].Rows) { if (!dr.IsNull("score1")) { score1 = Convert.ToInt32(dr["score1"]); }...

    DataSet详细用法(最全面)

    、XML的完整性:DataSet对象和XML文档几乎是可互换的。 、创建DataSet对象: 、查看调用SqlDataAdapter.Fill创建的结构 、查看SqlDataAdapter返回的数据 DataRow对象 DataRow中的数据 DatTable中...

    C#关键字DataSet DataTable DataRow DataColumn数据集应用大全

    每个 DataTable 对象都可以包含多个 DataRow 对象,表示表格中的每一行记录。 在实际应用中,我们可以使用 DataSet 来实现数据的增删改查操作。 1. 表格新增记录方式 在 C# 中,我们可以使用 BindingSource 的 ...

    .net NPOI方式导出Excel

    你可以创建`CellStyle`对象,设置相应的属性,然后将其应用到单元格上。 7. **保存文件** 最后,你需要将工作簿保存为Excel文件。对于内存中的工作簿,可以使用`FileStream`创建一个文件流,然后调用`WriteTo...

    C#中DataSet的用法(很详细)

    2. 数据更新:DataSet支持乐观并发控制,通过DataRow的RowState和OriginalValues,可以检测在提交更改期间数据库是否已被其他用户修改。更新数据库使用DataAdapter的Update方法,它会根据数据行的状态(如已修改、...

    C# DataSet和DataTable详解

    DataSet对象可以包含多个DataTable对象,每个DataTable对象都可以包含多个DataRow对象。我们可以通过校验DataTable对象的Constrains集合来了解数据的约束关系: ①、校验DataColumn的属性:ReadOnly, AllowDBNull, ...

    DataTable,DataView和DataGrid中一些容易混淆的概念

    `DataRow`的状态由`DataRow.RowState`属性表示,反映了其相对于`DataTable`的状态,如`Added`、`Deleted`、`Modified`、`Detached`、`Unchanged`等。 - 新建`DataRow`后,其初始状态为`Detached`,需要通过`...

    Java生成Excel文件.docx

    生成 Excel 文件的过程可以分为三步:创建工作簿对象、写入数据和设置字体和单元格样式。 创建工作簿对象 首先,需要引入 POI 的包 import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util....

    DataTable,DataView和DataGrid中一些容易混淆的概念.pdf

    `DataRow`的状态由`DataRow.RowState`属性标识,包括`Added`(新添加)、`Deleted`(已删除)、`Detached`(未关联)、`Modified`(已修改)、`Unchanged`(未变更)。状态管理机制确保了数据更新的追踪和事务性操作...

    【ASP.NET编程知识】C#将DataTable转化为ListT.docx

    在将DataTable中的值赋给T对象的属性时,需要比较属性名和列名是否相同。如果相同,则赋值;否则,不赋值。 10. 使用ToList()方法 在将DataTable对象转换为List对象时,需要使用ToList()方法来将DataTable对象转换...

    微软SqlHelper类中文注释和使用方法

    该类通过对 ADO.NET 提供的 `SqlConnection` 和 `SqlCommand` 等对象进行封装,使得开发者能够更高效、更简洁地执行数据库相关的操作。随着时间的发展,基于 `SqlHelper.cs` 的设计理念,社区还扩展出了针对其他类型...

    ADO.NET对象的使用.doc

    7. **DataColumn对象**:定义DataTable中的列,包括列名、数据类型和其他属性。 8. **DataRow对象**:表示DataTable中的一行数据,可以修改、添加或删除数据。 9. **Transaction对象**:用于管理数据库事务,确保...

    C#数据实体类中如何给属性赋值

    在这个例子中,我们定义了一个名为`Class1`的实体类,它包含两个属性:`IntTemp`和`StrTemp`。 ```csharp public class Class1 { private int intTemp; public int IntTemp { get { return intTemp; } set { ...

    学会用C#文件读取shp(shapefile格式)文件

    shp文件主要存储几何对象,如点、线和多边形,而.dbf文件则存储与这些几何对象相关的属性信息。在C#中,我们可以利用开源库如SharpMap或NetTopologySuite来操作shapefile。 1. **引入必要的库**: 在C#项目中,...

    C#获取变更过的DataTable记录的实现方法

    在C#编程中,处理数据时,经常需要追踪和管理DataTable中的...了解和熟练运用RowState和DataRowVersion,可以提高代码的健壮性和处理复杂数据场景的能力。对于C#初学者而言,掌握这些概念和用法具有很高的学习价值。

    poi导出excel所用jar包,可添加至maven仓库,也可以自己配置,适合各种浏览器

    dataRow.createCell(0).setCellValue(user.getName()); dataRow.createCell(1).setCellValue(user.getPhone()); dataRow.createCell(2).setCellValue(user.getAge()); } // 下载导出(一个流两个头) // 设置头...

Global site tag (gtag.js) - Google Analytics