class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); DataRow oneRow = dt.NewRow(); oneRow[0] = 1; Console.WriteLine("新行的状态及版本:"); output(oneRow); dt.Rows.Add(oneRow); Console.WriteLine("\n" + "增加到表中后的状态和版本:"); output(oneRow); oneRow.BeginEdit(); oneRow[0] = 5; Console.WriteLine("\n" + "开始编辑时的状态和版本:"); output(oneRow); oneRow.EndEdit(); Console.WriteLine("\n" + "结束编辑时的状态和版本:"); output(oneRow); oneRow.AcceptChanges(); Console.WriteLine("\n" + "接受更改后的状态和版本:"); output(oneRow); oneRow[0] = 6; Console.WriteLine("\n" + "再次编辑后的状态和版本"); output(oneRow); oneRow.RejectChanges(); Console.WriteLine("\n" + "拒绝更改后的状态和版本"); output(oneRow); dt.Rows[0].Delete(); Console.WriteLine("\n" + "删除后的状态和版本:"); output(oneRow); dt.RejectChanges(); Console.WriteLine("\n" + "拒绝更改后的状态和版本"); output(oneRow); dt.Rows.Remove(oneRow); Console.WriteLine("\n" + "移除后的状态和版本"); output(oneRow); Console.ReadKey(); } static void output(DataRow oneRow) { int[] version = { 256, 512, 1024, 1536, }; //打印行状态 Console.WriteLine(oneRow.RowState); foreach (int i in version) { if (oneRow.HasVersion((DataRowVersion)i)) //打印行版本名称及对应的值,用空格隔开 Console.Write(" " + (DataRowVersion)i + " " + oneRow[0, (DataRowVersion)i]); } Console.WriteLine("\n-----------------------------------"); } }
行状态还好理解, 书上写的行版本看了多次也记不住, 自己花了一些时间, 终于有了自己的总结:
Original :"原始值" 顾名思义, 调用AcceptChange才会出现的版本, delete后唯一的版本
Proposed: 连接到DataTable时BeginEdit才会有的版本EndEdit就没了, 没连接到DataTable时赋值也有
Current: 连接到DataTable才会有的, 调用BeginEdit时使用Proposed版本, 否则直接更改Current版本
Default: Default值优先Proposed然后才取Current
输出如下---------------------------------------------------------------
标签:Console,oneRow,WriteLine,和行,版本,output,ADO,Net,dt From: https://www.cnblogs.com/captionAmazing/p/16999308.html