Попробуйте добавить это в цикл foreach, который добавляет столбцы:
dt.Columns.Add (column.Name, typeof (string));
Или альтернативно:
dt.Columns.Add (column.HeaderText, typeof (string));
Так бы это выглядело так:
foreach (DataGridViewColumn column in dgv.Columns)
{
if (column.Visible)
{
dt.Columns.Add(column.Name, typeof(string));
}
}
Я не тестировал этот код, но вы должны явно добавить имена в столбцы, скажите, работает ли он ...