【发布时间】:2011-09-11 19:35:29
【问题描述】:
我可能会倒着看这个问题,但我仍然很好奇。有没有办法从DataGridView 中当前显示的内容构建DataTable?
需要明确的是,我知道您可以这样做DataTable data = (DataTable)(dgvMyMembers.DataSource);,但其中包括隐藏列。我只想从显示的列中构建它。
希望这是有道理的。
所以我最终尝试了几个答案的组合,因为这似乎是最好的。下面是我正在尝试的。基本上我是从数据源创建数据表,然后根据列是否可见向后工作。但是,在它删除一列之后,我在 foreach 的下一次迭代中得到一个 Collection was modified; enumeration operation may not execute。
我很困惑,因为我没有尝试修改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;
}
【问题讨论】:
-
您收到错误是因为 DataTable 已绑定到 DGV;当您从 DT 中删除列时,DGV 中的绑定列也将被删除。在删除列之前复制 DT,将您的分配更改为
dt为:var dt = ((DataTable)dgv.DataSource).Copy();
标签: c# .net datagridview datatable