将行从datagridview复制到datatable

时间:2014-10-14 12:00:51

标签: c# datagridview datatable datarow

DataTable dt = ((DataTable)dataGridView1.DataSource).Copy();

我从DataGridview删除行后,我在读取dt时遇到错误。 " DeletedRowInaccessibleException"

如何将未删除的行复制到datatable?

2 个答案:

答案 0 :(得分:2)

DataTable gridTable = (DataTable)dataGridView1.DataSource;

//you can call AcceptChanges() if you want !

//create data table with the same schema as gridTable !
DataTable dt = gridTable.Clone();

foreach(DataRow row in gridTable.Rows)
{
    if(row.RowState == DataRowState.Deleted)
       continue;

    //import every row from the gridTable to the new DataTable.
    dt.ImportRow(row);
}

这是一种方法。

答案 1 :(得分:2)

您要求不复制已删除的行,然后您可以写

DataTable source = (DataTable)dataGridView1.DataSource;
DataTable dt = source.Rows
                     .Cast<DataRow>()
                     .Where(x => x.RowState != DataRowState.Deleted)
                     .CopyToDataTable();

此解决方案使用IEnumerable extensions Cast创建一系列DataRows,Where condition检查RowState。 然后使用CopyToDataTable扩展名

在DataTable中重新实现序列