将数据从DataTable复制到列表而不将数据链接到DataTable c#

时间:2014-07-30 13:21:24

标签: c# datatable

我有DataTable dTable,其中包含多个列和行。

我正在编写一个函数来重排行,因此我想将行(带数据)复制到List。我使用以下代码执行:

        List<DataRow> rows = new List<DataRow>(dTable.Rows.Count);
        int count = 0; 
        foreach (DataRow rowname in dTable.Rows)
        {
            rows.Add(dTable.NewRow());
            rows[count].BeginEdit();
            rows[count] = (rowname);
        } 

现在我要清除DataTable dTable并随机将行添加回DataTable,但是如果我添加dTable.Clear(),则行中的信息会被添加到{{1}} List也被清除,如何在不丢失List中的数据的情况下从`DataTable'中删除行?

2 个答案:

答案 0 :(得分:0)

希望我能正确解释以下内容。

请记住,当您从一个地方获取值并将其存储在另一个地方时,您不会创建它的新实例,而是指向原始数据。因此,当您将行添加到列表中时,它会指向您的数据表,然后您将其清除,以便您的列表现在不包含行信息。

这有效,但可能有另一种方式。没有花很多时间研究它。

//temp table with row struct as not to point back to the original
//datatable that we will clear so we will just clone it.
DataTable tempDT = dt.Clone();

List<DataRow> rows = new List<DataRow>();

foreach (DataRow row in dt.Rows)
{
    DataRow copy = tempDT.NewRow();
    copy.ItemArray = (object[])row.ItemArray.Clone();
    rows.Add(copy);
}

dt.Clear();

答案 1 :(得分:0)

我认为主要问题是dTable.Clear()也删除了列。请尝试使用dTable.Rows.Clear()