繁体   English   中英

在不使用克隆或复制的情况下将一个DataTable的内容复制到另一个

[英]copy content of one DataTable to another without using clone or copy

我想将内容从一个数据表复制到另一个数据表,而不复制或克隆数据结构。 做这个的最好方式是什么? 我需要这样做,因为我从SQL Server存储过程获得了一个数据表,并且无法修改给定的只读表。 所以我需要重新创建它而不复制所有底层结构。 我希望这是有道理的。

问候阿马里诺

如果要复制dataTable,则有两个选择,第一个是复制或克隆。 第二个选项是使用foreach或for循环进行复制,您可以从dataTable中获取任何列

 int columnsize = dt.Columns.Count;
            foreach (DataRow X in dt.Rows)
            {
                for (int i = 0; i < columnsize; i++)
                {
                   // int bir = Convert.ToInt32(X[i]);
                   // you can set here your need dataTable

}


            }
// then here new dataTable you can assing to any datagridview.DataSource = newDataTable

但是在第二种情况下,您应该提前知道将在何处查看哪些数据,您可以获取任何单元格并将其分配给新的DataTable

这是我的使用代码

    DataTable dh1 = new DataTable("data1");

    dh1.Columns.Add("specification_name", typeof(string));
    dh1.Columns.Add("summalar", typeof(string));
    dh1.Columns.Add("address", typeof(string));
    dh1.Columns.Add("id1", typeof(int));
    dh1.Columns.Add("client_id", typeof(int));
    dh1.Columns.Add("stack_id", typeof(int));
    foreach (DataRow dd in dt.Rows) 
    {

        DataTable temp = new DataTable("temp");
        DataRow ttt = dh1.NewRow();

        for (int j = 0; j < col; j++) 
        {

                ttt[0] = dd[1];
                ttt[1] = dd[2];
                ttt[2] = dd[3];
                ttt[3] = dd[4];
                ttt[4] = dd[5];
                ttt[5] = dd[6];
                break;


        }
        dh1.Rows.Add(ttt);





    }

我一直想做这样的事情:以下解决方案对我有用。

DataTable lDT2 = someMethod(); //populated with data from SomeMethod()
DataTable lDT3 = new DataTable();

lDT3.Columns.Add("Name", typeof(string));
lDT3.Columns.Add("Name2", typeof(string));
foreach (DataColumn col in lDT2.Columns) {
    lDT3.Columns.Add(col.ColumnName, col.DataType);
}

foreach (DataRow dr in lDT2.Rows) {
   DataRow lDT3dr = lDT3.NewRow();
   for (int i = 0; i < lDT2.Columns.Count; i++) {
       if (i == 0) { lDT3dr[i] = "some info"; }
       if (i == 1) { lDT3dr[i] = "more info"; }
       lDT3dr[i+2] = dr[i];
    }
    lDT3.Rows.Add(lDT3dr);
}

如果我理解正确,您想要复制数据但忽略模式 您可以通过从源表中收集数据集,然后遍历每一行并将其插入目标表中来进行此操作。

这是一种将数据从一个表复制到另一个表的简单方法,而无需担心键或约束。 您将需要确保目标表可以接受数据(它必须是正确的类型,或者必须将其强制转换为可接受的数据)。

另一种选择是使用DefaultView.ToTable()。 这也允许您提取DISTINCT值。 如果要所有列

var myNewTable = ExistingDataTable.DefaultView().ToTable();

如果您想限制某些条件

var dv = ExistingDataTable.DefaultView();
dv.Filter = "SomeColumn = 'SomeValue'";
var myFilteredTable = dv.ToTable();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM