Я вполне могу смотреть на эту проблему задом наперед, но тем не менее мне любопытно. Есть ли способ построить DataTable
из того, что в данный момент отображается в DataGridView
?
Чтобы было ясно, я знаю, что вы можете сделать это DataTable data = (DataTable)(dgvMyMembers.DataSource);
, однако это включает скрытые столбцы. Я хотел бы построить его только из отображаемых столбцов.
Надеюсь, что это имеет смысл.
Так что в итоге я попробовал комбинацию из пары ответов, поскольку это казалось лучшим. Ниже то, что я пытаюсь. В основном я создаю DataTable из DataSource, а затем работаю в обратном направлении, основываясь на том, видим столбец или нет. Однако после удаления столбца я получаю Collection was modified; enumeration operation may not execute
на следующей итерации foreach
.
Я в замешательстве, поскольку я не пытаюсь изменить DataGridView
, только DataTable
, так что случилось?
DataTable data = GetDataTableFromDGV(dgvMyMembers);
private DataTable GetDataTableFromDGV(DataGridView dgv)
{
var dt = ((DataTable)dgv.DataSource).Copy();
foreach (DataGridViewColumn column in dgv.Columns)
{
if (!column.Visible)
{
dt.Columns.Remove(column.Name);
}
}
return dt;
}