Bien puedo estar mirando este problema al revés, pero tengo curiosidad, no obstante. ¿Hay alguna forma de crear un DataTable
a partir de lo que se muestra actualmente en el DataGridView
?¿Cómo construir una DataTable desde un DataGridView?
Para ser claros, sé que puede hacer esto DataTable data = (DataTable)(dgvMyMembers.DataSource);
, pero eso incluye columnas ocultas. Me gustaría construirlo solo a partir de las columnas mostradas.
Espero que tenga sentido.
Así que terminé tratando una combinación de un par de respuestas, ya que parecía lo mejor. Debajo está lo que estoy intentando. Básicamente estoy creando la DataTable de DataSource y luego trabajando hacia atrás en función de si una columna está visible o no. Sin embargo, después de eliminar una columna obtengo un Collection was modified; enumeration operation may not execute
en la próxima iteración del foreach
.
Estoy confundido ya que no soy tratando para modificar el DataGridView
, sólo el DataTable
¿y qué pasa?
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;
}
Recibirá el error porque DataTable está vinculado a la DGV; cuando elimina la columna del DT, también se elimina la columna encuadernada del DGV. Haga una copia del DT antes de eliminar columnas, cambie su asignación a 'dt' a:' var dt = ((DataTable) dgv.DataSource). Copia(); ' –
Eso lo hizo, gracias –