Я вполне могу взглянуть на эту проблему задом наперед, но мне тем не менее любопытно. Есть ли способ построить DataTable
из того, что в настоящее время отображается в DataGridView
?
Для ясности, я знаю, что вы можете это сделать DataTable data = (DataTable) (dgvMyMembers.DataSource);
, однако это включает скрытые столбцы. Я хотел бы построить его только из отображаемых столбцов.
Надеюсь, что это имеет смысл.
В итоге я попробовал комбинацию из пары ответов, так как это показалось мне лучшим. Ниже то, что я пытаюсь. В основном я создаю DataTable из источника данных, а затем работаю в обратном направлении в зависимости от того, отображается ли столбец или нет. Однако после удаления столбца я получаю Коллекция была изменена;Операция перечисления может не выполняться
на следующей итерации 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;
}