1)什么是DataRow's RowState and RowVersion?
      DataRow's RowState是数据行的状态,RowVersion是数据行的版本。
   RowState and Row Version are both enum object.
   The codesnap is the following detail:

 DataRowState
DataRowState
 [Flags]
[Flags]
 public enum DataRowState
public enum DataRowState


 {
{
 Added = 4,
    Added = 4,
 Deleted = 8,
    Deleted = 8,
 Detached = 1,
    Detached = 1,
 Modified = 0x10,
    Modified = 0x10,
 Unchanged = 2
    Unchanged = 2
 }
} 

 RowVersion
RowVersion
 public enum DataRowVersion
public enum DataRowVersion


 {
{
 Current = 0x200,
    Current = 0x200,
 Default = 0x600,
    Default = 0x600,
 Original = 0x100,
    Original = 0x100,
 Proposed = 0x400
    Proposed = 0x400
 }
}
 
2)在DataRow的不同RowState下取不同RowVersion的值会是怎样的哪,我们通过下面的代码进行测试:

 Code
Code
 1 using System;
using System;
 2 using System.Collections.Generic;
using System.Collections.Generic;
 3 using System.ComponentModel;
using System.ComponentModel;
 4 using System.Data;
using System.Data;
 5 using System.Drawing;
using System.Drawing;
 6 using System.Text;
using System.Text;
 7 using System.Windows.Forms;
using System.Windows.Forms;
 8
 9 namespace DataRowRowStateAndRowVersion
namespace DataRowRowStateAndRowVersion
10

 {
{
11 public partial class Form1 : Form
    public partial class Form1 : Form
12
 
     {
{
13 public Form1()
        public Form1()
14
 
         {
{
15 InitializeComponent();
            InitializeComponent();
16 }
        }
17
18 private void button1_Click(object sender, EventArgs e)
        private void button1_Click(object sender, EventArgs e)
19
 
         {
{
20 DataTable dt = new DataTable();
            DataTable dt = new DataTable();
21 DataColumn dc = new DataColumn("value",typeof(string));
            DataColumn dc = new DataColumn("value",typeof(string));
22 dt.Columns.Add(dc);
            dt.Columns.Add(dc);
23 dc = new DataColumn("name",typeof(string));
            dc = new DataColumn("name",typeof(string));
24 dt.Columns.Add(dc);
            dt.Columns.Add(dc);
25
26 //0
            //0
27 DataRow dr = dt.NewRow();
            DataRow dr = dt.NewRow();
28 dr["value"] = "value";
            dr["value"] = "value";
29 dr["name"] = "Deleted";
            dr["name"] = "Deleted";
30 dt.Rows.Add(dr);
            dt.Rows.Add(dr);
31
32 //1
            //1
33 dr = dt.NewRow();
            dr = dt.NewRow();
34 dr["value"] = "value";
            dr["value"] = "value";
35 dr["name"] = "Modified";
            dr["name"] = "Modified";
36 dt.Rows.Add(dr);
            dt.Rows.Add(dr);
37
38 //2
            //2
39 dr = dt.NewRow();
            dr = dt.NewRow();
40 dr["value"] = "value";
            dr["value"] = "value";
41 dr["name"] = "Unchanged";
            dr["name"] = "Unchanged";
42 dt.Rows.Add(dr);
            dt.Rows.Add(dr);
43
44 dt.AcceptChanges();
            dt.AcceptChanges();
45
46 dt.Rows[0].Delete();
            dt.Rows[0].Delete();
47 dt.Rows[1]["value"] = "modified";
            dt.Rows[1]["value"] = "modified";
48
49 //3
            //3
50 dr = dt.NewRow();
            dr = dt.NewRow();
51 dr["value"] = "value";
            dr["value"] = "value";
52 dr["name"] = "Added";
            dr["name"] = "Added";
53 dt.Rows.Add(dr);
            dt.Rows.Add(dr);
54
55 //4
            //4
56 dr = dt.NewRow();
            dr = dt.NewRow();
57 dr["value"] = "value";
            dr["value"] = "value";
58 dr["name"] = "Detached";
            dr["name"] = "Detached";
59 }
        }
60 }
    }
61 }
} 
3) 测试结果:

4)结果分析:
DataRow在Deleted RowState状态下只有Original DataRowVersion的值可以访问,访问其他版本的的值都会引发异常。
只有在Detached状态下可以访问Proposed和Default版本的值,其他状态下访问Proposed的值将引发异常。
Current版本的值在Deleted和Detached状态下访问会引发异常。
5)相关链接
关于DataRow的RowState和RowVersion