2014-10-14 4 views
0
DataTable dt = ((DataTable)dataGridView1.DataSource).Copy(); 

После того, как я удаляю строки из DataGridview, я получаю сообщение об ошибке при чтении dt. «DeletedRowInaccessibleException»Копирование строк из datagridwiew в datatable

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

+1

Вам нужно сохранить изменения dt? – Reniuz

ответ

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

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

+0

Спасибо, это решило мою проблему. – Koray

+0

@Koray Добро пожаловать, удачи в вашем проекте! – mybirthname

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.
Затем последовательность ретрамируется в DataTable с использованием расширения CopyToDataTable