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
[Flags]
public enum DataRowState


{
Added = 4,
Deleted = 8,
Detached = 1,
Modified = 0x10,
Unchanged = 2
}
RowVersion
public enum DataRowVersion


{
Current = 0x200,
Default = 0x600,
Original = 0x100,
Proposed = 0x400
}
2)在DataRow的不同RowState下取不同RowVersion的值会是怎样的哪,我们通过下面的代码进行测试:
Code
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace DataRowRowStateAndRowVersion
10

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

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