繁体   English   中英

将行从DataTable复制到列表,而无需将数据链接到DataTable C#

[英]Copy Rows from DataTable to list without linking data to the DataTable c#

我有一个dTable多个列和行的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() ,则也清除了List中行中的信息,如何从DataTable中删除行'不会丢失列表中的数据?

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

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

这可行,但是可能还有另一种方法。 没有花很多时间研究它。

//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();

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

暂无
暂无

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

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