再次折腾ADO.Net行状态和行版本

    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

输出如下---------------------------------------------------------------

 

posted @ 2022-12-22 17:51  Captain_Amazing  阅读(32)  评论(0)    收藏  举报