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

时间:2018-08-10 13:59:43

标签: c# datatable

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

问候 阿马里诺(Amarino)

4 个答案:

答案 0 :(得分:1)

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

send

但是在第二种情况下,您应该提前知道将在何处查看哪些数据,您可以获取任何单元格并将其添加到新的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

答案 1 :(得分:1)

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

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);
}

答案 2 :(得分:0)

如果我理解正确,您想复制数据,但忽略 schema 。为此,您可以从源表中收集数据集,然后遍历每一行并将其插入目标表中。

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

答案 3 :(得分:0)

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

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

如果您想限制某些条件

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