1)什么是DataRow's RowState and RowVersion?
DataRow's RowState是数据行的状态,RowVersion是数据行的版本。
RowState and Row Version are both enum object.
The codesnap is the following detail:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
DataRowState
[Flags]
public enum DataRowState
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
Added = 4,
Deleted = 8,
Detached = 1,
Modified = 0x10,
Unchanged = 2
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
RowVersion
public enum DataRowVersion
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
Current = 0x200,
Default = 0x600,
Original = 0x100,
Proposed = 0x400
}
2)在DataRow的不同RowState下取不同RowVersion的值会是怎样的哪,我们通过下面的代码进行测试:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
namespace DataRowRowStateAndRowVersion
10![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
11
public partial class Form1 : Form
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
public Form1()
14![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
15
InitializeComponent();
16
}
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
private void button1_Click(object sender, EventArgs e)
19![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
//0
27
DataRow dr = dt.NewRow();
28
dr["value"] = "value";
29
dr["name"] = "Deleted";
30
dt.Rows.Add(dr);
31![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
//1
33
dr = dt.NewRow();
34
dr["value"] = "value";
35
dr["name"] = "Modified";
36
dt.Rows.Add(dr);
37![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
//2
39
dr = dt.NewRow();
40
dr["value"] = "value";
41
dr["name"] = "Unchanged";
42
dt.Rows.Add(dr);
43![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
dt.AcceptChanges();
45![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
dt.Rows[0].Delete();
47
dt.Rows[1]["value"] = "modified";
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
//3
50
dr = dt.NewRow();
51
dr["value"] = "value";
52
dr["name"] = "Added";
53
dt.Rows.Add(dr);
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
//4
56
dr = dt.NewRow();
57
dr["value"] = "value";
58
dr["name"] = "Detached";
59
}
60
}
61
}
3) 测试结果:
![](https://www.cnblogs.com/images/cnblogs_com/thinkf/DataRowStateAndVersion.GIF)
4)结果分析:
DataRow在Deleted RowState状态下只有Original DataRowVersion的值可以访问,访问其他版本的的值都会引发异常。
只有在Detached状态下可以访问Proposed和Default版本的值,其他状态下访问Proposed的值将引发异常。
Current版本的值在Deleted和Detached状态下访问会引发异常。
5)相关链接
关于DataRow的RowState和RowVersion