Копирование строк из datagridwiew в datatable

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

После того, как я удаляю строки из DataGridview, я получаю ошибку при чтении dt. "DeletedRowInaccessibleException"

Как я могу копировать не удаленные строки в datatable?

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

Вот один из способов сделать это.


Вы попросили не копировать удаленные строки, тогда вы могли бы написать

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

Это решение использует расширения IEnumerable Cast, чтобы создать последовательность DataRows, к которой применяется условие Where, проверяющее RowState. Затем последовательность реманализируется в DataTable с использованием расширения CopyToDataTable

licensed under cc by-sa 3.0 with attribution.