Создание столбцов данных из столбцов datagridview

У меня есть datagridview со столбцами, которые я создал во время разработки.

Теперь я хочу программно создать таблицу данных с теми же столбцами, что и в представлении сетки.

Я попробовал следующий код.

Dim dataTable As New DataTable
For Each col As DataGridViewColumn In dgDocEntries.Columns
   dataTable.Columns.Add(col)
Next

Это вызывает ошибку компиляции: значение DataGridViewColumn не может быть преобразовано в DataColumn. Очевидно, я пытался приводить типы, но это не сработало.

Я также не могу использовать свойство источника данных для клонирования/копирования, потому что я устанавливаю строки вручную.


person codeGEN    schedule 27.06.2016    source источник
comment
Сделайте обратное: создайте DT с нужными столбцами, добавьте данные в таблицу данных, а затем используйте его в качестве источника данных - DGV создаст столбцы из этого. Вам также может быть лучше использовать источник данных List‹T›, если данные не поступают из базы данных и не поступают в нее.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.06.2016
comment
@Plutonix Я не могу этого сделать, потому что иногда я устанавливаю источник данных на основе данных, поступающих из базы данных. Извините, что не упомянул об этом изначально.   -  person codeGEN    schedule 27.06.2016
comment
Посмотрите на этот пост, который делает обратное: он создает DGV столбцы из DataTable. Вы должны иметь возможность использовать те же свойства, чтобы добиться обратного.   -  person TaW    schedule 27.06.2016
comment
Создайте ОУ из таблицы БД. Добавляйте или не добавляйте данные, не имеет значения. dgv.DataSource = myDT создаст для вас столбцы в dgv.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.06.2016


Ответы (1)


Что-то в этом роде может выполнить эту работу:

void CopyTableColumnsFromDGV(DataGridView dgv, DataTable dt)
{
    foreach (DataGridViewColumn dgvCol in dgv.Columns)
    {
        DataColumn dtCol = new DataColumn(dgvCol.Name, dgvCol.ValueType);
        dtCol.Caption = dgvCol.HeaderText;

        dt.Columns.Add(dtCol);
    }
}
person TaW    schedule 27.06.2016