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

你可能感兴趣的:(table,delete,output)