C#中DataTable关于,copy和clone区别以及行主键操作

        public static void TestDataTable()
        {
            /*
             * DataTable学习总结:
             * 1.dt.Clone()和dt.Copy()的区别?
             * 	a.dt.Clone()只会克隆表格的架构(表格名和列信息),并不会拷贝数据,也就是说,克隆完之后是一个结构和dt一模一样的空表格
             * 	b.dt.Copy()不仅会复制表格的架构,也会拷贝表格数据,也就是说,复制完以后和dt是一模一样的
             *
             * 2.既然dt.Copy()之后结构和数据都和dt一模一样,那dt或者dtCopy的数据修改会不会影响到对方呢?
             * 	互不影响
             *
             * 3.dt.PrimaryKey:设置/获取表格的主键列
             *
             * 4.dt.Rows.Find:根据主键value查找单个行
             *
             * 5.大家可以多看DataRowCollection这个类中的方法
             */
            var dt = new DataTable("Lingbug的dt");
            string columnStr = "Id/Name/Age/Sex/Salary";

            var primaryKeys = new List();//主键列集合
            columnStr.SplitLingbug(true, "/").ForeachLingbug((c, index) =>
            {
                var column = new DataColumn(c);
                if (index == 0) primaryKeys.Add(column);//将该列添加到主键列集合中
                dt.Columns.Add(column);
            });
            dt.PrimaryKey = primaryKeys.ToArray();//设置表格的主键列

            var names = "张三/李四/王五/赵柳/田七/李把/赵四".SplitLingbug(true, "/");
            var sexs = "男/女".SplitLingbug(true, "/");
            var ran = new Random();

            for (int i = 0; i < 100; i++)
            {
                dt.Rows.Add(1000 + i, names[ran.Next(names.Length)], ran.Next(15, 31), sexs[ran.Next(sexs.Length)], Convert.ToDecimal(Math.Round(Convert.ToDecimal(ran.Next(3000, 20000)) + Convert.ToDecimal(ran.NextDouble()), 2)));
            }

            Console.WriteLine(dt.PrimaryKey.ToJson());

            var rowFind = dt.Rows.Find("1066");//根据主键值去查看数据行:单行
            Console.WriteLine(rowFind.ItemArray.ToJson());
            dt.Rows.RemoveAt(99);//根据索引移除一行

            Console.WriteLine("初始化表格完毕");
            ShowDt(dt);

            var dtClone = dt.Clone();//克隆只会克隆表结构,不会克隆数据
            ShowDt(dtClone);
            var dtCopy = dt.Copy();//复制不仅复制表结构,数据也复制
            Console.WriteLine("Copy完毕");
            ShowDt(dtCopy);
            foreach (DataRow row in dtCopy.Rows)
            {
                var value = Convert.ToInt32(row["Id"]);
                row["Id"] = value - 1000;
            }

            //不管是修改source还是target,都不会影响到对方表格
            Console.WriteLine("修改Copy完毕");
            Console.WriteLine("dtCopy");
            ShowDt(dtCopy);
            Console.WriteLine("dt");
            ShowDt(dt);
            Console.WriteLine("--------------------------------------------------------------------------------------------------------------------------------------------");
            foreach (DataRow row in dt.Rows)
            {
                var value = Convert.ToInt32(row["Id"]);
                row["Id"] = value - 500;
            }

            Console.WriteLine("修改dt完毕");
            Console.WriteLine("dtCopy");
            ShowDt(dtCopy);
            Console.WriteLine("dt");
            ShowDt(dt);
        }

 

 

你可能感兴趣的:(C#/.NET)