DataTable经典报错{列/行已属于其他表}

时间:2022-04-28 16:09:45
Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除, 
还可以通过datatable.RejectChanges()回滚,使该行取消删除。 

如果要彻底删除datarow,需要Delete()和AccepteChanges()方法同时使用,

            结论:再向一个表中设定 列,添加 行的时候,列必须是通过 new DataColumn()得到的,=赋值的会报错;

                        添加行,比如在insertAt() 行必须是 要添加到的table的  dt.NewRow()   最后添加到那个table的,如果需要其他dt的值,可以通过itemarray进行赋值。 

DataTable dt1 = new DataTable();
            DataColumn c1 = new DataColumn("name",typeof(string));
            DataColumn c2 = new DataColumn("age",typeof(int));
            dt1.Columns.Add(c1);
            dt1.Columns.Add(c2);
            DataRow r1 = dt1.NewRow();
            r1["name"] = "zs";
            r1["age"] = 25;
            DataRow r2 = dt1.NewRow();
            r2["name"] = "ls"; 
            r2["age"] = 26;
            dt1.Rows.Add(r1);
            dt1.Rows.Add(r2);
            //DataColumn c3 = c1;
            //DataColumn c4 = c2;
            DataTable dt2 = new DataTable();
         //dt2.Columns.Add(c3);//报错 列name已经属于另外一张表
            DataColumn cc1 = new DataColumn("name", typeof(string));
            DataColumn cc2 = new DataColumn("age", typeof(int));
            dt2.Columns.Add(cc1); dt2.Columns.Add(cc2);
           // dt2.Rows.InsertAt(r1, 0);//报错 : 该行已经属于另一个表。
            DataRow newr = dt2.NewRow();
            newr.ItemArray = r1.ItemArray;
            dt2.Rows.InsertAt(newr,0);